開始
Nvim 的 :help
頁面,是從 原始碼 使用 tree-sitter-vimdoc 解析器 產生 的。
啟動 Vim
最常見的情況,Nvim 是使用以下指令啟動以編輯單一檔案:
nvim filename
更一般的情況,Nvim 的啟動方式如下:
nvim [option | filename] ..
選項參數和檔案名稱參數可以混合使用,而且可以給予任意數量的參數。然而,請留意那些需要參數的選項。
以下項目決定如何開始編輯:
-file --- 檔案名稱 一個或多個檔案名稱。第一個會成為目前的檔案並讀入緩衝區。游標會定位在緩衝區的第一行。為了避免檔案名稱以 "-" 開頭而被誤解為選項,請在參數列表前面加上 "--",例如:
nvim -- -filename
在 "--" 之後的所有參數都會被解釋為檔案名稱,不能再有其他的選項或 "+command" 參數。
--
-
stdin(標準輸入)的別名。範例:
echo text | nvim - file
"text" 會被讀入緩衝區 1,"file" 會被開啟為緩衝區 2。在大多數情況下(除了 -s、-es、
--embed、--headless),如果 stdin 不是 TTY,則會被讀取為文字,因此會隱含 "-"
echo text | nvim file
緩衝區會被標記為已修改,因為它包含需要儲存的文字(除了唯讀
-R 模式)。如果你不喜歡這樣,請在你的 init.vim 中加入以下幾行:
" Don't set 'modified' when reading from stdin
au StdinReadPost * set nomodified
要將 stdin 讀取為 Normal 指令,請使用
-s 搭配 "-"
echo "ifoo" | nvim -s -
要將 stdin 讀取為 Ex 指令,請使用
-es 或
-eecho "echo getpid()" | nvim -e - -V1
要開啟一個字面名稱為 "-" 的檔案,請將其放在 "--" 之後
echo foo | nvim -- -
-t -tag -t
{tag}
一個標籤。"tag" 會在標籤檔案中尋找,相關的檔案會成為目前的檔案,並且會執行相關的指令。這主要用於 C 程式,在這種情況下,"tag" 通常是一個函式名稱。效果是包含該函式的檔案會成為目前的檔案,且游標會定位在函式的開頭(請參閱
tags)。
(無) 如果沒有上述四個項目之一,Vim 會開始編輯一個新的緩衝區。它是空的,且沒有檔案名稱。
啟動選項 選項參數可以以任何順序給定。單字母選項可以在一個破折號後組合。在 "--" 參數之後不能有選項參數。
--clean --clean 模擬 Nvim 的全新安裝
跳過從檔案和環境變數的初始化。
載入內建插件,不像 "-u NONE -i NONE"。
--noplugin --noplugin 跳過載入插件。重置
'loadplugins' 選項。請注意,
-u 參數也可能停用載入插件
參數 載入 vimrc 檔案 載入插件
(無) 是 是 -u NONE 否 否 -u NORC 否 是 --noplugin 是 否
--startuptime
{fname}
--startuptime在啟動期間將計時訊息寫入檔案
{fname}
。這可以用來找出在載入你的
設定、插件和開啟第一個檔案時所花費的時間。當
{fname}
已經存在時,新的訊息會被附加到其中。
-+ +[num] 游標會定位在正在編輯的第一個檔案的第 "num" 行。如果缺少 "num",游標會定位在最後一行。
-+/ +/{pat} 游標會定位在正在編輯的第一個檔案中,包含 "pat" 的第一行(請參閱
pattern 以取得可用的搜尋模式)。搜尋從游標位置開始,該位置可以是第一行,或是從
shada 最後使用的游標位置。若要強制從第一行開始搜尋,請使用 "+1 +/pat"。
+{command}
-+c -c -c
{command}
{command}
會在讀取第一個檔案之後執行(並且在該檔案的自動指令和模式行處理完成之後)。"command" 會被解釋為 Ex 指令。如果 "command" 包含空格,則必須用雙引號括起來(這取決於所使用的 shell)。範例:
vim "+set si" main.c
vim "+find stdio.h"
vim -c "set ff=dos" -c wq mine.mak
注意:你可以在 Vim 指令中使用最多 10 個 "+" 或 "-c" 參數。它們會按照給定的順序執行。"-S" 參數也算作 "-c" 參數。
--cmd
{command}
--cmd
{command}
會在處理任何 vimrc 檔案之前執行。否則,它的行為類似於 -c
{command}
。你可以使用最多 10 個這些指令,與 "-c" 指令無關。
-S -S [file] 在讀取第一個檔案之後執行 Vimscript 或 Lua (".lua") [file]。另請參閱
:source。如果未指定 [file],則預設為 "Session.vim"。等同於:
-c "source {file}"
可以像 "-c" 一樣重複使用,但受限於 10 個 "-c" 參數的相同限制。{file}
不能以 "-" 開頭。
-L
-L -r -r 復原模式。如果沒有檔案名稱參數,則會顯示現有的交換檔案列表。如果有檔案名稱,則會讀取交換檔案以復原當機的編輯工作階段。請參閱
crash-recovery。
-R -R 唯讀模式。會為所有正在編輯的檔案設定
'readonly' 選項。你仍然可以編輯緩衝區,但會被阻止意外覆寫檔案。如果你忘記自己處於檢視模式並進行了一些變更,你可以透過在 Ex 指令中加入驚嘆號來覆寫檔案,例如 ":w!"。可以使用 ":set noro" 重設
'readonly' 選項(請參閱選項章節,
options)。後續的編輯將不會在唯讀模式下進行。呼叫可執行檔 "view" 的效果與 -R 參數相同。
'updatecount' 選項會被設定為 10000,這表示交換檔案不會經常自動更新。請參閱
-M 以禁止修改。
如果 stdin 不是 TTY:-e 會將 stdin 讀取/執行為 Ex 指令。-E 會將 stdin 讀取為文字(讀入緩衝區 1)。
-es 會將 stdin 讀取/執行為 Ex 指令。
printf "put ='foo'\n%%print\n" | nvim -es
-Es 會將 stdin 讀取為文字(讀入緩衝區 1)。使用
-c 或 "+" 來傳送指令。
printf "foo\n" | nvim -Es +"%print"
這些指令會顯示在 stdout 上::list :number :print :set 使用
:verbose 或
'verbose',其他指令會顯示在 stderr 上
nvim -es +":verbose echo 'foo'"
nvim -V1 -es +foo
除非給定了
-u,否則會跳過使用者
設定。會跳過交換檔案(如同
-n)。會載入使用者
shada(除非給定了 "-i NONE")。
-l -l
{script}
[args] 在處理任何先前的 Nvim
cli-arguments 後,以非互動方式(沒有 UI)執行 Lua
{script}
,並帶有可選的 [args],然後退出。在 Lua 錯誤時退出並傳回 1。請參閱
-S 以執行多個不帶參數的 Lua 腳本(帶有 UI)。
lua-args所有的 [args] 都會被視為
{script}
的參數,並儲存在 Lua 的
_G.arg
全域表格中,因此 "-l" 會結束 Nvim 參數的處理。
{script}
名稱會儲存在
_G.arg[0]
中。
將
'verbose' 設定為 1(如同 "-V1"),因此 Lua
print()
會寫入輸出。如果
{script}
列印訊息且不會導致 Nvim 退出,則 Nvim 會確保輸出以換行符號結尾。
在 "-l" 之前的參數會在執行
{script}
之前處理。此範例會在執行 "foo.lua" 之前退出
nvim +q -l foo.lua
這會在執行 "foo.lua" 之前載入 Lua 模組 "bar"
nvim +"lua require('bar')" -l foo.lua
與 -l
不同,不允許先前的參數。
-V verbose -V[N] 詳細模式。將
'verbose' 選項設定為 [N](預設值:10)。會為每個被 ":source" 的檔案以及讀取或寫入 ShaDa 檔案提供訊息。可以用來找出在啟動和退出時發生的情況。範例:
nvim -V8
-V[N]{file} 類似於 -V 並將
'verbosefile' 設定為
{file}
(不能以數字開頭)。訊息不會顯示,而是會寫入
{file}
。範例:
nvim -V20vimlog
-n -n 不使用
交換檔。當機後的復原將無法進行。如果您想在非常慢的媒介(例如,軟碟)上檢視或編輯檔案,這會很方便。也可以使用「:set updatecount=0」來達成。您可以使用將
'updatecount' 選項設定為某個值,例如「:set uc=100」,再次開啟它。
'updatecount' 在執行完 vimrc 檔案中的指令後,但在 GUI 初始化之前,會被設定為 0。因此,它會覆寫 vimrc 檔案中
'updatecount' 的設定,但不會覆寫 gvimrc 檔案中的設定。請參閱
啟動。當您想要減少對磁碟的存取時(例如,對於筆記型電腦),請不要使用「-n」,而是將
'updatetime' 和
'updatecount' 設定為非常大的數字,並在您想要儲存工作時鍵入「:preserve」。這樣,您就可以保留當機復原的可能性。
-o -o[N] 開啟 N 個視窗,水平分割。如果沒有給定 [N],則會為每個作為參數給定的檔案開啟一個視窗。如果空間不足,則只有前幾個檔案會取得視窗。如果視窗比參數多,則最後幾個視窗將會編輯一個空的檔案。
-O -O[N] 開啟 N 個視窗,垂直分割。否則,它就像 -o。如果同時給定 -o 和 -O 選項,則命令列上的最後一個選項會決定視窗的分割方式。
-p -p[N] 開啟 N 個標籤頁。如果沒有給定 [N],則會為每個作為參數給定的檔案開啟一個標籤頁。最大值由
'tabpagemax' 頁面設定(預設為 50)。如果標籤頁比參數多,則最後幾個標籤頁將會編輯一個空的檔案。另請參閱
標籤頁。
-d-d 在
差異模式下啟動。
-u E282 -u
{vimrc}
檔案
{vimrc}
會被讀取以進行初始化。大多數其他初始化會被跳過;請參閱
初始化。
這可以用於以特殊模式、特殊對應和設定啟動 Vim。可以使用 shell 別名使這更容易使用。例如,在 C shell 的後代中
alias vimc 'nvim -u ~/.config/nvim/c_init.vim \!*'
在 Bash shell 中
alias vimc='nvim -u ~/.config/nvim/c_init.vim'
當 {vimrc}
為「NONE」(全部大寫)時,會跳過所有來自檔案和環境變數的初始化。外掛程式和語法高亮也會被跳過。
當 {vimrc}
為「NORC」(全部大寫)時,其效果與「NONE」相同,但不會跳過外掛程式和語法高亮。
-i -i
{shada}
檔案
{shada}
會被使用,而不是預設的 ShaDa 檔案。如果使用名稱「NONE」(全部大寫),則即使設定了
'shada' 或使用「:rsh」或「:wsh」,也不會讀取或寫入 ShaDa 檔案。另請參閱
shada 檔案。
-s -s
{scriptin}
讀取腳本檔案
{scriptin}
,將字元解譯為普通模式的輸入。也可以使用「:source!」來完成相同的事情。
:source! {scriptin}
如果
{scriptin}
為「-」,則從標準輸入讀取。
echo "ifoo" | nvim -s -
如果在 Nvim 退出之前到達檔案結尾,則會從鍵盤讀取進一步的字元。
-w -w
{scriptout}
您鍵入的所有按鍵都會記錄在檔案「scriptout」中,直到您退出 Vim。可用於建立要與「vim -s」或「:source!」一起使用的腳本檔案。如果「scriptout」檔案已存在,則會附加到該檔案。
{scriptout}
不能以數字開頭。另請參閱
vim.on_key()。另請參閱
複雜重複。
-W -W
{scriptout}
與 -w 類似,但不附加,而是覆寫現有檔案。
--embed --embed 使用 stdin/stdout 作為 msgpack-RPC 通道,以便應用程式可以透過 RPC
API 嵌入和控制 Nvim。
在載入啟動檔案和讀取緩衝區之前,等待客戶端(「嵌入器」)呼叫
nvim_ui_attach(),以便 UI 可以確定性地處理(顯示)早期訊息、對話框等。客戶端可以在
nvim_ui_attach
之前執行其他請求(例如,用於功能偵測的
nvim_get_api_info
)。在此啟動前階段,使用者組態當然不可用(類似於
--cmd
)。
_未使用_ UI 協定的嵌入器必須傳遞
--headlessnvim --embed --headless
然後啟動將繼續進行,而無需等待
nvim_ui_attach
。這相當於
nvim --headless --cmd "call stdioopen({'rpc': v:true})"
在 socket 連線上使用 UI 協定的嵌入器必須同時傳遞
--listen 和
--embednvim --embed --listen addr
對於腳本編寫(測試)來說,查看不會由
-es 列印的訊息也很有用。
若要將標準輸入讀取為文字,必須明確給定「-」:--headless 不能假設標準輸入只是文字。
echo foo | nvim --headless +"%print" +"q!" -
若要使用 systemd 按需啟動伺服器,請使用 systemd socket 單元和相關的服務單元執行
systemd-socket-proxyd --exit-idle-time
在啟動時,Nvim 會檢查環境變數和檔案,並據此設定值,並依以下方式進行
2. 處理參數 檢查啟動 Vim 的命令中的選項和檔案名稱。
-V 參數可用於顯示或記錄接下來發生的事情,這對於除錯初始化很有用。
--cmd 參數會被執行。會為所有檔案建立緩衝區(但尚未載入)。
4. 等待 UI 連線。以
--embed 啟動的 Nvim 會在繼續載入使用者組態之前,等待 UI 連線。
6. 啟用檔案類型和縮排外掛程式。這與命令執行相同的操作
:runtime! ftplugin.vim indent.vim
如果給定「-u NONE」命令列參數,則會跳過。
組態檔案位於: Unix ~/.config/nvim/init.vim(或 init.lua)Windows ~/AppData/Local/nvim/init.vim(或 init.lua)
$XDG_CONFIG_HOME $XDG_CONFIG_HOME/nvim/init.vim(或 init.lua)
如果 Nvim 以「-u
{file}
」啟動,則會使用
{file}
作為組態,並且會跳過所有直到 8. 的初始化。不會設定 $MYVIMRC。「nvim -u NORC」可以用於跳過這些初始化,而不讀取檔案。「nvim -u NONE」也會跳過外掛程式和語法高亮。
-u
如果 Nvim 以
-es 或
-Es 或
-l 啟動,則會跳過所有直到 8. 的初始化。
system-vimrc sysinit.vim a. 會讀取系統 vimrc 檔案以進行初始化。如果 $XDG_CONFIG_DIRS 其中一個目錄中存在 nvim/sysinit.vim 檔案,則會使用該檔案。否則會使用系統 vimrc 檔案。此檔案的路徑由
:version 命令給定。通常是「$VIM/sysinit.vim」。
VIMINIT EXINIT $MYVIMRC b. 依優先順序搜尋初始化的位置
$VIMINIT 環境變數(Ex 命令列)。
使用者
組態:$XDG_CONFIG_HOME/nvim/init.vim(或 init.lua)。
其他組態: {dir}
/nvim/init.vim(或 init.lua),其中 {dir}
是 $XDG_CONFIG_DIRS 中的任何目錄。
$EXINIT 環境變數(Ex 命令列)。除非已設定或使用 $VIMINIT,否則會將
$MYVIMRC 設定為第一個有效的位置。
c. 如果
'exrc' 選項開啟 (預設為關閉),則會依優先順序在目前目錄搜尋以下檔案
".nvim.lua"
".nvimrc"
".exrc" 第一個存在的檔案會被使用,其他檔案則會被忽略。
8. 啟用檔案類型偵測。這與執行以下指令的效果相同
:runtime! filetype.lua
如果呼叫過 ":filetype off" 或使用 "-u NONE" 命令列參數,則會跳過此步驟。
9. 啟用語法高亮。這與執行以下指令的效果相同
:runtime! syntax/syntax.vim
如果呼叫過 ":syntax off" 或使用 "-u NONE" 命令列參數,則會跳過此步驟。
10. 載入外掛程式腳本。
load-plugins這與執行以下指令的效果相同
:runtime! plugin/**/*.{vim,lua}
結果是,將會在
'runtimepath' 中的所有目錄中搜尋 "plugin" 子目錄,並依字母順序 (每個目錄內) 載入所有以 ".vim" 或 ".lua" 結尾的檔案,也包括子目錄中的檔案。每個目錄內,會先載入 "*.vim" 檔案,再載入 "*.lua" 檔案。
然而,
'runtimepath' 中以 "after" 結尾的目錄會在此步驟中跳過,並僅在套件載入後才載入,請見下文。在以下情況下,不會載入外掛程式:
使用了 "-u NONE" 命令列參數
-u。請注意,使用
-c 'set noloadplugins'
無效,因為命令列中的指令尚未執行。您可以使用
--cmd 'set noloadplugins'
或
--cmd 'set loadplugins'
--cmd。
外掛程式腳本會如同上述般載入,但現在只使用以 "after" 結尾的目錄。請注意,如果已找到套件,則
'runtimepath' 將會變更,但這不應該加入以 "after" 結尾的目錄。
13. 如果指定了
-b 旗標,則設定二進位選項。
15. 如果指定了
-q 旗標,則讀取 quickfix 檔案,或是在失敗時退出。
16. 開啟所有視窗。當指定了
-o 旗標時,會開啟視窗 (但尚未顯示)。當指定了
-p 旗標時,會建立標籤頁 (但尚未顯示)。切換畫面時,會在此時發生。開始重繪。如果指定了
-q 旗標,則會跳到第一個錯誤。會載入所有視窗的緩衝區,而不會觸發
BufAdd 自動指令。
每當您變更選項的值或建立對應時,您可能會想要將它們儲存在 vimrc 檔案中以供日後使用。請參閱
save-settings 關於將目前設定狀態儲存至檔案的說明。
避免木馬程式
trojan-horse 在讀取目前目錄中的 "vimrc" 或 "exrc" 檔案時,可以透過設定
'secure' 選項來停用某些指令,以確保安全性。當從標籤檔案執行指令時,總是會這樣做。否則,您可能會不小心使用了其他人建立的 vimrc 或標籤檔案,而其中包含惡意指令。被停用的指令是那些會啟動 shell、寫入檔案,以及 ":autocmd" 的指令。":map" 指令會被回顯,因此您可以查看正在對應哪些按鍵。如果您希望 Vim 執行本機 vimrc 檔案中的所有指令,您可以在 EXINIT 或 VIMINIT 環境變數,或是在全域 exrc 或 vimrc 檔案中重設
'secure' 選項。基於顯而易見的原因,這在目前目錄的 vimrc 或 exrc 中是不可能的。在 Unix 系統上,只有在您不是 vimrc 檔案的擁有者時,才會發生這種情況。
警告:如果您解壓縮包含 vimrc 或 exrc 檔案的壓縮檔,它將會由您所擁有。您將不會受到安全性保護。在該目錄中啟動 Vim 之前,請檢查 vimrc 檔案,或重設
'exrc' 選項。某些 Unix 系統允許使用者對檔案執行 "chown"。這使得其他使用者可以建立惡意的 vimrc 檔案,並讓您成為擁有者。請小心!當使用標籤搜尋指令時,執行搜尋指令 (標籤檔案中行的最後一部分) 總是會在安全模式下執行。這就像從目前目錄的 vimrc 執行指令一樣。
如果您已啟用
'shada',則載入 ShaDa 檔案可能會花費一些時間。您可以透過暫時停用 ShaDa 來找出是否為此問題 (使用 Vim 參數 "-i NONE",
-i)。嘗試減少使用 ":set shada='20,<50,s10" 儲存在暫存器中的行數。
shada-file。
疑難排解損壞的組態
bisect 像 Vim 和 Emacs 這樣的編輯器具有極大的彈性,這意味著任何外掛程式或設定都可能以最初不顯眼的方式影響整個編輯器。
若要找出您設定中問題的原因,您必須「二分」它:1. 移除或停用您一半的
組態。2. 重新啟動 Nvim。3. 如果問題仍然存在,請跳回 1. 4. 如果問題已消失,則復原移除行的一半。5. 以這種方式繼續縮小您的組態,直到您找到導致問題的設定或外掛程式為止。
簡介訊息
:intro 當 Vim 在沒有檔案名稱的情況下啟動時,會顯示簡介訊息。一旦重新繪製顯示,訊息就會被移除。若要再次查看訊息,請使用 ":intro" 指令。若要在啟動時避免顯示簡介訊息,請將 "I" 旗標加入
'shortmess'。
$VIM 和 $VIMRUNTIME
$VIM 環境變數 "$VIM" 用於尋找 Nvim 的各種使用者檔案,例如使用者的
組態。這取決於系統,請參閱
startup。
Nvim 會依此順序嘗試取得 $VIM 的值
1. 環境變數 $VIM (如果已設定)。2. 從
'helpfile' 選項衍生的路徑,除非它也包含某些環境變數 (預設為 "$VIMRUNTIME/doc/help.txt")。會移除檔案名稱 ("help.txt" 等)。會依此順序移除尾隨的目錄名稱:"doc"、"runtime"。3. 從
nvim
可執行檔的位置衍生的路徑。4. 編譯時期定義的安裝目錄 (請參閱 ":version" 的輸出)。
在執行一次此動作後,Nvim 會設定 $VIM 環境變數。
$VIMRUNTIME 環境變數 "$VIMRUNTIME" 用於尋找各種支援檔案,例如文件和語法高亮檔案。例如,主要說明檔案通常為 "$VIMRUNTIME/doc/help.txt"。
Nvim 會依此順序嘗試取得 $VIMRUNTIME 的值
1. 環境變數 $VIMRUNTIME (如果已設定)。2. 目錄路徑 "$VIM/vim{version}" (如果存在),其中
{version}
是沒有 '-' 或 '.' 的 Vim 版本號碼。例如:"$VIM/vim82"。3. 目錄路徑 "$VIM/runtime" (如果存在)。4. $VIM 環境變數的值。這是為了與舊版 Vim 版本向後相容。5. 如果相對於
v:progpath 存在 "../share/nvim/runtime",則會使用它。6. 從
'helpfile' 選項 (如果它不包含 '$') 衍生的路徑,並從結尾移除 "doc/help.txt"。
在執行一次此動作後,Nvim 會設定 $VIMRUNTIME 環境變數。
如果您需要在 shell 中使用 $VIMRUNTIME 的值 (例如,用於在說明檔案中執行 grep 的腳本),您或許可以使用這個
VIMRUNTIME="$(nvim --clean --headless --cmd 'echo $VIMRUNTIME|q')"
CTRL-Z v_CTRL-Z CTRL-Z 暫停 Nvim,如同 ":stop"。在一般模式和視覺模式下有效。在插入模式和命令列模式下,
CTRL-Z
會被插入為一般字元。在視覺模式下,Nvim 會回到一般模式。
在圖形使用者介面 (GUI) 中,暫停的行為是實作定義的。
有多種方式可以退出 Vim
使用 :quit
關閉最後一個視窗。僅當沒有變更時才可使用。
使用 :quit!
關閉最後一個視窗。即使有變更也可以使用。
使用 :qall
關閉所有視窗。僅當沒有變更時才可使用。
使用 :qall!
關閉所有視窗。即使有變更也可以使用。
使用 :cquit
。即使有變更也可以使用。
當使用 :cquit
或出現錯誤訊息時,Vim 會以退出碼 1 退出。可以使用 :silent!
或 :catch
來避免錯誤。
大多數情況下,你會手動編輯你的 vimrc 檔案。這樣可以提供最大的彈性。有一些指令可以自動產生 vimrc 檔案。你可以直接使用這些檔案,或複製/貼上程式碼行以包含在另一個 vimrc 檔案中。
:mk :mkexrc :mk[exrc] [檔案] 將目前的按鍵對應和已變更的選項寫入 [檔案] (預設為目前目錄中的 ".exrc"),除非該檔案已存在。
:mk[exrc]! [檔案] 總是將目前的按鍵對應和已變更的選項寫入 [檔案] (預設為目前目錄中的 ".exrc")。
:mkv :mkvi :mkvimrc :mkv[imrc][!] [檔案] 類似於 ":mkexrc",但預設為目前目錄中的 ".nvimrc"。":version" 指令也會被寫入檔案。
當在對應中使用特殊按鍵時,
'cpoptions' 選項會暫時設定為其 Vim 預設值,以避免對應被誤解。這會使檔案與 Vi 不相容,但可確保它可以用於不同的終端機。
僅儲存全域對應,而不是緩衝區的局部對應。
一種常見的方法是使用預設的
設定檔案,使用 ":map" 和 ":set" 指令進行一些修改,然後寫入修改後的檔案。首先使用類似 ":source ~piet/.vimrc.Cprogs" 的指令讀取預設的 vimrc,變更設定,然後使用 ":mkvimrc!" 將其儲存在目前目錄中。如果您希望將此檔案設為預設的
設定,請將其移至 $XDG_CONFIG_HOME/nvim。您也可以使用自動指令
autocommand 和/或模式行
modeline。
vimrc-選項範例 如果您只想在您的 vimrc 中新增單一選項設定,您可以按照下列步驟操作:1. 使用 Vim 編輯您的 vimrc 檔案。2. 調整選項直到正確為止。例如,嘗試
'guifont' 的不同值。3. 附加一行以設定選項的值,使用表達式暫存器 '=' 輸入該值。例如,對於
'guifont' 選項
o:set guifont=<C-R>=&guifont<CR><Esc>
[<C-R>
是 CTRL-R
,<CR>
是歸位,<Esc>
是 Esc 按鍵] 您需要跳脫特殊字元,特別是空格。
檢視 檢視檔案 檢視是指適用於一個視窗的設定集合。您可以儲存檢視,然後在稍後還原它,文字會以相同的方式顯示。此視窗中的選項和對應也會被還原,以便您可以像儲存檢視時一樣繼續編輯。
工作階段 工作階段檔案 工作階段會保留所有視窗的檢視,以及全域設定。您可以儲存工作階段,然後在稍後還原它,視窗配置看起來會相同。您可以使用工作階段在不同的專案之間快速切換,自動載入您上次在該專案中工作的檔案。
檢視和工作階段是 ShaDa 檔案的很好的補充,ShaDa 檔案用於記住所有檢視和工作階段的資訊
shada-file。
您可以使用
-S 引數快速開始編輯先前儲存的檢視或工作階段。
vim -S Session.vim
:mks :mksession :mks[ession][!] [檔案] 寫入一個 Vim 腳本,以還原目前的編輯工作階段。當包含 [!] 時,會覆寫現有的檔案。當省略 [檔案] 時,會使用 "Session.vim"。
在還原工作階段後,您目前工作階段的完整檔案名稱可在內部變數
v:this_session 中取得。一個對應範例
:nmap <F2> :wa<Bar>exe "mksession! " .. v:this_session<CR>:so ~/sessions/
這會儲存目前的工作階段,並開始載入另一個工作階段的指令。
:mkvie :mkview :mkvie[w][!] [檔案] 寫入一個 Vim 腳本,以還原目前視窗的內容。當包含 [!] 時,會覆寫現有的檔案。當省略 [檔案] 或為 1 到 9 的數字時,會產生一個名稱,並預先加上
'viewdir'。當
'viewdir' 的最後一個路徑部分不存在時,會建立此目錄。例如,當
'viewdir' 為 "$VIM/vimfiles/view" 時,會在 "$VIM/vimfiles" 中建立 "view"。這時會始終覆寫現有的檔案。使用
:loadview 再次載入此檢視。當 [檔案] 是檔案的名稱時 (未使用
'viewdir'),則會在產生的檔案中新增一個編輯該檔案的指令。
":mkview" 的輸出包含以下項目:1. 視窗中使用的引數清單。當使用全域引數清單時,會將其重設為全域清單。也會還原引數清單中的索引。2. 視窗中正在編輯的檔案。如果沒有檔案,則視窗會設為空白。3. 如果
'viewoptions' 包含 "options" 或 "localoptions",則會還原視窗的局部對應、縮寫和選項。僅還原目前緩衝區和目前視窗的局部選項值。當將檢視儲存為工作階段的一部分,且
'sessionoptions' 中包含 "options" 時,也會儲存局部選項的全域值。4. 當使用手動折疊且
'viewoptions' 包含 "folds" 時,會還原折疊。還原手動開啟和關閉的折疊。5. 檔案中的捲動位置和游標位置。當存在已關閉的折疊時,效果不佳。6. 如果局部目前目錄與全域目前目錄不同,且
'viewoptions' 包含 "curdir",則會還原局部目前目錄。
請注意,檢視和工作階段並不完美
它們不會還原所有內容。例如,不會包含已定義的函式、自動指令和 ":syntax on"。暫存器內容和命令列歷程記錄等內容位於 ShaDa 中,而不是工作階段或檢視中。
僅當全域選項值與預設值不同時,才會設定全域選項值。當目前值不是預設值時,載入工作階段不會將其設回預設值。但局部選項會被設回預設值。
現有的對應會被覆寫,而不會發出警告。現有的對應可能會因為不明確而導致錯誤。
當儲存手動折疊以及儲存手動開啟/關閉的折疊時,在儲存和載入檢視之間對檔案所做的變更會使其混亂。
Vim 腳本的效率不是很高。但仍然比您自己輸入指令要快!
:lo :loadview :lo[adview] [nr] 載入目前檔案的視圖。當省略 [nr] 時,會載入使用 ":mkview" 儲存的視圖。當指定 [nr] 時,會載入使用 ":mkview [nr]" 儲存的視圖。
":mkview" 和 ":loadview" 的組合可用於儲存一個檔案最多十個不同的視圖。這些視圖會被記錄在
'viewdir' 選項指定的目錄中。視圖會使用檔案名稱儲存。如果檔案被重新命名或透過(符號)連結存取,則會找不到該視圖。
自動儲存和還原
*.c
檔案的視圖
au BufWinLeave *.c mkview
au BufWinEnter *.c silent! loadview
如果您退出 Vim,然後稍後再次啟動它,您通常會遺失許多資訊。ShaDa 檔案可用於記住這些資訊,讓您可以從上次離開的地方繼續。它的名稱是 SHAred DAta 的縮寫,因為它用於在 Nvim 會話之間共享資料。
ShaDa 檔案用於儲存
命令列歷程記錄。
搜尋字串歷程記錄。
輸入行歷程記錄。
非空暫存器的內容。
多個檔案的標記。
檔案標記,指向檔案中的位置。
最後的搜尋/取代模式(用於 'n' 和 '&')。
緩衝區列表。
全域變數。
您也可以使用工作階段檔案。不同之處在於 ShaDa 檔案不依賴您正在處理的內容。通常只有一個 ShaDa 檔案。工作階段檔案用於儲存特定編輯工作階段的狀態。您可以有多個工作階段檔案,每個專案一個。ShaDa 和工作階段檔案可以一起使用,讓您可以有效地進入 Vim 並直接開始在您想要的設定中工作。
session-file
Unix 的注意事項
ShaDa 檔案的檔案保護將會設定為防止其他使用者讀取它,因為它可能包含您使用過的任何文字或指令。
如果您想與其他使用者共享 ShaDa 檔案(例如,當您「su」到另一個使用者時),您可以讓該檔案對群組或所有人可寫。Vim 在寫入新的 ShaDa 檔案時將會保留此設定。請小心,不要讓任何人讀取和寫入您的 ShaDa 檔案!
Vim 不會覆蓋目前「真實」使用者不可寫的 ShaDa 檔案。這有助於當您「su」成為 root 時,但您的 $HOME 仍然設定為一般使用者的主目錄的情況。否則,Vim 將會建立一個 root 擁有的 ShaDa 檔案,而其他人無法讀取。
ShaDa 檔案不能是符號連結。這是為了避免安全問題。
標記會針對每個檔案分別儲存。當讀取檔案且
'shada' 為非空時,會從 ShaDa 檔案讀取該檔案的標記。
注意: 標記只會在退出 Vim 時寫入,這很好,因為標記會為您在目前編輯工作階段中開啟的所有檔案記住,除非使用 ":bdel"。如果您想儲存即將使用 ":bdel" 捨棄的檔案的標記,請使用 ":wsh"。不會儲存 '[' 和 ']' 標記,但會儲存 '"' 標記。'"' 標記對於跳轉到上次退出檔案時的游標位置非常有用。不會儲存以
'shada' 中的 "r" 旗標給定的任何字串開頭的檔案的標記。這可用於避免儲存卸除式媒體上的檔案的標記(對於 MS-Windows,您會使用 "ra:,rb:")。
v:oldfiles 變數會填入 ShaDa 檔案具有標記的檔案名稱。
shada-file-marks 當寫入 ShaDa 檔案時,會儲存大寫標記('A 到 'Z)。數字標記('0 到 '9)有點特殊。當寫入 ShaDa 檔案時(在退出時或使用
:wshada 指令時),'0 會設定為目前游標位置和檔案。舊的 '0 會移到 '1,'1 會移到 '2,依此類推。這類似於 "1 到 "9 刪除暫存器發生的情況。如果目前游標位置已存在於 '0 到 '9 中,則會移到 '0,以避免重複的位置。結果是使用 "'0" 時,您可以跳回退出 Vim 時的檔案和行。若要立即執行此操作,請嘗試使用此指令
vim -c "normal '0"
在 C shell 後代中,您可以為它建立別名
alias lvim vim -c '"'normal "'"0'"'
對於類似 Bash 的 shell
alias lvim='vim -c "normal '\''0"'
在
'shada' 中使用 "r" 旗標來指定不應記住哪些檔案的標記。
當使用
:wshada 寫入 ShaDa 檔案時,不使用 bang 或在常規退出時,現有 ShaDa 檔案中的資訊會與目前 Nvim 實例的資訊合併。為此,ShaDa 檔案會儲存與 ShaDa 項目關聯的時間戳記。具體而言,會執行以下操作
1. 歷程記錄行會依時間戳記合併和排序。ShaDa 檔案中的最大項目數量由
'shada' 選項定義(
shada-/、
shada-:、
shada-@ 等:每個表示歷程記錄名稱的字元都有一個子選項(
:history))。2. 未被 Nvim 開啟的檔案的本機標記和變更會複製到新的 ShaDa 檔案。被 Nvim 開啟的檔案的標記會合併,對被 Nvim 開啟的檔案的變更會被忽略。
shada-' 3. 跳躍列表會合併:跳躍會依時間戳記排序,相同的跳躍(相同的位置和時間戳記)會被壓縮。4. 搜尋模式和取代字串不會合併:具有最大時間戳記的搜尋模式或取代字串會是唯一複製到 ShaDa 檔案的項目。5. 對於每個具有最大時間戳記的暫存器實體,它是唯一儲存的項目。
shada-< 6. 所有已儲存的變數都會從目前的 Nvim 實例儲存。此外,也會複製現有的變數值,這表示從 ShaDa 檔案中移除變數的唯一方法是手動移除它或完全停用寫入變數。
shada-! 7. 對於每個具有最大時間戳記的全域標記實體,它是唯一儲存的項目。8. 緩衝區列表和標頭是唯一不會以任何方式合併的項目:唯一存在的標頭和緩衝區列表是上次寫入檔案的 Nvim 實例中的標頭和緩衝區列表。
shada-%
ShaDa 檔案是向前和向後相容的。這表示
1. 具有未知類型(即,持有未識別的資料)的項目會在讀取時被忽略,並在寫入時盲目複製。2. 具有未知暫存器名稱的暫存器項目會在讀取時被忽略,並在寫入時盲目複製。限制:僅支援名稱在 [1, 255] 區間的暫存器。
registers 3. 具有未知暫存器類型的暫存器項目會在讀取時被忽略,並在寫入時照常合併。
getregtype() 4. 具有未知標記名稱的本機和全域標記項目會在讀取時被忽略。在寫入時,全域標記項目會盲目複製,本機標記項目也會盲目複製,但前提是它們所附加的檔案符合
shada-' 限制。計算哪些檔案應符合此限制時,也會考慮未知本機標記項目的時間戳記。限制:僅支援名稱在 [1, 255] 區間的標記。
mark-motions 5. 具有未知歷程記錄類型的歷程記錄項目會在讀取時被忽略,並在寫入時盲目複製。限制:最多只能有 256 種歷程記錄類型。
history 6. 在暫存器、本機標記、全域標記、變更、跳躍和搜尋模式項目中找到的未知鍵會在內部儲存,並在寫入時傾印。在 Nvim 工作階段期間建立的項目永遠不會有此類新增內容。7. 在取代字串和歷程記錄項目中找到的其他元素會在內部儲存和傾印。在 Nvim 工作階段期間建立的項目永遠不會有此類新增內容。8. 在變數項目中找到的其他元素會在讀取時被簡單地忽略。在寫入新的變數時,它們將會在合併期間保留,但僅此而已。從目前 Nvim 工作階段傾印的變數值永遠不會有其他元素,即使變數本身是透過讀取 ShaDa 檔案取得的。
shada 檔案的預設名稱為:Unix: "$XDG_STATE_HOME/nvim/shada/main.shada" Windows: "$XDG_STATE_HOME/nvim-data/shada/main.shada" 另請參閱
base-directories。
若要選擇不同的檔案名稱,您可以使用
-i 啟動引數。"NONE" 表示永遠不會讀取或寫入 shada 檔案。以下指令也不會!
對於以下命令,可以指定另一個檔案名稱,覆蓋預設值以及使用
‘shada’ 或「-i」給定的名稱(除非是 NONE)。
有兩個命令可用於手動讀取和寫入 ShaDa 檔案。這可以用於在兩個正在執行的 Vim 程式之間交換暫存器:首先在一個程式中輸入「:wsh」,然後在另一個程式中輸入「:rsh」。請注意,如果暫存器已經包含內容,則需要使用「:rsh!」。另請注意,這意味著所有內容都將被第一個 Vim 的資訊覆蓋,包括命令列歷程記錄等。
ShaDa 檔案本身也可以手動編輯,儘管我們建議您從現有的檔案開始,以確保格式正確。您需要理解 MessagePack 格式(或者,更常見的是,找到能夠使用它的軟體)才能做到這一點。這對於建立第二個檔案(例如「~/.my.shada」)很有用,其中可能包含您在首次啟動 Nvim 時總是想要的某些設定。例如,您可以預先載入帶有特定資料的暫存器,或在命令列歷程記錄中放入特定命令。在您的
設定 檔案中加入如下一行
:rshada! ~/.my.shada
可以用來載入此資訊。您甚至可以為不同類型的檔案(例如 C 程式碼)使用不同的 ShaDa 檔案,並使用「:autocmd」命令(請參閱
:autocmd)根據檔案名稱載入它們。有關 ShaDa 檔案格式的更多資訊,請參閱
shada-format 部分。
E136 E929 shada-error-handling 某些錯誤會導致 Nvim 留下一個名為
{basename}.tmp.X
的臨時檔案(X 是從
a
到
z
的任何可用字母),而通常情況下,它會建立此檔案,寫入它,然後將
{basename}.tmp.X
重新命名為
{basename}
。此類錯誤包括
導致 Nvim 認為讀取的檔案根本不是 ShaDa 檔案的錯誤:為了安全起見,不會覆蓋非 ShaDa 檔案,以避免意外損壞不相關的檔案。例如,當輸入「nvim -i file」而不是「nvim -R file」時,可能會發生這種情況(是的,至少有人用 Vim 做過)。此類錯誤列於
shada-critical-contents-errors。
如果寫入臨時檔案失敗:例如,因為剩餘空間不足。
如果重新命名檔案失敗:例如,因為權限不足。
如果目標 ShaDa 檔案的所有者(使用者和群組)與 Nvim 執行個體的所有者不同,且變更它們失敗。僅限 Unix,僅當 Nvim 從 root 啟動時適用。
請不要忘記刪除臨時檔案,或在收到上述錯誤之一後將目標檔案替換為臨時檔案,否則所有建立 ShaDa 檔案的嘗試都可能會失敗,並出現
E929。如果您在使用
:wshada 時收到其中一個錯誤(而不是在退出 Nvim 時:也就是說,當您的 Nvim 會話正在執行時),您有其他選項
如果您收到任何錯誤(除了無法寫入臨時檔案之外),您應該考慮的第一件事是:刪除現有檔案並將其替換為臨時檔案。即使您有正在執行的 Nvim 執行個體,也請這樣做。
修正權限和/或檔案所有權,釋放一些空間,然後嘗試再次寫入。請勿刪除現有檔案。
使用帶有驚嘆號的
:wshada。在權限錯誤的情況下無濟於事。如果目標檔案實際上是 ShaDa 檔案,則在這種情況下可能會遺失某些資訊。為了稍微改善情況,請在寫入之前使用
:rshada,但這仍然會遺失任何未在目前 Nvim 執行個體中開啟的檔案的緩衝區本機標記和變更清單項目。
從 shell 中刪除目標檔案,然後使用
:wshada。結果與使用帶有驚嘆號的
:wshada 沒有不同,但在某些您沒有寫入權限的情況下,「rm -f」仍然有效。
:wsh :wshada E137 :wsh[ada][!] [檔案] 寫入 ShaDa 檔案 [檔案](預設:請參閱上方)。檔案中的資訊會先被讀取,以合併新舊資訊。當使用 [!] 時,舊資訊不會先被讀取,只會寫入內部資訊(也會停用
shada-error-handling 中描述的安全檢查)。如果
‘shada’ 為空,則最多會寫入 100 個檔案的標記。當您收到錯誤「E929:所有 .tmp.X 檔案都存在,無法寫入 ShaDa 檔案!」時,請檢查是否遺留了舊的臨時檔案(例如 ~/.local/state/nvim/shada/main.shada.tmp*)。
篩選是針對檔案名稱進行的。
:bro[wse] o[ldfiles][!] 列出檔案名稱,如同使用
:oldfiles,然後提示輸入一個數字。當數字有效時,將編輯清單中的該檔案。如果您收到
按 Enter 提示,您可以按「q」,仍然會收到輸入檔案號碼的提示。使用 [!] 來放棄修改過的緩衝區。
放棄
ShaDa 檔案是 MessagePack 條目的串聯。每個條目都是恰好四個 MessagePack 物件的串聯
1. 首先是條目的類型。物件類型必須是無符號整數。物件類型不得等於零。 2. 第二個是條目的時間戳記。它也必須是無符號整數。 3. 第三個是第四個條目的長度。也是無符號整數,用於快速跳過而不進行剖析。 4. 第四個是實際的條目資料。目前使用的所有 ShaDa 條目都使用容器來保存資料:可以是 map 或陣列。這些容器中的所有字串值不是二進制(適用於檔案名稱)就是 UTF-8,但是剖析器需要預期在 UTF-8 字串中可能存在無效的位元組。
確切格式取決於條目類型
條目類型(名稱)條目資料
1 (Header) Map,包含描述寫入此 ShaDa 檔案的產生器執行個體的資料。讀取 ShaDa 檔案時會忽略它。包含以下資料
鍵資料
產生器二進制,用於產生 ShaDa 檔案的軟體。當 ShaDa 檔案由 Nvim 寫入時,等於「nvim」。版本二進制,產生器版本。編碼二進制,有效的
‘encoding’ 值。 max_kbyte 整數,有效的
shada-s 限制值。 pid 整數,執行個體程序 ID。
*
允許具有任意數量的其他鍵以及任何資料。 2 (SearchPattern) Map,包含描述上次使用的搜尋或替換模式的資料。通常 ShaDa 檔案包含兩個此類條目:一個「ss」鍵設定為 true(描述替換模式,請參閱
:substitute),另一個設定為 false(描述搜尋模式,請參閱
search-commands)。其中一個條目的「su」鍵應為 true。如果鍵值等於預設值,則通常不會出現。鍵
鍵類型預設描述
sm 布林值 true 有效的
‘magic’ 值。 sc 布林值 false 有效的
‘smartcase’ 值。 sl 布林值 true 如果搜尋模式帶有行偏移,則為 true。請參閱
search-offset。 se 布林值 false 如果
search-offset 要求將游標放置在(相對於)模式的結尾,則為 true。 so 整數 0 偏移值。
search-offset su 布林值 false 如果目前條目是上次使用的搜尋模式,則為 true。 ss 布林值 false 如果目前條目描述
:substitute 模式,則為 true。 sh 布林值 false 如果
v:hlsearch 開啟,則為 true。使用
shada-h 或
‘nohlsearch’ 時,此鍵始終為 false。 sp 二進制 N/A 實際模式。必填。 sb 布林值 false 如果搜尋方向是向後,則為 true。
*
任何無其他鍵允許出於相容性原因,請參閱
shada-compatibility。 3 (SubString) 陣列,包含上次
:substitute 替換字串。包含單個條目:二進制,使用的替換字串。出於相容性原因,允許使用更多條目,請參閱
shada-compatibility。 4 (HistoryEntry) 陣列,包含歷程記錄中的一個條目。應具有兩個或三個條目。第一個是歷程記錄類型(無符號整數),第二個是歷程記錄行(二進制),第三個是分隔符號(無符號整數,必須在 [0, 255] 範圍內)。第三個項目僅對搜尋歷程記錄有效。可能的歷程記錄類型列於
hist-names,以下是相應的數字:0 - cmd、1 - search、2 - expr、3 - input、4 - debug。 5 (Register) Map,描述一個暫存器 (
registers)。如果鍵值等於預設值,則通常不會出現。鍵
鍵類型預設描述
rt UInteger 0 暫存器類型
無描述
0
字元式暫存器 1
行式暫存器 2
區塊式暫存器 rw UInteger 0 暫存器寬度。僅適用於
區塊式暫存器。rc 二進位陣列 不適用 暫存器內容。陣列中的每個項目代表其自己的行。行內的 NUL 字元應根據
NL-used-for-Nul 表示為 NL。ru 布林值 false 未命名的暫存器。未命名的暫存器是否指向此暫存器。n UInteger 不適用 暫存器名稱:範圍 [1, 255] 中的字元碼。範例:
quote0 暫存器的名稱為 48(零字元的 ASCII 碼)。* any none 為了相容性,允許使用其他鍵,請參閱
shada-compatibility。6 (變數) 包含兩個項目的陣列:變數名稱(二進位)和變數值(任何物件)。值會使用讀取時
msgpackparse() 所使用的相同程式碼轉換,寫入時使用
msgpackdump(),因此可能會出現
msgpack-special-dict。如果超過兩個項目,則會忽略其餘項目 (
shada-compatibility)。7 (GlobalMark) 8 (Jump) 10 (LocalMark) 11 (Change) 包含一些位置描述的 Map
條目位置
GlobalMark 全域標記位置。
'A LocalMark 本機標記位置。
'a Jump
跳躍列表中的一個位置。Change
變更列表中的一個位置。
Map 中包含的資料
鍵類型預設描述
l UInteger 1 位置行號。必須大於零。c UInteger 0 位置欄號。n UInteger 34 ('"') 標記名稱。僅適用於 GlobalMark 和 LocalMark 條目。f 二進位 不適用 檔案名稱。必填。
*
any none 為了相容性,允許使用其他鍵,請參閱
shada-compatibility。9 (BufferList) 包含 Map 的陣列。陣列中的每個 Map 代表一個緩衝區。可能的鍵
鍵類型預設描述
l UInteger 1 位置行號。必須大於零。c UInteger 0 位置欄號。f 二進位 不適用 檔案名稱。必填。
*
any none 為了相容性,允許使用其他鍵,請參閱
shada-compatibility。
*
(Unknown) 為了相容性,允許使用任何其他條目類型,請參閱
shada-compatibility。
E575 E576 ShaDa 檔案中的錯誤可能有兩種型別:1. E575 代表「邏輯」錯誤。2. E576 代表「嚴重」錯誤。寫入時,嚴重錯誤會觸發
shada-error-handling 中描述的行為。讀取時,嚴重錯誤會導致略過檔案的其餘部分。嚴重錯誤包括:
shada-critical-contents-errors
前三個 MessagePack 物件中的任何一個不是無符號整數。
第三個物件要求的位元組數大於 ShaDa 檔案中剩餘的位元組數。
類型為零的條目。也就是說,第一個物件等於零。
MessagePack 解析器無法解析條目資料。
MessagePack 解析器消耗的位元組數少於或要求的位元組數大於第三個物件中描述的解析第四個物件的位元組數。也就是說,當第四個物件包含多個 MessagePack 物件或不包含完整的 MessagePack 物件時。
Nvim 將組態、資料和日誌儲存在標準位置。強烈建議外掛程式也遵循此模式。使用
stdpath() 取得路徑。
在說明頁面中,這些預設值會當作佔位符使用,例如 "~/.config" 理解為表示 "$XDG_CONFIG_HOME 或 ~/.config"。
組態目錄 (預設)
$XDG_CONFIG_HOME Nvim:stdpath("config") Unix:~/.config ~/.config/nvim Windows:~/AppData/Local ~/AppData/Local/nvim
資料目錄 (預設)
$XDG_DATA_HOME Nvim:stdpath("data") Unix:~/.local/share ~/.local/share/nvim Windows:~/AppData/Local ~/AppData/Local/nvim-data
執行目錄 (預設)
$XDG_RUNTIME_DIR Nvim:stdpath("run") Unix:/tmp/nvim.user/xxx /tmp/nvim.user/xxx Windows:$TMP/nvim.user/xxx $TMP/nvim.user/xxx
狀態目錄 (預設)
$XDG_STATE_HOME Nvim:stdpath("state") Unix:~/.local/state ~/.local/state/nvim Windows:~/AppData/Local ~/AppData/Local/nvim-data
快取目錄 (預設)
$XDG_CACHE_HOME Nvim:stdpath("cache") Unix:~/.cache ~/.cache/nvim Windows:~/AppData/Local/Temp ~/AppData/Local/Temp/nvim-data
日誌檔案 (預設)
$NVIM_LOG_FILE
Nvim:stdpath("log")/log Unix:~/.local/state/nvim ~/.local/state/nvim/log Windows:~/AppData/Local/nvim-data ~/AppData/Local/nvim-data/log
請注意,stdpath("log") 目前是 stdpath("state") 的別名。
其他組態目錄 (預設)
$XDG_CONFIG_DIRS Nvim:stdpath("config_dirs") Unix:/etc/xdg/ /etc/xdg/nvim Windows:不適用 不適用
其他資料目錄 (預設)
$XDG_DATA_DIRS Nvim:stdpath("data_dirs") Unix:/usr/local/share /usr/local/share/nvim /usr/share /usr/share/nvim Windows:不適用 不適用
可以使用
$NVIM_APPNAME
環境變數進一步設定標準目錄。此變數控制 Nvim 將從每個基礎目錄中讀取(並自動建立)的子目錄。例如,在啟動前將
$NVIM_APPNAME
設定為 "foo" 將導致 Nvim 在
$XDG_CONFIG_HOME/foo
中尋找組態檔,而不是
$XDG_CONFIG_HOME/nvim
。
$NVIM_APPNAME
必須是名稱,例如 "foo",或相對路徑,例如 "foo/bar"。
$NVIM_APPNAME 的一個使用案例是「隔離」Nvim 應用程式。或者,若要實現真正的隔離,在 Linux 上可以使用 cgroups 名稱空間
systemd-run --user -qt -p PrivateUsers=yes -p BindPaths=/home/user/profile_xy:/home/user/.config/nvim nvim
注意:在說明頁面中,凡是提及
$XDG_CONFIG_…/nvim
的地方,都理解為表示
$XDG_CONFIG_…/$NVIM_APPNAME
。
除了
'debug' 和
'verbose' 之外,Nvim 還會保留一個通用日誌檔案,用於內部偵錯、外掛程式和 RPC 用戶端。
:echo $NVIM_LOG_FILE
預設情況下,該檔案位於 stdpath("log")/log ($XDG_STATE_HOME/nvim/log),除非該路徑無法存取,或者在
啟動 之前設定了 $NVIM_LOG_FILE。