選項
Nvim :help
頁面,由 來源 使用 tree-sitter-vimdoc 解析器 產生。
選項
關於選項的概述,請參閱 quickref.txt
選項列表。
Vim 有許多內部變數和開關,可以設定它們來達到特殊效果。這些選項有三種形式: 布林值 (boolean) 只能是開或關
布林值 切換 數值 (number) 有一個數值 字串 (string) 有一個字串值
:se :set :se[t][!] 顯示所有與預設值不同的選項。當 [!] 存在時,每個選項都會單獨顯示一行。
:se[t][!] all 顯示所有選項。當 [!] 存在時,每個選項都會單獨顯示一行。
:se[t] {選項}
切換選項:設定,將其開啟。數值選項:顯示值。字串選項:顯示值。
:se[t] no{選項} 切換選項:重設,將其關閉。
:se[t]
{選項}
+={值}
:set+=將
{值}
加到數值選項,或將
{值}
附加到字串選項。當選項是以逗號分隔的列表時,會新增一個逗號,除非該值為空。如果該選項是一個旗標列表,則會刪除多餘的旗標。當加入一個已存在的旗標時,選項值不會改變。另請參閱上方的
:set-args。
:se[t]
{選項}
^={值}
:set^=將
{值}
乘到數值選項,或將
{值}
前置到字串選項。當選項是以逗號分隔的列表時,會新增一個逗號,除非該值為空。另請參閱上方的
:set-args。
:se[t]
{選項}
-={值}
:set-=從數值選項減去
{值}
,或從字串選項中移除
{值}
(如果存在)。如果沒有在字串選項中找到
{值}
,則不會產生錯誤或警告。當選項是以逗號分隔的列表時,會刪除一個逗號,除非選項變成空的。當選項是一個旗標列表時,
{值}
必須與選項中顯示的完全相同。一次移除一個旗標以避免問題。可以透過輸入
'wildchar' 來插入以逗號分隔的列表或旗標列表中的個別值。請參閱
complete-set-option。另請參閱上方的
:set-args。
":set" 的
{選項}
參數可以重複。例如
:set ai nosi sw=3 ts=3
如果其中一個參數發生錯誤,將會顯示錯誤訊息,並且會忽略後續的參數。
shiftwidth=4
上次設定來自 modeline 第 1 行
cindent
上次設定來自 /usr/local/share/vim/vim60/ftplugin/c.vim 第 30 行
只有在要求特定的選項值時才會這樣做,而不是針對沒有參數的 ":verbose set all" 或 ":verbose set"。當選項是手動設定時,則沒有「上次設定」訊息。當選項是在執行函數、使用者命令或自動命令時設定時,會報告定義它的腳本。一些特殊文字
上次設定來自 modeline 第 1 行
選項是在
modeline 中設定的。
上次設定來自 --cmd 參數
選項是使用命令列參數
--cmd 或 + 設定的。
上次設定來自 -c 參數
選項是使用命令列參數
-c、+、
-S 或
-q 設定的。
上次設定來自環境變數
選項是從 $VIMINIT 設定的。
上次設定來自錯誤處理常式
在評估選項時導致錯誤,因此清除該選項。
option-backslash 要在字串選項值中包含空格,必須在其前面加上反斜線。要包含反斜線,您必須使用兩個。實際上,這意味著選項值中的反斜線數量減半(向下捨入)。在選項
'path'、
'cdpath' 和
'tags' 中,空格必須以三個反斜線開頭,因為它們可以由逗號或空格分隔。以逗號分隔的選項 (例如
'backupdir' 和
'tags') 也會要求逗號使用兩個反斜線跳脫,而對於非逗號分隔的選項 (例如
'makeprg') 則不需要。當使用
:let 和
literal-string 設定選項時,您需要少使用一層反斜線。幾個範例
:set makeprg=make\ file results in "make file"
:let &makeprg='make file' (same as above)
:set makeprg=make\\\ file results in "make\ file"
:set tags=tags\ /usr/tags results in "tags" and "/usr/tags"
:set tags=tags\\\ file results in "tags file"
:let &tags='tags\ file' (same as above)
:set makeprg=make,file results in "make,file"
:set makeprg=make\\,file results in "make\,file"
:set tags=tags,file results in "tags" and "file"
:set tags=tags\\,file results in "tags,file"
:let &tags='tags\,file' (same as above)
"|" 字元將 ":set" 命令與後續命令分隔開。若要在選項值中包含 "|",請改用 "\|"。此範例將
'titlestring' 選項設定為 "hi|there"
:set titlestring=hi\|there
這會將
'titlestring' 選項設定為 "hi",並將
'iconstring' 設定為 "there"
:set titlestring=hi|set iconstring=there
同樣地,雙引號字元開始一個註解。若要在選項值中包含 '"',請改用 '\"'。此範例將
'titlestring' 選項設定為 "hi "there""
:set titlestring=hi\ \"there\"
對於 Win32,檔名中的反斜線大多不會被移除。更精確地說:對於預期檔案名稱的選項(那些會展開環境變數的選項),一般檔名字元之前的反斜線不會被移除。但是,特殊字元(空格、反斜線、逗號等)之前的反斜線會像上面解釋的那樣使用。有一種特殊情況,當值以 "\\" 開頭時
:set dir=\\machine\path results in "\\machine\path"
:set dir=\\\\machine\\path results in "\\machine\path"
:set dir=\\path\\file results in "\\path\file" (wrong!)
對於第一個,開頭會保留,但對於第二個,反斜線會減半。這可以確保當您預期反斜線減半時和當您預期反斜線保留時都能正常運作。第三個會產生您可能不想要的結果。請避免使用。
:set_env expand-env expand-environment-var 特定字串選項中的環境變數將會展開。如果環境變數存在,則 '$' 和後續的環境變數名稱會被其值取代。如果不存在,則不會修改 '$' 和名稱。任何非 ID 字元(不是字母、數字或 '_')都可以跟在環境變數名稱之後。該字元和後面的內容會附加到環境變數的值。範例
:set term=$TERM.new
:set path=/usr/$INCLUDE,$HOME/include,.
當使用 ":set opt-=val" 或 ":set opt+=val" 從選項中新增或移除字串時,會在新增或移除之前執行展開。
某些選項僅適用於視窗或緩衝區。每個視窗或緩衝區都有其自己的選項副本,因此每個選項都可以有自己的值。這可讓您在一個視窗中設定
'list',而在另一個視窗中不設定。並在一個緩衝區中將
'shiftwidth' 設定為 3,而在另一個緩衝區中設定為 4。
以下說明在特定情況下,這些本地選項會發生什麼事。您不需要真的知道所有這些,因為 Vim 大多會使用您期望的選項值。不幸的是,做到使用者期望的事情有點複雜...
當分割視窗時,本地選項會複製到新視窗。因此,在分割後,兩個視窗的內容看起來相同。
當編輯新的緩衝區時,必須初始化其本地選項值。由於目前緩衝區的本地選項可能專用於該緩衝區,因此不會使用這些選項。相反地,對於每個緩衝區本地選項,還有一個全域值,會用於新的緩衝區。使用 ":set" 時,會變更本地和全域值。使用 "setlocal" 時,只會變更本地值,因此在編輯新的緩衝區時不會使用此值。
當編輯先前已編輯過的緩衝區時,會再次使用上次關閉視窗的選項。如果此緩衝區已在此視窗中編輯過,則會使用當時的值。否則,會使用上次關閉視窗且該緩衝區最後一次編輯時的值。
可以為特定類型的緩衝區設定局部視窗選項。當您在同一個視窗中編輯另一個緩衝區時,您不會想繼續使用這些局部視窗選項。因此,Vim 會保留局部視窗選項的全局值,該值會在編輯另一個緩衝區時使用。每個視窗都有這些值的副本。因此,這些值對於視窗是局部的,但對於視窗中的所有緩衝區是全局的。您可以使用此功能來執行以下操作:
:e one
:set list
:e two
現在,由於您使用 ":set list" 命令也設定了全局值,因此 "
'list'" 選項也會在 "two" 中設定。
:set nolist
:e one
:setlocal list
:e two
現在,"
'list'" 選項未設定,因為 ":set nolist" 會重設全局值,":setlocal list" 只會變更局部值,而 ":e two" 會取得全局值。請注意,如果接下來執行此操作:
:e one
您會取得編輯 "one" 時最後一次的 "
'list'" 值。每個緩衝區都會記住視窗的局部選項。當緩衝區未載入時也會發生這種情況,但當緩衝區被清除
:bwipe 時,它們就會遺失。
以下局部視窗選項在建立新視窗時不會被複製,因此它們的行為略有不同:
特殊的局部緩衝區選項
以下局部緩衝區選項在建立新緩衝區時不會被複製,因此它們的行為略有不同:
:setl :setlocal :setl[ocal][!] ... 類似於 ":set",但僅設定目前緩衝區或視窗的局部值。並非所有選項都有局部值。如果選項沒有局部值,則會設定全局值。使用 "all" 參數:顯示所有局部選項的局部值。不使用參數:顯示所有與預設值不同的局部選項的局部值。當顯示特定局部選項時,會顯示局部值。對於全局/局部布林選項,當使用全局值時,會在選項名稱前顯示 "--"。對於全局選項,會顯示全局值(但未來可能會變更)。
:se[t]
{option}
< 將
{option}
的有效值設定為其全局值。對於
全局-局部 選項,會移除局部值,以便使用全局值。對於所有其他選項,會將全局值複製到局部值。
:setl[ocal] {option}
< 將 {option}
的有效值設定為其全局值,方法是將全局值複製到局部值。
請注意,對於
全局-局部 選項,字串和數字型選項的行為略有不同。
:setg :setglobal :setg[lobal][!] ... 類似於 ":set",但僅設定局部選項的全局值,而不變更局部值。當顯示選項時,會顯示全局值。使用 "all" 參數:顯示所有局部選項的全局值。不使用參數:顯示所有與預設值不同的局部選項的全局值。
對於緩衝區局部和視窗局部選項
命令 全局值 局部值 條件
:set option=value 設定 設定 :setlocal option=value - 設定 :setglobal option=value 設定 - :set option? - 顯示已設定局部值 :set option? 顯示 - 未設定局部值 :setlocal option? - 顯示 :setglobal option? 顯示 -
當您主要對所有緩衝區和視窗使用一個值時,選項是全局的。對於某些全局選項,有時使用不同的局部值會很有用。您可以使用 ":setlocal" 設定局部值。然後,該緩衝區或視窗將使用局部值,而其他緩衝區和視窗會繼續使用全局值。
例如,您有兩個視窗,都是在 C 原始碼上。它們使用全局 "
'makeprg'" 選項。如果您在其中一個視窗中執行此操作:
:set makeprg=gmake
則另一個視窗會切換到相同的值。無需也在另一個 C 原始碼視窗中設定 "
'makeprg'" 選項。但是,如果您開始在新視窗中編輯 Perl 檔案,您會想對它使用另一個 "
'makeprg'",而不會變更 C 原始碼檔案所使用的值。您可以使用此命令:
:setlocal makeprg=perlmake
您可以透過使局部值為空來切換回使用全局值:
:setlocal makeprg=
這僅適用於字串選項。對於數字或布林選項,您需要使用 "<" 旗標,如下所示:
:setlocal autoread<
請注意,對於非布林和非數字選項,使用 "<" 會將全局值複製到局部值,它不會切換回使用全局值(當全局值稍後變更時,這很重要)。您也可以使用:
:set path<
這會使 "
'path'" 的局部值為空,以便使用全局值。因此,它與以下操作相同:
:setlocal path=
注意:未來可能會將更多全局選項設為
全局-局部。在全局選項上使用 ":setlocal" 的運作方式可能會有所不同。
選項值函數 某些選項(
'completefunc'、
'findfunc'、
'omnifunc'、
'operatorfunc'、
'quickfixtextfunc'、
'tagfunc' 和
'thesaurusfunc')會設定為函數名稱或函數參考或 Lambda 函數。當使用 Lambda 時,它會轉換為名稱,例如 "<lambda>123"。範例:
set opfunc=MyOpFunc
set opfunc=function('MyOpFunc')
set opfunc=funcref('MyOpFunc')
set opfunc={a\ ->\ MyOpFunc(a)}
設定為腳本局部函數
set opfunc=s:MyLocalFunc
set opfunc=<SID>MyLocalFunc
使用 funcref 變數設定
let Fn = function('MyTagFunc')
let &tagfunc = Fn
使用 Lambda 表達式設定
let &tagfunc = {t -> MyTagFunc(t)}
使用具有 Lambda 表達式的變數設定
let L = {a, b, c -> MyTagFunc(a, b , c)}
let &tagfunc = L
在 expr 選項中呼叫函數
expr-option-function
某些選項的值,例如
'foldexpr',是一個經過評估以取得值的表達式。評估可能會有相當多的負擔。最小化負擔的一種方法,以及保持選項值非常簡單的方法,是定義一個函數並設定選項以呼叫它,而不使用參數。
v:lua-call 也可以使用。範例:
lua << EOF
function _G.MyFoldFunc()
-- ... compute fold level for line v:lnum
return level
end
EOF
set foldexpr=v:lua.MyFoldFunc()
設定檔案類型
:setf[iletype] [FALLBACK]
{filetype}
:setf :setfiletype 將
'filetype' 選項設定為
{filetype}
,但前提是在 (巢狀) 自動指令序列中尚未設定。這是以下的簡寫:
:if !did_filetype()
: setlocal filetype={filetype}
:endif
此命令在 filetype.vim 檔案中使用,以避免重複設定
'filetype' 選項,導致載入不同的設定和語法檔案。
$HOME 使用 "~" 就像使用 "$HOME",但它僅在選項開頭以及空格或逗號之後才被辨識。
在 Unix 系統上,也可以使用 "~user"。它會被取代為使用者 "user" 的主目錄。範例:
:set path=~mool/include,/usr/include,.
在 Unix 系統上,也可以使用 "${HOME}" 形式。然後,{} 之間的名稱可以包含非 id 字元。請注意,如果您想將此用於 "gf" 命令,則需要將 '{' 和 '}' 字元新增到
'isfname'。
注意:擴充環境變數和 "~/" 僅在 ":set" 命令中使用,而不是在使用 ":let" 為選項賦值時。
$HOME-windows 在 MS-Windows 上,如果 $HOME 未定義為環境變數,則在執行時,Vim 會將其設定為 $HOMEDRIVE$HOMEPATH 的擴充。如果未設定 $HOMEDRIVE,則會使用 $USERPROFILE。
此擴充值不會匯出到環境,這在執行外部命令時很重要:
:echo system('set | findstr ^HOME=')
和
:echo luaeval('os.getenv("HOME")')
應該回顯 nothing(空字串),儘管 exists('$HOME') 為 true。當將 $HOME 設定為非空字串時,它會匯出到子程序。
請注意,擴充選項的最大長度是有限制的。有多大取決於系統,大多數情況下,它類似於 256 或 1024 個字元。
除了使用 ":set" 命令變更選項外,您還可以透過各種方式自動設定選項:
[text{white}] 空白或任何文字後接至少一個空白字元 (<Space>
或 <Tab>
);"ex:" 總是需要至少一個空白字元 {vi:|vim:|ex:}
字串 "vi:"、"vim:" 或 "ex:" [white] 可選的空白字元 {options}
選項設定列表,以空白字元或 ':' 分隔,其中每個 ':' 之間的部分是 ":set" 命令的參數 (可以為空)
範例
vi:noai:sw=3 ts=6
vim: tw=77
第二種形式 (這與某些版本的 Vi 相容)
[text{white}]{vi:|vim:|Vim:|ex:}[white]se[t] {options}
:[text]
[text{white}] 空白或任何文字後接至少一個空白字元 (<Space>
或 <Tab>
);"ex:" 總是需要至少一個空白字元 {vi:|vim:|Vim:|ex:}
字串 "vi:"、"vim:"、"Vim:" 或 "ex:" [white] 可選的空白字元 se[t] 字串 "set " 或 "se " (注意空格);當使用 "Vim" 時,必須是 "set"。{options}
選項列表,以空白字元分隔,這是 ":set" 命令的參數 : 冒號 [text] 任何文字或空白
範例
/* vim: set ai tw=75: */
/* Vim: set ai tw=75: */
{vi:|vim:|Vim:|ex:}
前的空白字元是必需的。這可以最大限度地減少像 "lex:" 這樣的普通單字被捕獲的機會。有一個例外:"vi:" 和 "vim:" 也可以在行的開頭 (為了與 3.0 版相容)。在行首使用 "ex:" 將被忽略 (這可能是 "example:" 的縮寫)。
如果在 modeline 內停用了 modeline,則後續的 modeline 將被忽略。這是為了允許在每個檔案的基礎上關閉 modeline。當某行看起來像 modeline 但實際上不是時,這很有用。例如,最好以以下內容開始一個包含 "vim:" 之類字串的 YAML 檔案:
# vim: nomodeline
以便避免錯誤偵測 modeline。停用 modeline 後,同一行上的後續選項 (如果有的話) 仍然會被評估 (但通常不會有)。
modeline-local 這些選項的設定方式與 ":setlocal" 類似:新值僅適用於包含該檔案的緩衝區和視窗。雖然可以從 modeline 設定全域選項,但這種情況並不常見。如果您開啟了兩個視窗,並且其中的檔案將相同的全域選項設定為不同的值,則結果取決於哪個視窗最後開啟。
當編輯已載入的檔案時,僅使用 modeline 中的視窗本地選項。因此,如果您在開啟檔案後手動變更了緩衝區本地選項,則在另一個視窗中編輯同一個緩衝區時,該選項不會被變更。但是視窗本地選項將會被設定。
modeline-version 如果 modeline 僅適用於某些版本的 Vim,則可以在使用 "vim:" 或 "Vim:" 的地方指定版本號:vim{vers}: 版本
{vers}
或更高版本 vim<{vers}: 版本早於
{vers}
vim={vers}: 版本
{vers}
vim>{vers}: 版本晚於
{vers}
{vers}
對於 Vim 7.0 而言是 700 (主要版本加次要版本的 100 倍)。例如,僅將 modeline 用於 Vim 7.0
/* vim700: set foldmethod=marker */
將 modeline 用於 7.2 版之後的 Vim
/* vim>702: set cole=2: */
"vim" 和 ":" 之間不能有空格。如果
{vers}
不符合整數,則忽略 modeline。
請注意,對於第一種形式,將使用該行的所有剩餘部分,因此像這樣的一行
/* vi:ts=4: */
將會為尾隨的 "*/" 提供錯誤訊息。這一行沒問題
/* vi:set ts=4: */
如果偵測到錯誤,則會跳過該行的其餘部分。
如果要在 set 命令中包含 ':',請在其前面加上 '\'。':' 前面的反斜線將被移除。範例
/* vi:set fillchars=stl\:^,vert\:\|: */
這會將
'fillchars' 選項設定為 "stl:^,vert:\|"。只會移除 ':' 前面的單個反斜線。因此,若要包含 "\:",您必須指定 "\\:"。
E992基於安全性考量,不支援 "set" 以外的其他命令 (有人可能會建立包含 modeline 的特洛伊木馬文字檔)。並非所有選項都可以設定。對於某些選項,會設定一個旗標,以便在使用該值時,
sandbox 有效。只有在設定
'modelineexpr' 時 (預設為關閉),才能從 modeline 設定某些選項。
儘管如此,modeline 總是存在導致問題的小風險。例如,當某些小丑將
'textwidth' 設定為 5 時,您的所有行都會意外地換行。因此,請在編輯不受信任的文字之前停用 modeline。例如,mail ftplugin 會執行此操作。
提示:如果您想執行設定選項以外的操作,您可以定義一個自動命令,該命令會檢查檔案中是否有特定字串。例如
au BufReadPost * if getline(1) =~ "VAR" | call SetVar() | endif
並定義一個函式 SetVar(),該函式會對包含 "VAR" 的行執行某些操作。
在下面的列表中,所有選項都以其完整名稱和縮寫 (如果有的話) 列出。可以使用兩種形式。
在此文件中,當布林選項為「設定」時,表示輸入了 ":set option"。當選項為「重設」時,則使用 ":set nooption"。
大多數選項在所有視窗和緩衝區中都相同。有些選項特定於文字在視窗中的呈現方式。這些選項可以在每個視窗中設定為不同的值。例如,
'list' 選項可以在一個視窗中設定,而在同一個文字的另一個視窗中重設,從而同時提供兩種檢視類型。有些選項特定於特定檔案。這些選項對於每個檔案或緩衝區可以有不同的值。例如,
'textwidth' 選項對於普通的文字檔可以是 78,而對於 C 程式則可以是 0。
global 所有緩衝區和視窗的一個選項 local to window 每個視窗都有其自己的此選項副本 local to buffer 每個緩衝區都有其自己的此選項副本
建立新視窗時,會使用目前活動視窗的選項值作為視窗特定選項的預設值。對於緩衝區特定選項,這取決於
'cpoptions' 選項中的 's' 和 'S' 旗標。如果包含 's' (預設值),則當第一次輸入緩衝區時,會從目前活動的緩衝區複製緩衝區選項的值。如果存在 'S',則每次輸入緩衝區時都會複製選項,這幾乎就像擁有全域選項一樣。如果不存在 's' 和 'S',則會在建立緩衝區時從目前活動的緩衝區複製選項。
並非所有版本都支援所有選項。這取決於支援的功能,有時也取決於系統。下面的大括號中有關於此的註解。當某個選項不受支援時,仍然可以設定它而不會產生錯誤,這稱為隱藏選項。但是,您無法取得隱藏選項的值,它不會被儲存。
若要測試是否可以使用 ":set" 來使用選項 "foo",請使用類似下列的程式碼
if exists('&foo')
這也會為隱藏選項傳回 true。若要測試是否真的支援選項 "foo",請使用類似下列的程式碼
if exists('+foo')
目前有兩種可能的值:"single":使用與 US-ASCII 中字元相同的寬度。這是大多數使用者所預期的。"double":使用 ASCII 字元寬度的兩倍。
E834 E835 如果
'listchars' 或
'fillchars' 包含一個會是雙倍寬度的字元,則無法使用值 "double"。當呼叫 setcellwidths() 時,也可能會提供這些錯誤。
有許多 CJK 字型,其中這些字元字形的寬度完全基於它們在舊版/傳統 CJK 編碼中佔用的八位元組數。在這些編碼中,歐元、註冊標誌、希臘/西里爾字母由兩個八位元組表示,因此這些字型具有針對它們的「寬」字形。這對於一些用於在文字檔中製作表格的線條繪製字元也是如此。因此,當 GUI Vim 使用 CJK 字型,或者 Vim 在使用 CJK 字型 (或 Vim 在使用 "-cjkwidth" 選項叫用的 xterm 內執行) 的終端機 (模擬器) 內執行時,此選項應設定為 "double",以使 Vim 感知的寬度與字型中字形的寬度一致。當系統地區設定設定為其中一個 CJK 地區設定時,可能也必須在 CJK MS-Windows 下設定為 "double"。請參閱 Unicode 標準附錄 #11 (
https://www.unicode.org/reports/tr11)。
'autowrite' 'aw' 'noautowrite' 'noaw' 'autowrite' 'aw' 布林值 (預設為關閉) 全域。在每次執行
:next
、
:rewind
、
:last
、
:first
、
:previous
、
:stop
、
:suspend
、
:tag
、
:!
、
:make
、
CTRL-]
和
CTRL-^
命令時,以及當
:buffer
、
CTRL-O
、
CTRL-I
、'
{A-Z0-9}
或 {A-Z0-9} 命令將您帶到另一個檔案時,如果檔案已修改,則會寫入檔案的內容。如果緩衝區變成隱藏,則不會寫入緩衝區,例如,當
'bufhidden' 設定為 "hide" 且使用
:next
時。請注意,對於某些命令,不會使用
'autowrite' 選項,請參閱
'autowriteall'。某些緩衝區不會被寫入,特別是當
'buftype' 為 "nowrite"、"nofile"、"terminal" 或 "prompt" 時。請小心使用:如果您對不想儲存的緩衝區進行臨時變更,此選項可能會導致該變更被儲存。使用 ":file
{name}
" 重新命名緩衝區可能有助於避免此問題。
通常此選項會設定在 vimrc 檔案中。可能會取決於終端機名稱。範例
if $TERM ==# "xterm"
set background=dark
endif
當此選項變更時,醒目提示群組的預設設定將會變更。若要使用其他設定,請在設定
'background' 選項之後放置 ":highlight" 命令。
'backspace' 'bs' 'backspace' 'bs' 字串 (預設為 "indent,eol,start") 全域。影響插入模式中
<BS>
、
<Del>
、
CTRL-W
和
CTRL-U
的運作方式。這是以逗號分隔的項目列表。每個項目都允許一種在某個項目上退格的方式
值 效果
indent 允許在自動縮排上退格。eol 允許在換行符號上退格 (聯接行)。start 允許在插入開始處退格;
CTRL-W
和
CTRL-U
在插入開始處停止一次。nostop 與 start 類似,但
CTRL-W
和
CTRL-U
不會在插入開始處停止。
當值為空時,會使用與 Vi 相容的退格,上述項目中提及的任何方式都不可能。
主要值為:"yes" 建立檔案的副本並覆寫原始檔案。"no" 重新命名檔案並寫入新檔案。"auto" 前述其中一個,最適合的。
可以與上述值組合的其他值為:"breaksymlink" 寫入時始終中斷符號連結。"breakhardlink" 寫入時始終中斷硬連結。
建立副本並覆寫原始檔案
複製檔案需要額外的時間。+ 當檔案具有特殊屬性、是 (硬/符號) 連結或具有資源分支時,所有這些都會保留。
當檔案是連結時,備份將具有連結的名稱,而不是實際檔案的名稱。
重新命名檔案並寫入新檔案:+ 速度很快。
有時並非檔案的所有屬性都可以複製到新檔案。
當檔案是連結時,新檔案將不會是連結。
"auto" 值是中間方法:當 Vim 看到重新命名檔案在沒有副作用的情況下是可能的時 (可以傳遞屬性且檔案不是連結),則會使用該方法。當預期會出現問題時,將會建立副本。
"breaksymlink" 和 "breakhardlink" 值可以與 "yes"、"no" 和 "auto" 中的任何一個組合使用。當包含這些值時,它們會強制 Vim 始終中斷符號連結或硬連結,方法是執行與 "no" 選項完全相同的操作,將原始檔案重新命名為備份,並在其位置寫入新檔案。這在所有檔案都是符號連結或硬連結的來源樹中可能會很有用,並且任何變更都應保留在本地來源樹中,而不要傳播回原始來源。
crontab"no" 和 "auto" 會導致問題的一種情況:開啟檔案、叫用 Vim 編輯該檔案,然後測試開啟的檔案是否已變更 (透過檔案描述元) 的程式,將會檢查備份檔案而不是新建立的檔案。"crontab -e" 就是一個例子,還有幾個
檔案監視器 常駐程式,例如 inotify。在這種情況下,您可能想要切換此選項。
建立副本時,原始檔案會被截斷,然後填入新文字。這表示原始檔案的保護位元、擁有者和符號連結不會被修改。但是,備份檔案是新檔案,由編輯檔案的使用者擁有。備份的群組會設定為原始檔案的群組。如果此操作失敗,則群組的保護位元會與其他使用者的保護位元相同。
當重新命名檔案時,情況會相反:備份具有原始檔案的相同屬性,並且新寫入的檔案由目前的使用者擁有。當檔案是 (硬/符號) 連結時,新檔案不會是!這就是為什麼當檔案是連結時,"auto" 值不會重新命名的原因。新寫入的檔案的擁有者和群組將設定為與原始檔案相同的擁有者和群組,但系統可能會拒絕執行此操作。在這種情況下,"auto" 值也不會重新命名檔案。
'backupdir' 'bdir' 'backupdir' 'bdir' 字串 (預設為 ".,$XDG_STATE_HOME/nvim/backup//") 全域。備份檔案的目錄列表,以逗號分隔。
備份檔案將在列表中第一個可以建立備份檔案的目錄中建立。如果沒有任何目錄存在,Nvim 將嘗試建立列表中的最後一個目錄。
目錄 "." 表示將備份檔案放在與編輯檔案相同的目錄中。
以 "./" (或 MS-Windows 的 ".\") 開頭的目錄表示將備份檔案放置在相對於編輯檔案的位置。開頭的 "." 會被編輯檔案的路徑名稱取代。(目錄名稱中的 "." 沒有特殊含義)。
逗號後的空格會被忽略,其他空格則視為目錄名稱的一部分。若要在目錄名稱的開頭使用空格,請在其前面加上反斜線。
若要在目錄名稱中包含逗號,請在其前面加上反斜線。
目錄名稱可以 '/' 結尾。
對於 Unix 和 Win32,如果目錄以兩個路徑分隔符號 "//" 結尾,交換檔名將會從檔案的完整路徑建立,並將所有路徑分隔符號都更改為百分比 '%' 符號。這將確保備份目錄中的檔名具有唯一性。在 Win32 上,也可以使用 "\\" 結尾。但是,當後面跟著分隔逗號時,您必須使用 "//",因為 "\\" 會將逗號包含在檔名中。因此,建議使用 '//' 而不是 '\\'。
請小心使用 '\' 字元,在空格前輸入一個,若要在選項中取得一個,則輸入兩個 (請參閱
option-backslash),例如:
set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
您必須在每個目錄和您的主目錄中建立一個 ".backup" 目錄,才能使其正常運作。當從列表中新增或移除目錄時,建議使用
:set+= 和
:set-=。這樣可以避免未來版本使用其他預設值時發生問題。基於安全原因,此選項無法從
modeline 或
沙箱 中設定。
如果您想保留大量備份,您可以使用 BufWritePre 自動指令在寫入檔案之前變更
'backupext' 以包含時間戳記。
au BufWritePre * let &bex = '-' .. strftime("%Y%b%d%X") .. '~'
警告:如果沒有備份檔,表示當 Vim 無法正確寫入您的緩衝區,然後因為某些原因而退出 Vim 時,您會同時遺失原始檔案和您正在寫入的內容。只有在您不在乎遺失檔案時,才停用備份。
請注意,環境變數不會展開。如果您想使用 $HOME,您必須明確展開它,例如:
let &backupskip = escape(expand('$HOME'), '\') .. '/tmp/*'
請注意,預設值也確保 "crontab -e" 可以運作 (當透過重新命名原始檔案來建立備份時,crontab 將不會看到新建立的檔案)。另請參閱
'backupcopy' 和
crontab。
這對於微調插入模式中應該響鈴的時間最有用。對於普通模式和 Ex 命令,響鈴通常表示發生錯誤。可以透過新增 "error" 關鍵字來將其靜音。
'bomb' 'nobomb' 'bomb' 布林值 (預設值為 off) 緩衝區本機選項。當寫入檔案且符合下列條件時,會在檔案前面加上 BOM (位元組順序標記)。
此選項為開啟狀態。
'fileencoding' 是 "utf-8"、"ucs-2"、"ucs-4" 或其中一個小/大端變體。有些應用程式會使用 BOM 來識別檔案的編碼。通常用於 MS-Windows 上的 UCS-2 檔案。對於其他應用程式,它會造成問題,例如: "cat file1 file2" 會使 file2 的 BOM 出現在結果檔案的中間。Gcc 不接受 BOM。當 Vim 讀取檔案且
'fileencodings' 以 "ucs-bom" 開頭時,會檢查是否存在 BOM,並相應地設定
'bomb'。除非設定
'binary',否則會從第一行中移除,因此您在編輯時看不到它。當您未變更選項時,會在寫入檔案時還原 BOM。
注意:當使用 "unload"、"delete" 或 "wipe" 時,緩衝區中的變更將遺失,且不會發出警告。此外,這些值可能會中斷暫時在緩衝區之間切換的自動命令。此選項與
'buftype' 和
'swapfile' 一起使用,以指定特殊類型的緩衝區。請參閱
特殊緩衝區。
請小心變更此選項,它可能會產生許多副作用!其中一個副作用是,如果檔案被另一個程式變更,Vim 將不會檢查檔案的時間戳記,這將不會被注意到。
"nofile" 和 "nowrite" 緩衝區類似:兩者:緩衝區不寫入磁碟,":w" 無效(但":w filename" 有效)。兩者:永遠不會認為緩衝區已
'modified'。當變更遺失時(例如當您退出 Vim 時)不會發出警告。兩者:僅當使用過多記憶體時才會建立交換檔(當
'swapfile' 已重設時,則永遠不會有交換檔)。nofile 僅有:緩衝區名稱是固定的,它的處理方式不像檔案名稱。它不會因為
:cd 命令而修改。兩者:當使用 ":e bufname" 且已編輯 "bufname" 時,緩衝區會變為空,並且會像
:edit 一樣觸發自動命令。
E676"acwrite" 表示緩衝區名稱與檔案無關,像 "nofile" 一樣,但會被寫入。因此,與 "nofile" 和 "nowrite" 相反,":w" 有效,並且無法在不儲存的情況下放棄修改過的緩衝區。對於寫入,必須有符合的
BufWriteCmd、
FileWriteCmd 或
FileAppendCmd 自動命令。
'casemap' 'cmp' 'casemap' 'cmp' 字串 (預設值為 "internal,keepascii") 全域設定。指定有關變更字母大小寫的詳細資訊。它可能包含以下以逗號分隔的字詞:internal 使用內部大小寫對應函式,目前地區設定不會變更大小寫對應。當省略 "internal" 時,在可用的情況下會使用 towupper() 和 towlower() 系統程式庫函式。keepascii 對於 ASCII 字元 (0x00 到 0x7f),使用美國大小寫對應,目前地區設定無效。這可能僅對土耳其文很重要。
'cdpath' 'cd' E344 E346 'cdpath' 'cd' 字串 (預設值等同於 $CDPATH 或 ",,") 全域設定。這是使用
:cd、
:tcd 和
:lcd 命令時要搜尋的目錄列表,前提是正在搜尋的目錄具有相對路徑,而不是以 "/"、"./" 或 "../" 開頭的絕對部分,則不使用
'cdpath' 選項。
'cdpath' 選項的值與
'path' 具有相同的形式和語意。另請參閱
檔案搜尋。預設值取自 $CDPATH,並在前面加上 "," 以首先在目前目錄中搜尋。如果從 $CDPATH 取得的預設值不是您想要的,請在您的 vimrc 檔案中包含以下命令的修改版本以覆寫它
let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
'cedit'
'cedit' 字串 (預設值為
CTRL-F
) 全域設定。在命令列模式中用於開啟命令列視窗的按鍵。僅允許使用不可列印的按鍵。按鍵可以指定為單一字元,但很難輸入。首選的方式是使用
按鍵表示法 (例如,
<Up>
、
<C-F>
) 或前面加上插入符號的字母 (例如,
^F
是
CTRL-F
)。範例
set cedit=^Y
set cedit=<Esc>
'charconvert' 'ccv' E202 E214 E513 'charconvert' 'ccv' 字串 (預設值為 "") 全域設定。用於字元編碼轉換的運算式。當要讀取或已寫入的檔案具有與所需編碼不同的編碼時,將會評估此運算式。當支援內部 iconv() 函式並且能夠進行轉換時,則不會使用
'charconvert'。首選使用 iconv(),因為它速度快得多。當讀取 stdin
-- 時,不會使用
'charconvert',因為沒有要從中轉換的檔案。您必須先將文字儲存到檔案中。如果成功,則運算式必須傳回零、false 或空字串;如果失敗,則傳回非零值或 true。請參閱
編碼名稱以取得可能的編碼名稱。此外,也會使用
'fileencodings' 和
'fileencoding' 中提供的名稱。Vim 會在內部完成 "latin1"、"unicode"、"ucs-2"、"ucs-4" 和 "utf-8" 之間的轉換,而不會使用
'charconvert'。也用於 Unicode 轉換。範例
set charconvert=CharConvert()
fun CharConvert()
system("recode "
\ .. v:charconvert_from .. ".." .. v:charconvert_to
\ .. " <" .. v:fname_in .. " >" .. v:fname_out)
return v:shell_error
endfun
相關的 Vim 變數為:v:charconvert_from 目前編碼的名稱 v:charconvert_to 所需編碼的名稱 v:fname_in 輸入檔案的名稱 v:fname_out 輸出檔案的名稱 請注意,v:fname_in 和 v:fname_out 永遠不會相同。
否則,運算式會在設定選項的指令碼內容中評估,因此可以使用指令碼區域設定項目。
clipboard-unnamed unnamed 當包含時,Vim 將使用剪貼簿暫存器 "*" 用於所有通常會進入未命名暫存器的複製、刪除、變更和貼上操作。當明確指定暫存器時,無論 "unnamed" 是否在
'clipboard' 中,都將始終使用它。始終可以使用 "*" 符號明確存取剪貼簿暫存器。另請參閱
剪貼簿。
clipboard-unnamedplus unnamedplus "unnamed" 標誌的一個變體,它使用剪貼簿暫存器 "+" (
quoteplus) 而不是暫存器 "*",用於所有通常會進入未命名暫存器的複製、刪除、變更和貼上操作。當 "unnamed" 也包含在此選項中時,複製和刪除操作(但不是貼上)還會將文字複製到暫存器 "*"。請參閱
剪貼簿。
警告:cmdheight=0
是實驗性的。預期會出現一些不必要的行為。某些
'shortmess' 標誌和類似的機制可能無法生效,導致出現不必要的 hit-enter 提示。來自 Nvim 本身和外掛程式的一些資訊性訊息將不會顯示。
'columns' 'co' E594 'columns' 'co' 數字 (預設 80 或終端機寬度) 全域設定,螢幕的欄數。通常,此值由終端機初始化設定,不需要手動設定。當 Vim 在 GUI 或可調整大小的視窗中執行時,設定此選項將會變更視窗大小。當您只想將該大小用於 GUI 時,請將該命令放在您的
ginit.vim 檔案中。當您設定此選項且 Vim 無法變更顯示器的實際欄數時,顯示可能會亂掉。對於 GUI,始終可以變更,並且 Vim 會將欄數限制為螢幕上可容納的數量。您可以使用此命令來獲得盡可能寬的視窗
set columns=9999
最小值為 12,最大值為 10000。
s 掃描使用
'thesaurus' 選項給定的檔案 s{tsr} 掃描檔案
{tsr}
。可以給出多個 "s" 標誌,模式也是有效的。i 掃描目前和包含的檔案 d 掃描目前和包含的檔案以尋找定義的名稱或巨集
i_CTRL-X_CTRL-D ] 標籤完成 t 與 "]" 相同 f 掃描緩衝區名稱(與緩衝區內容相反)
未載入的緩衝區不會載入,因此它們的自動指令
:autocmd 不會執行,這可能會導致某些檔案出現意外的完成(例如,壓縮檔案)。未載入的緩衝區不會掃描以進行整行完成。
menuone 即使只有一個匹配項也使用快顯選單。當有關於匹配項的額外資訊時很有用,例如,它來自哪個檔案。
longest 只插入匹配項的最長共同文字。如果顯示選單,您可以使用
CTRL-L
添加更多字元。是否忽略大小寫取決於補全的種類。對於緩衝區文字,使用
'ignorecase' 選項。
preview 在預覽視窗中顯示有關目前選定補全項目的額外資訊。僅在與 "menu" 或 "menuone" 結合使用時有效。
popup 在快顯視窗中顯示有關目前選定補全項目的額外資訊。僅在與 "menu" 或 "menuone" 結合使用時有效。覆蓋 "preview"。
noinsert 在使用者從選單中選擇匹配項之前,不插入任何匹配文字。僅在與 "menu" 或 "menuone" 結合使用時有效。如果存在 "longest",則無效。
noselect 不在選單中選擇匹配項,強制使用者從選單中選擇一個。僅在與 "menu" 或 "menuone" 結合使用時有效。
fuzzy 為補全候選項啟用
模糊匹配。這允許更靈活和直觀的匹配,其中可以跳過字元,並且即使沒有輸入確切的序列也可以找到匹配項。僅會影響如何從備選列表縮減補全候選項,而不會影響如何收集候選項(使用不同的補全類型)。
'v' 適用於可視區域中的所有行,而不僅僅是游標。一個有用的值是 "nc"。這在說明文件中使用。只要您在移動,文字就會被隱藏,但是當開始插入文字或選擇可視區域時,就會顯示隱藏的文字,以便您可以看到自己正在做的事情。請記住,游標位置並不總是顯示的位置。例如,當垂直移動時,它可能會更改欄位。
值 效果
0 文字正常顯示 1 每個隱藏的文字區塊都將被替換為一個字元。如果語法項目沒有定義自訂替換字元(請參閱
:syn-cchar),則使用在
'listchars' 中定義的字元。它將以 "Conceal" 高亮群組突出顯示。2 隱藏的文字完全隱藏,除非它定義了自訂替換字元(請參閱
:syn-cchar)。3 隱藏的文字完全隱藏。
包含行為
cpo-a a 包含時,帶有檔案名稱參數的 ":read" 命令會設定目前視窗的備用檔案名稱。
cpo-AA 包含時,帶有檔案名稱參數的 ":write" 命令會設定目前視窗的備用檔案名稱。
cpo-bb ":map" 命令中的 "\|" 被識別為 map 命令的結尾。'\' 包含在映射中,'|' 之後的文字被解釋為下一個命令。使用
CTRL-V
而不是反斜線,將 '|' 包含在映射中。適用於所有映射、縮寫、選單和自動命令。另請參閱
map_bar。
cpo-BB 反斜線在映射、縮寫、使用者命令和選單命令的 "to" 部分中沒有特殊含義。刪除此旗標即可像
CTRL-V
一樣使用反斜線。例如,命令 ":map X \<Esc>" 會導致 X 映射到: 'B' 包含:"\^[" (^[ 是真正的
<Esc>
) 'B' 排除:"<Esc>"(5 個字元)
cpo-cc 搜尋會在游標位置的任何匹配項結尾繼續,但不會超過下一行的開頭。如果不存在,則搜尋會從游標位置的一個字元處繼續。使用 'c',重複 "/abab" 時,"abababababab" 僅獲得三個匹配項,不使用 'c',則有五個匹配項。
cpo-CC 不要串聯以反斜線開頭的來源行。請參閱
line-continuation。
cpo-dd 在
'tags' 選項中使用 "./" 並不是表示使用相對於目前檔案的標籤檔案,而是使用目前目錄中的標籤檔案。
cpo-DD 無法使用
CTRL-K
在具有字元引數的正常模式命令(例如
r、
f 和
t)之後輸入雙圖符。
cpo-ee 當使用 ":@r" 執行暫存器時,始終將
<CR>
添加到最後一行,即使暫存器不是行式也是如此。如果不存在此旗標,則暫存器不是行式且最後一行未以
<CR>
結尾,則最後一行將放置在命令列中,並且可以在按下
<CR>
之前進行編輯。
cpo-EE 在空區域上使用 "y"、"d"、"c"、"g~"、"gu" 或 "gU" 時發生錯誤。這些運算子僅在至少要操作一個字元時才有效。範例:這會導致 "y0" 在第一列中失敗。
cpo-ff 包含時,帶有檔案名稱參數的 ":read" 命令會設定目前緩衝區的檔案名稱,如果目前緩衝區尚未具有檔案名稱。
cpo-FF 包含時,帶有檔案名稱參數的 ":write" 命令會設定目前緩衝區的檔案名稱,如果目前緩衝區尚未具有檔案名稱。另請參閱
cpo-P。
cpo-ii 包含時,中斷讀取檔案會使其保持修改狀態。
cpo-II 在插入縮排後立即向上或向下移動游標時,不要刪除縮排。
cpo-JJ 一個
句子在「.」、「!」或「?」之後必須跟隨兩個空格。
<Tab>
不會被視為空白字元。
cpo-KK 當按鍵碼位於映射的中途時,不要等待按鍵碼完成。當第二個
<F1>
只讀取一部分時,這會破壞
<F1>
<F1>
的映射。它可以透過輸入
<F1>
<Esc>
來取消映射。
cpo-ll 在搜尋模式中,\[] 範圍內的反斜線會被視為字面值,只有「\]」、「\^」、「\-」和「\\」是特殊的。請參閱
/[] 'l' 包含: "/[ \t]" 會找到
<Space>
、'\' 和 't'。'l' 排除: "/[ \t]" 會找到
<Space>
和
<Tab>
。
cpo-LL 當設定
'list' 選項時,
'wrapmargin'、
'textwidth'、
'softtabstop' 和虛擬取代模式 (請參閱
gR) 會將
<Tab>
視為兩個字元,而不是
<Tab>
的正常行為。
cpo-mm 當包含時,showmatch 將始終等待半秒。當不包含時,showmatch 將等待半秒或直到輸入字元為止。
'showmatch'cpo-MM 當排除時,「%」匹配會將反斜線納入考量。因此在「( \( )」和「\( ( \)」中,外層括號會匹配。當包含時,「%」會忽略反斜線,這與 Vi 相容。
cpo-nn 當包含時,用於
'number' 和
'relativenumber' 的欄位也會用於換行文字。
cpo-oo 搜尋命令的行偏移量不會記住以供下次搜尋使用。
cpo-OO 如果檔案正在被覆寫,即使在編輯時檔案並不存在,也不要抱怨。這是為了防止其他人意外建立檔案。Vi 對此並不會抱怨。
cpo-PP 當包含時,如果目前的緩衝區尚未有檔案名稱且同時也包含 'F' 旗標
cpo-F,則會將目前的緩衝區的檔案名稱設定為附加到檔案的 ":write" 命令。
cpo-qq 當合併多行時,將游標保留在合併兩行時的位置。
cpo-rr 重複執行(「.」命令)會使用「/」來重複搜尋命令,而不是實際使用的搜尋字串。
cpo-RR 從篩選的行中移除標記。如果沒有這個旗標,則會保留標記,就像使用了
:keepmarks 一樣。
cpo-ss 當第一次進入緩衝區時設定緩衝區選項。這就像 Vim 3.0 版一樣。而且它是預設值。如果不存在,則會在建立緩衝區時設定選項。
cpo-SS 每次進入緩衝區時都設定緩衝區選項 (除了
'readonly'、
'fileformat'、
'filetype' 和
'syntax')。這是 (最) 與 Vi 相容的設定。選項會設定為目前緩衝區中的值。當您變更選項並移至另一個緩衝區時,該值會被複製。這會有效地將緩衝區選項全域化至所有緩衝區。
's' 'S' 複製緩衝區選項 否 否 在建立緩衝區時 是 否 在第一次進入緩衝區時 (預設) X 是 每次進入緩衝區時 (vi 相容)
cpo-tt 標籤命令的搜尋模式會被記住以供「n」命令使用。否則,Vim 只會將模式放在搜尋模式的歷史記錄中,但不會變更上次使用的搜尋模式。
cpo-uu 復原與 Vi 相容。請參閱
undo-two-ways。
cpo-vv 在插入模式中,退格的字元仍會顯示在螢幕上。如果沒有這個旗標,字元會立即從螢幕上刪除。使用這個旗標,螢幕上新輸入的文字會覆寫退格的字元。
cpo-WW 不要覆寫唯讀檔案。如果省略,則 ":w!" 會盡可能覆寫唯讀檔案。
cpo-xx 在命令列上使用
<Esc>
會執行命令列。Vim 中的預設值是放棄命令列,因為
<Esc>
通常會中止命令。
c_<Esc>cpo-XX 當將計數與「R」一起使用時,被取代的文字只會刪除一次。當使用「.」和計數重複「R」時也是如此。
cpo-yy 可以使用「.」重複執行 yank 命令。如果您真的想使用此功能,請三思而後行,這可能會破壞某些外掛程式,因為大多數人期望「.」只會重複變更。
cpo-ZZ 當設定
'readonly' 選項時,使用「w!」時,請勿重設
'readonly'。
cpo-!! 當重複篩選命令時,請使用上次使用的外部命令,無論它是什麼。否則,將使用上次使用的 -filter- 命令。
cpo-$$ 當對一行進行變更時,不要重新顯示該行,而是在已變更文字的結尾放置一個「$」。當您輸入新文字時,已變更的文字將會被覆寫。如果您輸入任何將游標從插入點移動的命令,則會重新顯示該行。
cpo-%% 針對「%」命令執行與 Vi 相容的匹配。無法辨識「#if」、「#endif」等。無法辨識「/*」和「*/」。單引號和雙引號內的括號也會被計算在內,導致包含括號的字串會干擾匹配。例如,在類似「if (strcmp("foo(", s))」的行中,第一個括號與最後一個括號不匹配。如果不包含這個旗標,則會特別處理單引號和雙引號內的括號。當匹配引號外的括號時,會忽略引號內的所有內容。當匹配引號內的括號時,它會找到匹配的括號 (如果有的話)。這對 C 程式非常有用。此旗標也用於其他功能,例如 C 縮排。
cpo-++ 當包含時,":write file" 命令將會重設緩衝區的
'modified' 旗標,即使緩衝區本身可能仍然與其檔案不同。
cpo->> 當附加到暫存器時,請在附加的文字之前放置分行符號。
cpo-;; 當使用
, 或
; 來重複上次的
t 搜尋,且游標正好在搜尋字元的前面時,游標不會移動。如果沒有包含,游標會略過它並跳到下一個出現的位置。
cpo-__ 當在單字上使用
cw 時,不要將單字後面的空白字元包含在移動中。
特殊值: "both" 值 "line,number" 的別名。
「line」和「screenline」不能一起使用。
請參閱
option-backslash 了解關於插入反斜線以包含空格或反斜線的資訊。對於 C++,此值對於包含 const 類型宣告會很有用
^\(#\s*define\|[a-z]*\s*const\s*[a-z]*\)
您也可以在名稱之前使用「\ze」,並繼續使用模式來檢查後面是什麼。例如,對於 Javascript,如果使用
func_name = function(args)
定義函式
^\s*\ze\i\+\s*=\s*function(
如果函式使用
func_name : function() {...
定義
^\s*\ze\i\+\s*[:]\s*(*function\s*(
當使用 ":set" 指令時,您需要將反斜線加倍!為了避免這種情況,請使用帶有單引號字串的
:let
let &l:define = '^\s*\ze\k\+\s*=\s*function('
這對於阿拉伯語、希伯來語和許多其他語言很有用,這些語言可能在基本字元上方有組合字元,並且只想移除組合字元。
若要在檔案名稱中包含逗號,請在其前面加上反斜線。逗號後的空格會被忽略,否則空格會包含在檔案名稱中。關於使用反斜線,請參閱
option-backslash。這與
Dictionary 變數類型無關。在哪裡可以找到單字清單?
BSD/macOS 包含 "/usr/share/dict/words" 檔案。
嘗試 "apt install spell" 以在 apt 管理的系統 (Debian/Ubuntu) 上取得 "/usr/share/dict/words" 檔案。當從清單中新增或移除目錄時,建議使用
:set+= 和
:set-=。這可以避免未來版本使用其他預設值時發生問題。基於安全性考量,無法在此選項中使用反引號。
filler 顯示填充行,以使文字與在相同位置插入行的視窗同步。當視窗並排且設定
'scrollbind' 時,最為有用。
context:{n} 在變更與包含未變更行的摺疊之間使用
{n}
行的內容。省略時,會使用六行的內容。當使用零時,內容實際上為一,因為摺疊需要行之間,也需要已刪除的行。將其設定為非常大的值 (999999) 以完全停用摺疊。請參閱
fold-diff。
iblank 忽略所有行都為空白的變更。如果
'diffexpr' 為空,則將 "-B" 旗標新增至 "diff" 指令。請查看 "diff" 指令的文件以了解其確切作用。
注意:差異視窗將會不同步,因為不會考慮空白行之間的差異。
icase 忽略文字大小寫的變更。"a" 和 "A" 被視為相同。如果
'diffexpr' 為空,則將 "-i" 旗標新增至 "diff" 指令。
iwhite 忽略空白字元量的變更。如果
'diffexpr' 為空,則將 "-b" 旗標新增至 "diff" 指令。請查看 "diff" 指令的文件以了解其確切作用。它應該忽略新增尾隨空白字元,但不忽略開頭的空白字元。
iwhiteall 忽略所有空白字元變更。如果
'diffexpr' 為空,則將 "-w" 旗標新增至 "diff" 指令。請查看 "diff" 指令的文件以了解其確切作用。
iwhiteeol 忽略行尾的空白字元變更。如果
'diffexpr' 為空,則將 "-Z" 旗標新增至 "diff" 指令。請查看 "diff" 指令的文件以了解其確切作用。
horizontal 以水平分割啟動差異模式 (除非另有明確指定)。
vertical 以垂直分割啟動差異模式 (除非另有明確指定)。
closeoff 當關閉設定
'diff' 的視窗,且在具有設定
'diff' 的相同索引標籤頁面中只剩下一個視窗時,在該視窗中執行
:diffoff
。這會還原
:diffsplit
指令。
hiddenoff 當緩衝區變成隱藏時,請勿對其使用差異模式。
foldcolumn:{n} 在啟動差異模式時,將
'foldcolumn' 選項設定為
{n}
。若沒有此設定,則會使用 2。
indent-heuristic 對於內部差異程式庫,使用縮排啟發式。
linematch:{n} 在每個產生的差異區塊上啟用第二階段差異,以對齊行。當差異區塊中的總行數超過 {n}
時,將不會執行第二階段差異,因為非常大的差異區塊可能會導致明顯的延遲。建議的設定為 "linematch:60",因為這將啟用最多 30 行的區塊的 2 個緩衝區差異,或最多 20 行的區塊的 3 個緩衝區差異的對齊。
algorithm:{text} 使用內部差異引擎指定差異演算法。目前支援的演算法為:myers (預設演算法) minimal (花費額外時間產生最小的差異) patience (耐心差異演算法) histogram (直方圖差異演算法)
範例
set diffopt=internal,filler,context:4
set diffopt=
set diffopt=internal,filler,foldcolumn:3
set diffopt-=internal " do NOT use the internal diff parser
可能的項目
交換檔案將在第一個可能的位置建立。如果任何目錄都不可能,但選項中列出的最後一個目錄不存在,則會建立它。
空表示將不使用任何交換檔案 (無法復原!),且不會顯示
E303 錯誤。
目錄 "." 表示將交換檔案放在編輯檔案的相同目錄中。在 Unix 上,會在檔案名稱前面加上點,因此它不會顯示在目錄清單中。在 MS-Windows 上,會設定「隱藏」屬性,並在可能的情況下加上點。
以 "./" 開頭的目錄 (或 MS-Windows 的 "\.") 表示將交換檔案放在相對於編輯檔案的位置。開頭的 "." 會取代為編輯檔案的路徑名稱。
對於 Unix 和 Win32,如果目錄以兩個路徑分隔符號 "//" 結尾,則交換檔案名稱將從完整路徑建立,其中所有路徑分隔符號都取代為百分比 '%' 符號 (包括 Win32 上磁碟機代號後面的冒號)。這將確保保留目錄中的檔案名稱唯一性。在 Win32 上,也可以使用 "\\" 結尾。但是,當後面跟著分隔逗號時,您必須使用 "//",因為 "\\" 會將逗號包含在檔案名稱中。因此,建議使用 "//",而不是 '\\'。
逗號後的空格會被忽略,其他空格則視為目錄名稱的一部分。若要在目錄名稱的開頭使用空格,請在其前面加上反斜線。
若要在目錄名稱中包含逗號,請在其前面加上反斜線。
目錄名稱可以 ':' 或 '/' 結尾。
請小心使用 '\' 字元,在空格前輸入一個,若要在選項中取得一個,則輸入兩個 (請參閱
option-backslash),例如:
set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
兩次編輯同一個檔案會導致警告。不建議在 "/tmp" 上使用:如果系統崩潰,您將會遺失交換檔案。而且電腦上的其他人可能可以看到這些檔案。當從清單中新增或移除目錄時,請使用
:set+= 和
:set-=,如果 Nvim 預設值變更,這可以避免問題。
'display' 'dy' 'display' 'dy' 字串 (預設為 "lastline") 全域。變更文字的顯示方式。這是一個以逗號分隔的旗標清單:lastline (當包含時,會顯示視窗中盡可能多的最後一行。) "@@@" 放置在最後一個螢幕行的最後一欄中,以指示未顯示該行的其餘部分。truncate (與 "lastline" 類似,但 "@@@" 顯示在最後一個螢幕行的第一欄中。) 覆蓋 "lastline"。uhex (以十六進位格式顯示不可列印的字元,如
<xx>
,而不是使用 ^C 和 ~C。) msgsep (已過時的旗標。允許但無效。)
msgsep
當既未包含 "lastline" 也未包含 "truncate" 時,不適配的最後一行會取代為 "@" 行。
警告: 轉換為非 Unicode 編碼可能會導致資訊遺失!
在此處加上 "8bit-" 和 "2byte-" 沒有意義,它們會被忽略。當設定此選項時,會將值轉換為小寫。因此,您也可以使用大寫值來設定它。'_' 字元會被 '-' 取代。如果從
encoding-names 中的列表識別出名稱,則會以標準名稱取代。例如,"ISO8859-2" 會變成 "iso-8859-2"。
'fileencodings' 'fencs' 'fileencodings' 'fencs' 字串 (預設為 "ucs-bom,utf-8,default,latin1") 全域選項。這是開始編輯現有檔案時考慮的字元編碼列表。讀取檔案時,Vim 會嘗試使用第一個提到的字元編碼。如果偵測到錯誤,則會嘗試列表中的下一個。當找到可用的編碼時,
'fileencoding' 會設定為該編碼。如果全部失敗,
'fileencoding' 會設定為空字串,這表示使用 UTF-8。
警告: 轉換可能會導致資訊遺失!您可以使用
++bad 引數來指定如何處理無法轉換的字元。對於空檔案或僅包含 ASCII 字元的檔案,大多數編碼都可以使用,並且會使用
'fileencodings' 的第一個項目 (除了 "ucs-bom",它需要 BOM 存在)。如果您偏好其他編碼,請使用 BufReadPost 自動命令事件來測試是否要使用您偏好的編碼。範例
au BufReadPost * if search('\S', 'w') == 0 |
\ set fenc=iso-2022-jp | endif
這表示一個不存在的檔案可能會得到與空檔案不同的編碼。特殊值 "ucs-bom" 可以用來檢查檔案開頭是否有 Unicode BOM(位元組順序標記)。為了使其正常運作,它前面不能有 "utf-8" 或其他 Unicode 編碼。一個 8 位元編碼(例如 "latin1")的條目應該是最後一個,因為 Vim 無法偵測到錯誤,因此該編碼永遠會被接受。特殊值 "default" 可以用於環境的編碼。當您的環境使用非 latin1 編碼(例如俄語)時,它非常有用。當檔案包含非法的 UTF-8 位元組序列時,它不會被識別為 "utf-8"。您可以使用
8g8 指令來尋找非法的位元組序列。錯誤的值:哪裡錯了:latin1,utf-8 "latin1" 將永遠被使用 utf-8,ucs-bom,latin1 BOM 在 utf-8 檔案中不會被識別 cp1250,latin1 "cp1250" 將永遠被使用 如果
「fileencodings」 是空的,則
「fileencoding」 不會被修改。請參閱
「fileencoding」 以取得可能的值。設定此選項在下次讀取檔案之前不會生效。
當 Vim 以空緩衝區啟動時,會使用第一個項目。您可以在 .vimrc 中設定
「fileformat」 來覆寫此設定。
對於具有類似 Dos 的
<EOL>
(
<CR>
<NL>
)的系統,當讀取 ":source" 且用於 vimrc 檔案的檔案時,可能會執行自動
<EOL>
偵測。
當
「fileformats」 設定為一個或多個名稱時,會執行自動偵測。這是基於檔案中的第一個
<NL>
:如果前面有
<CR>
,則使用 Dos 格式,否則使用 Unix 格式。另請參閱
檔案格式。
FileType 檔案類型。當值中出現點時,會分隔兩個檔案類型名稱,因此不應用於檔案類型。範例
/* vim: set filetype=c.doxygen : */
這將先使用 "c" 檔案類型,然後使用 "doxygen" 檔案類型。這適用於檔案類型外掛程式和語法檔案。可能會出現一個以上的點。此選項不會複製到另一個緩衝區,與
「cpoptions」 中的 's' 或 'S' 旗標無關。只能使用字母數字字元、'-' 和 '_'。
項目 預設值 用於
stl ' ' 當前視窗的狀態列 stlnc ' ' 非當前視窗的狀態列 wbr ' ' 視窗列 horiz '─' 或 '-' 水平分隔符號
":split" horizup '┴' 或 '-' 向上水平分隔符號 horizdown '┬' 或 '-' 向下水平分隔符號 vert '│' 或 '|' 垂直分隔符號
":vsplit" vertleft '┤' 或 '|' 向左垂直分隔符號 vertright '├' 或 '|' 向右垂直分隔符號 verthoriz '┼' 或 '+' 重疊的垂直和水平分隔符號 fold '·' 或 '-' 填滿
「foldtext」 foldopen '-' 標記摺疊的開始 foldclose '+' 顯示關閉的摺疊 foldsep '│' 或 '|' 開啟摺疊中間標記 diff '-'
「diff」 選項中已刪除的行 msgsep ' ' 訊息分隔符號
「display」 eob '~' 緩衝區結尾的空行 lastline '@'
「display」 包含 lastline/truncate
任何省略的項目都將回復為預設值。
請注意,只有當
「laststatus」 為 3 時才會使用 "horiz"、"horizup"、"horizdown"、"vertleft"、"vertright" 和 "verthoriz",因為否則只會使用垂直視窗分隔符號。
如果
「ambiwidth」 為 "double",則 "horiz"、"horizup"、"horizdown"、"vert"、"vertleft"、"vertright"、"verthoriz"、"foldsep" 和 "fold" 將預設為單一位元組替代項。
範例
set fillchars=stl:\ ,stlnc:\ ,vert:│,fold:·,diff:-
對於 "stl"、"stlnc"、"foldopen"、"foldclose" 和 "foldsep" 項目,支援單一位元組和多位元組字元。但是不支援雙寬字元。
E1512
該函式會被呼叫並帶有兩個參數。第一個參數是一個
字串,它是
:find 命令的參數。第二個參數是一個
布林值,當該函式被呼叫以取得
:find 命令的命令列補全匹配的列表時,該值會被設定為
v:true。該函式應回傳一個字串列表。
如果找到匹配項,該函式應回傳一個包含一個或多個檔案名稱的
列表。如果未找到匹配項,該函式應回傳一個空列表。
如果在函式呼叫期間發生任何錯誤,將會使用一個空列表作為回傳值。
範例
" Use glob()
func FindFuncGlob(cmdarg, cmdcomplete)
let pat = a:cmdcomplete ? $'{a:cmdarg}*' : a:cmdarg
return glob(pat, v:false, v:true)
endfunc
set findfunc=FindFuncGlob
" Use the 'git ls-files' output
func FindGitFiles(cmdarg, cmdcomplete)
let fnames = systemlist('git ls-files')
return fnames->filter('v:val =~? a:cmdarg')
endfunc
set findfunc=FindGitFiles
'foldopen' 'fdo' 'foldopen' 'fdo' 字串 (預設 "block,hor,mark,percent,quickfix,search,tag,undo") 全域 指定在哪些類型的命令中,如果命令將游標移動到關閉的摺疊中,則會開啟摺疊。它是一個以逗號分隔的項目列表。
注意:當命令是對應的一部分時,不會使用此選項。將
zv 命令新增至對應,以獲得相同的效果。(理由:對應可能想要自行控制開啟摺疊)
項目 命令
all 任何區塊 (, {, [[, [{, 等 hor 水平移動:"l"、"w"、"fx" 等 insert 插入模式中的任何命令 jump 遠距離跳躍:"G"、"gg" 等 mark 跳到標記:"'m"、
CTRL-O
等 percent "%" quickfix ":cn"、":crew"、":make" 等 search 搜尋模式:"/"、"n"、"*"、"gd" 等 (不適用於 ":" 命令中的搜尋模式) 也適用於
[s 和
]s。tag 跳到標籤:":ta"、
CTRL-T
等 undo 復原或重做:"u" 和
CTRL-R
當移動命令用於運算子 (例如 "dl" 或 "y%") 時,不會使用此選項。這表示運算子將會包含整個關閉的摺疊。請注意,這裡沒有垂直移動,因為這會讓移動到關閉的摺疊變得非常困難。在插入模式中,當插入文字時,包含游標的摺疊將會始終開啟。若要關閉摺疊,您可以使用
zx 命令重新套用
'foldlevel',或將
'foldclose' 選項設定為 "all"。
當設定為空字串時,會停用 foldtext,並且該行會正常顯示,帶有高亮且不會換行。
範例
set formatexpr=mylang#Format()
當設定
'textwidth' 且加入的文字超出該限制時,也會評估此表達式。此情況與使用內部格式化時的條件相同。請確保游標相對於文字保持在相同的位置!在這種情況下,
mode() 函式會傳回 "i" 或 "R"。
當表達式評估為非零值時,Vim 會退回使用內部格式機制。
如果表達式以 s: 或
<SID> 開頭,則會以腳本 ID 取代 (
local-function)。範例:
set formatexpr=s:MyFormatExpr()
set formatexpr=<SID>SomeFormatExpr()
否則,表達式會在設定該選項的腳本的上下文中評估,因此可以使用腳本本地項目。
當發生以下情況時,檔案「總是」會被刷新 (
'fsync' 會被忽略):
系統訊號指示電池電量不足
Nvim 異常退出
:s/// 替換全部 替換一個 :s///g 替換一個 替換全部 :s///gg 替換全部 替換一個
注意:設定此選項可能會破壞依賴 'g' 標誌預設行為的外掛程式。這也會使 'g' 標誌具有與
:s_g 中所記錄的相反效果。
如果 ripgrep (
'grepprg') 可用,則此選項預設為
%f:%l:%c:%m
。
若要停用游標樣式,請重設選項
set guicursor=
若要啟用模式形狀、「游標」高亮和閃爍
set guicursor=n-v-c:block,i-ci-ve:ver25,r-cr:hor20,o:hor50
\,a:blinkwait700-blinkoff400-blinkon250-Cursor/lCursor
\,sm:block-blinkwait175-blinkoff150-blinkon175
此選項是以逗號分隔的各部分列表。每個部分包含一個模式列表和一個參數列表:模式列表:參數列表,模式列表:參數列表,...。模式列表是以破折號分隔的這些模式列表:n 一般模式 v 可視模式 ve 可視模式,具有
'selection' "exclusive"(如果未指定,則與 'v' 相同) o 運算符等待模式 i 插入模式 r 取代模式 c 命令列一般(附加)模式 ci 命令列插入模式 cr 命令列取代模式 sm 插入模式中的 showmatch a 所有模式。參數列表是以破折號分隔的這些參數列表:hor{N} 水平線,
{N}
為字符高度的百分比 ver{N} 垂直線,
{N}
為字符寬度的百分比 block 塊狀游標,填充整個字符
以上三者只能出現一個。
每個模式的預設值為「block」。 blinkwait{N}
游標閃爍blinkon{N} blinkoff{N} 游標閃爍次數:blinkwait 是游標開始閃爍之前的延遲時間,blinkon 是游標顯示的時間,blinkoff 是游標不顯示的時間。時間單位為毫秒。當其中一個數字為零時,則不閃爍。例如:
set guicursor=n:blinkon0
每個模式的預設值為「blinkon0」。
{group-name}
決定游標顏色和字型的突出顯示群組。在
TUI 中
inverse/reverse 和沒有 group-name 會被解釋為「主機終端機預設游標顏色」,通常表示「反轉背景和前景顏色」。
ctermfg 和
guifg 會被忽略。
{group-name}
/{group-name} 兩個突出顯示群組名稱,第一個用於未使用語言映射時,另一個用於使用語言映射時。
語言映射
部分的範例:n-c-v:block-nCursor 在一般模式、命令列模式和可視模式下,使用來自「nCursor」突出顯示群組的顏色之塊狀游標。n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20 在一般等模式下,使用主機終端機定義的預設顏色的塊狀游標。在類似插入模式下,使用來自「Cursor」突出顯示群組的顏色的垂直線游標。在類似取代模式下,使用預設顏色的下劃線游標。i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150 在插入和命令列插入模式下,使用來自「iCursor」突出顯示群組的顏色的 30% 垂直線游標。閃爍速度稍快。
「a」模式不同。它將為所有模式設定給定的參數列表。它不會將任何內容重設為預設值。這可以用於對所有模式執行通用設定。例如,關閉閃爍:「a:blinkon0」
游標突出顯示的範例
highlight Cursor gui=reverse guifg=NONE guibg=NONE
highlight Cursor gui=NONE guifg=bg guibg=fg
逗號後的空格會被忽略。要在字型名稱中包含逗號,請在其前面加上反斜線。設定選項需要在空格和反斜線之前加上額外的反斜線。另請參閱
option-backslash。例如
set guifont=Screen15,\ 7x13,font\\,with\\,commas
這將使 Vim 嘗試先使用「Screen15」字型,如果失敗,則會嘗試使用「7x13」,然後嘗試使用「font,with,commas」。
如果無法載入任何字型,Vim 將保留目前的設定。如果給定一個空的字型列表,Vim 將嘗試使用其他資源設定(對於 X,它將使用 Vim.font 資源),最後它會嘗試一些應該始終存在的內建預設值(在 X 的情況下為「7x13」)。給定的字型名稱應該是「一般」字型。Vim 將嘗試找到相關的粗體和斜體字型。
適用於 Win32 和 Mac OS
set guifont=*
會開啟一個字型選擇器,您可以在其中選擇您想要的字型。
字型名稱取決於所使用的 GUI。
對於 Mac OSX,您可以使用類似以下內容
set guifont=Monaco:h10
E236 請注意,字型必須是等寬字型(所有字元的寬度都相同)。
要在 X11 上預覽字型,您可以使用「xfontsel」程式。「xlsfonts」程式會列出所有可用的字型。
對於 Win32 GUI
E244 E245字型名稱中會使用這些選項:hXX - 高度為 XX(點,可以是浮點數) wXX - 寬度為 XX(點,可以是浮點數) b - 粗體 i - 斜體 u - 下劃線 s - 刪除線 cXX - 字元集 XX。有效的字元集為:ANSI、ARABIC、BALTIC、CHINESEBIG5、DEFAULT、EASTEUROPE、GB2312、GREEK、HANGEUL、HEBREW、JOHAB、MAC、OEM、RUSSIAN、SHIFTJIS、SYMBOL、THAI、TURKISH、VIETNAMESE ANSI 和 BALTIC。通常您會使用「cDEFAULT」。
使用「:」分隔選項。
可以使用「_」代替空格,因此您不需要使用反斜線來逸脫空格。
範例
set guifont=courier_new:h12:w5:b:cRUSSIAN
set guifont=Andale_Mono:h7.5:w4.5
'helplang' 'hlg' 'helplang' 'hlg' 字串(預設值為訊息語言或空白)全域。以逗號分隔的語言列表。Vim 將使用可以找到所需說明的首種語言。英文說明將始終作為最後的手段使用。您可以加入「en」以偏好英文而不是其他語言,但這只會找到該語言中存在而不是英文說明中存在的標籤。範例
set helplang=de,it
這會先搜尋德文、然後是義大利文,最後是英文說明檔案。當在非英文說明檔案中使用
CTRL-] 和「:help!」時,Vim 會先嘗試在目前語言中找到標籤,然後再使用此選項。請參閱
help-translated。
當這三種情況皆為真時,即使
'hidden' 選項關閉,也會有在緩衝區列表中移動的命令隱藏緩衝區
緩衝區已修改
'iminsert' 'imi' 'iminsert' 'imi' 數字 (預設值為 0) 緩衝區本地 設定在插入模式中是否使用 :lmap 或輸入法 (IM)。有效值:0:lmap 關閉,IM 關閉 1:lmap 開啟,IM 關閉 2:lmap 關閉,IM 開啟 若要在使用
<Esc>
離開插入模式時始終將選項重設為零,可以使用此選項
inoremap <ESC> <ESC>:set iminsert=0<CR>
這會使 :lmap 和 IM 在離開插入模式時自動關閉。請注意,此選項在使用插入模式中的
CTRL-^
i_CTRL-^ 時會變更。當將
'keymap' 設定為有效的鍵盤對應名稱時,該值會設定為 1。它也用於 "r" 和 "f" 等指令的參數。
可能的值:nosplit:在緩衝區中逐步顯示指令的效果。split:與 "nosplit" 類似,但也會在預覽視窗中顯示部分螢幕外結果。
變數 "v:fname" 將設定為偵測到的檔案名稱。請注意雙反斜線:
:set
指令會先將它們減半,然後在值中保留一個,其中 "\." 會逐字元匹配一個點。對於簡單的字元替換,
tr()
可避免需要逸出
setlocal includeexpr=tr(v:fname,'.','/')
如果表達式以 s: 或
<SID> 開頭,則會以腳本 ID 取代 (
local-function)。範例:
setlocal includeexpr=s:MyIncludeExpr()
setlocal includeexpr=<SID>SomeIncludeExpr()
否則,表達式會在設定該選項的腳本的上下文中評估,因此可以使用腳本本地項目。
'incsearch' 'is' 'noincsearch' 'nois' 'incsearch' 'is' 布林值 (預設為開啟) 全域 在輸入搜尋指令時,顯示模式到目前為止所輸入的內容在哪裡相符。相符的字串會被反白顯示。如果模式無效或找不到,則不會顯示任何內容。螢幕會經常更新,這僅在快速終端機上才有用。請注意,會顯示相符項,但當找不到相符項以及按下
<Esc>
時,游標會返回其原始位置。您仍然需要使用
<Enter>
完成搜尋指令,才能將游標移動到相符項。您可以使用
CTRL-G
和
CTRL-T
鍵移動到下一個和上一個相符項。
c_CTRL-G c_CTRL-T Vim 僅搜尋大約半秒鐘。如果模式複雜和/或文字很多,則可能找不到相符項。這是為了避免在您輸入模式時 Vim 掛起。
hl-IncSearch 反白群組會決定反白顯示的方式。當
'hlsearch' 開啟時,在輸入搜尋指令時,也會反白顯示所有相符的字串。另請參閱:
'hlsearch'。如果您不想開啟
'hlsearch',但想在搜尋時反白顯示所有相符項,您可以使用自動指令開啟和關閉
'hlsearch'。範例
augroup vimrc-incsearch-highlight
autocmd!
autocmd CmdlineEnter /,\? :set hlsearch
autocmd CmdlineLeave /,\? :set nohlsearch
augroup END
可以使用
CTRL-L
將目前相符項之後的一個字元新增至指令列。如果設定了
'ignorecase' 和
'smartcase' 且指令列沒有大寫字元,則新增的字元會轉換為小寫。
CTRL-R
CTRL-W
可用於新增目前相符項結尾的單字,但不包含已輸入的字元。
如果表達式以 s: 或
<SID> 開頭,則會以腳本 ID 取代 (
local-function)。範例:
set indentexpr=s:MyIndentExpr()
set indentexpr=<SID>SomeIndentExpr()
否則,表達式會在設定該選項的腳本的上下文中評估,因此可以使用腳本本地項目。
'isfname' 'isf' 'isfname' 'isf' 字串 (Windows 預設值為 "@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],@-@,!,~,=",否則為 "@,48-57,/,.,-,_,+,,,#,$,%,~,=") 全域設定。此選項指定的字元會包含在檔案名稱和路徑名稱中。檔案名稱會用於 "gf"、"[i" 等指令,以及標籤檔中。它也用於
pattern 中的 "\f"。多位元組字元 256 及以上永遠會包含,只有 255 及以下的字元會由此選項指定。對於 UTF-8,也會包含 0xa0 到 0xff 的字元。將空白字元加入此選項前請三思。雖然空白字元可能出現在檔案名稱中,但效果會變成 Vim 在進行補全時不知道檔案名稱的開頭或結尾。最好不要在
'isfname' 中使用空白字元。
請注意,在使用反斜線作為路徑分隔符號的系統上,Vim 會盡力讓它像您預期的那樣運作。這有點棘手,因為 Vi 原本使用反斜線來跳脫特殊字元。Vim 不會移除在這些系統上一般檔案名稱字元前面的反斜線,但在 Unix 和類似系統上則會移除。預設不包含 '&' 和 '^',因為這些是 cmd.exe 的特殊字元。
此選項的格式是多個部分,以逗號分隔。每個部分可以是單個字元編號或一個範圍。範圍是兩個字元編號,中間以 '-' 分隔。字元編號可以是 0 到 255 之間的十進制數字,或是 ASCII 字元本身(不適用於數字)。範例: "_,-,128-140,#-43" (包含 '_' 和 '-' 以及 128 到 140 和 '#' 到 43 的範圍) 如果某個部分以 '^' 開頭,則會從選項中排除後面的字元編號或範圍。此選項會從左到右進行解讀。將排除的字元放在包含它的範圍之後。若要包含 '^' 本身,請將它用作選項的最後一個字元或範圍的結尾。範例:"^a-z,#,^" (排除 'a' 到 'z',包含 '#' 和 '^') 如果字元是 '@',則會包含所有 isalpha() 回傳 TRUE 的字元。通常這些是 a 到 z 和 A 到 Z 的字元,加上帶重音符號的字元。若要包含 '@' 本身,請使用 "@-@"。範例:"@,^a-z" 所有字母字元,不包含小寫 ASCII 字母。"a-z,A-Z,@-@" 所有字母加上 '@' 字元。可以將逗號放在需要字元編號的位置來包含逗號。範例:"48-57,,,_" 數字、逗號和底線。可以透過在逗號前面加上 '^' 來排除逗號。範例:" -~,^,,9" 從空白到 '~' 的所有字元,不包含逗號,加上
<Tab>
。請參閱
option-backslash 以了解如何包含空白和反斜線。
'isident' 'isi' 'isident' 'isi' 字串 (Windows 預設值為 "@,48-57,_,128-167,224-235",否則為 "@,48-57,_,192-255") 全域設定。此選項所給定的字元會包含在識別碼中。識別碼會用於識別環境變數,以及在匹配
'define' 選項之後。它也用於
pattern 中的 "\i"。有關此選項格式的說明,請參閱
'isfname'。對於 '@',只會使用 255 及以下的字元。請注意:如果您變更此選項,可能會破壞環境變數的展開。例如,當包含 '/' 且 Vim 嘗試展開 "$HOME/.local/state/nvim/shada/main.shada" 時。您或許應該改為變更
'iskeyword'。
'iskeyword' 'isk' 'iskeyword' 'isk' 字串 (預設為 "@,48-57,_,192-255") 緩衝區局部設定。關鍵字會用於搜尋以及使用許多指令進行識別:"w"、"*"、"[i" 等。它也用於
pattern 中的 "\k"。有關此選項格式的說明,請參閱
'isfname'。對於 255 以上的 '@' 字元,請檢查 "word" 字元類別(任何不是空白或標點符號的字元)。對於 C 程式,您可以使用 "a-z,A-Z,48-57,_,.,-,>"。對於說明檔,它會設定為所有非空白的可列印字元,除了 "*"、'"' 和 '|' 之外(因此在指令上按
CTRL-]
會尋找該指令的說明)。當
'lisp' 選項啟用時,永遠會包含 '-' 字元。除非語法使用
:syn-iskeyword,否則此選項也會影響語法高亮顯示。
不可列印的字元會以兩個字元顯示:0 - 31 "^@" - "^_"、32 - 126 永遠為單個字元、127 "^?"、128 - 159 "~@" - "~_"、160 - 254 "| " - "|~"、255 "~?"。從 128 到 255 的非法位元組 (無效的 UTF-8) 會顯示為
<xx>
,其中 xx 是位元組的十六進位值。當
'display' 包含 "uhex" 時,所有不可列印的字元都會顯示為
<xx>
。SpecialKey 高亮顯示會用於不可列印的字元。
hl-SpecialKey
多位元組字元 256 及以上永遠會包含,只有 255 及以下的字元會由此選項指定。當字元可列印但目前字型中沒有時,會顯示替代字元。不可列印和零寬度的 Unicode 字元會顯示為 <xxxx>
。沒有選項可以指定這些字元。
clean 從 jumplist 中移除已卸載的緩衝區。實驗性功能:此旗標未來可能會變更。
'keymodel' 'km' 'keymodel' 'km' 字串 (預設為 "") 全域設定。以逗號分隔的單字清單,可啟用按鍵可以執行的特殊操作。可以使用以下值:startsel 使用 Shift 特殊按鍵開始選取(Select 模式或 Visual 模式,取決於
'selectmode' 中是否出現 "key")。stopsel 使用非 Shift 特殊按鍵停止選取。在此內容中的特殊按鍵是指游標鍵、
<End>
、
<Home>
、
<PageUp>
和
<PageDown>
。
'keywordprg' 'kp' 'keywordprg' 'kp' 字串 (預設值:":Man",Windows:":help") 全域或緩衝區局部設定。
global-local 用於
K 指令的程式。環境變數會展開
:set_env。可以使用 ":help" 來存取 Vim 內部說明。(請注意,先前將全域選項設定為空白值會執行此動作,但現在已不建議使用。)當第一個字元是 ":" 時,該指令會以 Vim Ex 指令的形式呼叫,並加上 [count] 前綴。當使用 "man" 或 "man -s" 時,Vim 會自動將 "K" 指令的 [count] 轉換為章節編號。請參閱
option-backslash 以了解如何包含空白和反斜線。範例
set keywordprg=man\ -s
set keywordprg=:Man
範例 (對於希臘文,使用 UTF-8):
greekset langmap=ΑA,ΒB,ΨC,ΔD,ΕE,ΦF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,ΤT,ΘU,ΩV,WW,ΧX,ΥY,ΖZ,αa,βb,ψc,δd,εe,φf,γg,ηh,ιi,ξj,κk,λl,μm,νn,οo,πp,qq,ρr,σs,τt,θu,ωv,ςw,χx,υy,ζz
範例 (交換指令 z 和 y 的含義)
set langmap=zy,yz,ZY,YZ
'langmap' 選項是多個部分的清單,以逗號分隔。每個部分可以是以下兩種形式之一:1. 成對的清單。每對都是一個 "from" 字元,緊接著 "to" 字元。範例:"aA"、"aAbBcC"。2. "from" 字元的清單、一個分號和 "to" 字元的清單。範例:"abc;ABC" 範例:"aA,fgh;FGH,cCdDeE"。特殊字元前面需要加上反斜線。這些字元是 ";"、'、'"'、'|' 和反斜線本身。
這將允許您啟用 vim 的操作,而無需在語言之間來回切換。您的語言字元在以下情況下將被視為正常的 vim 英文單字(根據 langmap 的對應): o 一般/視覺模式(指令、緩衝區/暫存器名稱、使用者對應) o 插入/取代模式:CTRL-R
後的暫存器名稱 o 插入/取代模式:對應 在命令列模式中輸入的字元將不受此選項影響。請注意,此選項可以隨時變更,允許在不同語言/編碼的對應之間切換。使用對應來避免每次都輸入!
(不含空格)。例如,無論 $LANG 設定為何,始終使用荷蘭語選單
set langmenu=nl_NL.ISO_8859-1
當
'langmenu' 為空時,會使用
v:lang。只能使用正常的檔案名稱字元,
/\*?[|<>
是非法的。如果您的 $LANG 設定為非英語語言,但您想使用英文選單
set langmenu=none
必須在載入選單、開啟檔案類型偵測或語法突顯之前設定此選項。一旦定義選單,設定此選項便沒有效果。但您可以執行此操作
source $VIMRUNTIME/delmenu.vim
set langmenu=de_DE.ISO_8859-1
source $VIMRUNTIME/menu.vim
警告: 這會刪除所有您自己定義的選單!
'lines' E593 'lines' 數字 (預設值為 24 或終端機高度) 全域 Vim 視窗的行數。通常您不需要設定此值。它會由終端機初始化程式碼自動完成。當 Vim 在 GUI 中或在可調整大小的視窗中執行時,設定此選項會導致變更視窗大小。當您只想將大小用於 GUI 時,請將指令放入
gvimrc 檔案中。Vim 會將行數限制為符合螢幕的大小。您可以使用此指令來取得盡可能高的視窗
set lines=999
最小值為 2,最大值為 1000。
當
'listchars' 不包含 "tab" 欄位時,Tab 會顯示為 "^I" 或 "<09>",就像顯示不可列印的字元一樣。
游標會顯示在 Tab 字元佔用的空間的開頭,而不是像一般在一般模式中一樣顯示在結尾。若要在使用空格顯示 Tab 時取得此游標位置,請使用
set list lcs=tab:\ \
lcs-eol eol:c 在每一行末尾顯示的字元。省略時,行尾沒有額外的字元。
lcs-tabtab:xy[z] 用於顯示 Tab 的兩個或三個字元。第三個字元是選用的。
tab:xy 始終使用 'x',然後根據需要多次使用 'y'。因此 "tab:>-" 會顯示
>
>-
>--
etc.
tab:xyz 始終使用 'z',然後將 'x' 前置,然後根據需要多次使用 'y'。因此 "tab:<->" 會顯示
>
<>
<->
<-->
etc.
當省略 "tab:" 時,Tab 會顯示為 ^I。
lcs-spacespace:c 用於顯示空格的字元。省略時,空格會留白。
lcs-multispacemultispace:c... 一個或多個字元,用於循環顯示多個連續的空格。覆寫 "space" 設定,但單一空格除外。省略時,會使用 "space" 設定。例如,
:set listchars=multispace:---+
會將十個連續的空格顯示為
---+---+--
lcs-lead lead:c 用於顯示開頭空格的字元。省略時,開頭空格會留白。覆寫開頭空格的 "space" 和 "multispace" 設定。您可以將它與 "tab:" 結合使用,例如
set listchars+=tab:>-,lead:.
其中 "XXX" 表示行中第一個非空白字元。
lcs-trailtrail:c 用於顯示尾隨空格的字元。若省略,尾隨空格將顯示為空白。此設定會覆蓋尾隨空格的 "space" 和 "multispace" 設定。
lcs-extendsextends:c 當
'wrap' 設定為關閉且該行超出螢幕右側時,在最後一欄顯示的字元。
lcs-precedesprecedes:c 當實體行的第一個可見欄位之前有文字時,在該實體行的第一個可見欄位中顯示的字元。
lcs-concealconceal:c 當
'conceallevel' 設定為 1 時,用來顯示被隱藏文字的字元。若省略,則為空格。
lcs-nbspnbsp:c 用於顯示不換行空格字元 (0xA0 (十進位 160) 和 U+202F) 的字元。若省略,則留白。
不應使用字元 ':' 和 ','。可以使用 UTF-8 字元。所有字元都必須是單一寬度。
E1512
每個字元都可以指定為十六進位。
set listchars=eol:\\x24
set listchars=eol:\\u21b5
set listchars=eol:\\U000021b5
請注意,必須使用雙反斜線。\\x 的十六進位字元數必須剛好是 2 個,\\u 是 4 個,而 \\U 是 8 個。
範例
set lcs=tab:>-,trail:-
set lcs=tab:>-,eol:<,nbsp:%
set lcs=extends:>,precedes:<
hl-NonText 語法高亮將用於 "eol"、"extends" 和 "precedes"。
hl-Whitespace 則用於 "nbsp"、"space"、"tab"、"multispace"、"lead" 和 "trail"。
當您使用 MS-Windows 時,這會特別有用。如果已啟用 iconv,則將
'makeencoding' 設定為 "char" 與設定為系統地區設定編碼具有相同的效果。範例
set makeencoding=char " system locale is used
可以給定佔位符 "$*"(即使多次給定),以指定將包含引數的位置,例如
set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
一個更特殊的範例,可在賦值中 '=' 和 ';' 之間跳轉,這對於 C 和 Java 等語言很有用
au FileType c,cpp,java set mps+==:;
如需更進階的 "%" 使用方式,請參閱 $VIMRUNTIME/plugin 目錄中的 matchit.vim 外掛程式。
add-local-help
'maxmempattern' 'mmp' 'maxmempattern' 'mmp' 數字(預設為 1000)全域。用於模式比對的最大記憶體量(以 Kbyte 為單位)。最大值約為 2000000。使用此選項可在沒有限制的情況下工作。
E363當 Vim 達到限制時,它會給出錯誤訊息,並且行為大多與輸入
CTRL-C
類似。達到限制通常表示模式非常低效或太複雜。即使在非常長的行上使用模式 "\(.\)*" 也可能會發生這種情況。"." 運作得更好。當語法規則嘗試比對複雜的文字結構時,重新繪製也可能會發生這種情況。Vim 可能會在達到
'maxmempattern' 限制之前用完記憶體,在這種情況下,您會收到 "記憶體不足" 錯誤。
有三個數字,以逗號分隔
{start},{inc},{added}
對於大多數語言來說,未壓縮的單字樹可以放入記憶體中。{start}
給出在執行任何壓縮之前可以使用的記憶體量(以 Kbyte 為單位)。它應該比 Vim 可用的記憶體量小一點。
當超過 {start}
限制時,{inc}
數字會指定在執行另一次壓縮之前可以配置的記憶體量(以 Kbyte 為單位)。較低的數字表示在添加較少的單字後執行壓縮,這很慢。較高的數字表示將配置更多記憶體。
在完成壓縮後,在忽略 {inc}
上限之前,可以加入 {added}
次 1024 個詞,並且當需要任何額外記憶體時會進行壓縮。數字越小,代表達到 {inc}
上限的機率越小,使用的記憶體越少,但速度會比較慢。
這些數字對於義大利語和匈牙利語來說很重要。預設值適用於您擁有約 512 MB 記憶體的情況。如果您有 1 GB 記憶體,您可以使用
set mkspellmem=900000,3000,800
'mouse'
'mouse' 字串(預設為 "nvi"),屬於全域設定。啟用滑鼠支援。例如,要在一般模式和視覺模式中啟用滑鼠
set mouse=nv
若要暫時停用滑鼠支援,在使用滑鼠時按住 Shift 鍵。
可以針對不同模式啟用滑鼠支援: n 一般模式 v 視覺模式 i 插入模式 c 命令列模式 h 編輯說明檔時的所有先前模式 a 所有先前模式 r 用於
hit-enter 和
more-prompt 提示
在文字緩衝區中任何位置左鍵單擊,即可將游標放置於該處。這也適用於運算子,例如,輸入
d,然後左鍵單擊以刪除從目前游標位置到您單擊位置的文字。
如果為 "v"(視覺模式)啟用,則雙擊選擇以字為單位,三擊使其以行為單位,四擊使其以矩形區塊為單位。
'mousemodel' 'mousem' 'mousemodel' 'mousem' 字串(預設為 "popup_setpos"),屬於全域設定。設定滑鼠要使用的模式。名稱主要指定滑鼠右鍵的用途: extend 滑鼠右鍵擴展選取範圍。這與 xterm 中的方式相同。 popup 滑鼠右鍵彈出選單。按住 Shift 鍵的滑鼠左鍵會擴展選取範圍。這與 Microsoft Windows 中的方式相同。 popup_setpos 類似於 "popup",但游標會移動到滑鼠單擊的位置,因此選取的動作會對單擊的物件起作用。如果在選取範圍內單擊,則會對該選取範圍起作用,即不會移動游標。這當然意味著在選取範圍外單擊右鍵會結束視覺模式。每個模式的按鈕功能概述
滑鼠 extend popup(_setpos)
左鍵單擊 放置游標 放置游標 左鍵拖曳 開始選取 開始選取 按住 Shift 鍵的左鍵 搜尋單字 擴展選取範圍 右鍵單擊 擴展選取範圍 彈出選單(放置游標) 右鍵拖曳 擴展選取範圍 中鍵單擊 貼上 貼上
在 "popup" 模式中,滑鼠右鍵會產生彈出選單。Nvim 會建立預設的
彈出選單,但您可以重新定義它。
範例
map <S-LeftMouse> <RightMouse>
map <S-LeftDrag> <RightDrag>
map <S-LeftRelease> <RightRelease>
map <2-S-LeftMouse> <2-RightMouse>
map <2-S-LeftDrag> <2-RightDrag>
map <2-S-LeftRelease> <2-RightRelease>
map <3-S-LeftMouse> <3-RightMouse>
map <3-S-LeftDrag> <3-RightDrag>
map <3-S-LeftRelease> <3-RightRelease>
map <4-S-LeftMouse> <4-RightMouse>
map <4-S-LeftDrag> <4-RightDrag>
map <4-S-LeftRelease> <4-RightRelease>
可以使用在滑鼠前輸入 "g" 鍵來模擬需要 CTRL 修飾鍵的滑鼠命令:"g<LeftMouse>" 為 "<C-LeftMouse>"(跳到滑鼠點擊下的標籤) "g<RightMouse>" 為 "<C-RightMouse>" ("CTRL-T")
'mousescroll' E5080 'mousescroll' 字串(預設為 "ver:3,hor:6"),屬於全域設定。此選項控制使用滑鼠滾輪滾動時要滾動的行數/列數(
scroll-mouse-wheel)。此選項為逗號分隔的清單。每個部分都包含方向和計數,如下所示: direction:count,direction:count 方向為 "hor" 或 "ver" 其中之一。"hor" 控制水平滾動,而 "ver" 控制垂直滾動。Count 設定給定方向的滾動量,它應為非負整數。每個方向最多應設定一次。如果省略方向,則會使用預設值(水平滾動為 6,垂直滾動為 3)。您可以使用計數 0 來停用滑鼠滾動。
範例
set mousescroll=ver:5,hor:2
這將使 Nvim 在垂直滾動時每次滾動 5 行,在水平滾動時每次滾動 2 列。
'nrformats' 'nf' 'nrformats' 'nf' 字串(預設為 "bin,hex"),屬於緩衝區的本地設定。這定義當使用
CTRL-A
和
CTRL-X
命令分別新增和減少數字時,Vim 會將哪些進位視為數字;請參閱
CTRL-A,以取得有關這些命令的更多資訊。alpha 如果包含,則會遞增或遞減單個字母字元。這對於使用字母索引 a)、b) 等的清單很有用。
octal-nrformats八進位 如果包含此選項,則以零開頭的數字會被視為八進位。範例:在 "007" 上使用
CTRL-A
會產生 "010"。十六進位 如果包含此選項,則以 "0x" 或 "0X" 開頭的數字會被視為十六進位。範例:在 "0x100" 上使用
CTRL-X
會產生 "0x0ff"。二進位 如果包含此選項,則以 "0b" 或 "0B" 開頭的數字會被視為二進位。範例:在 "0b1000" 上使用
CTRL-X
會減一,產生 "0b0111"。無符號 如果包含此選項,則數字會被識別為無符號。因此,前導的破折號或負號不會被視為數字的一部分。範例:在 "9-2020" 中的 "2020" 上使用
CTRL-X
會產生 "9-2019"(若沒有「unsigned」,則會變成 "9-2021")。在 "9-2020" 中的 "2020" 上使用
CTRL-A
會產生 "9-2021"(若沒有「unsigned」,則會變成 "9-2019")。在 "0" 上使用
CTRL-X
或在 "18446744073709551615" (2^64 - 1) 上使用
CTRL-A
不會產生任何影響,可以防止溢位。空白 如果包含此選項,則根據前面的空白字元將數字視為有符號或無符號。如果帶有前導破折號的數字,其破折號的前面緊鄰非空白字元(即,不是 tab 或 " "),則負號不會被視為數字的一部分。例如:在 "Carbon-14" 中的 "14" 上使用
CTRL-A
會產生 "Carbon-15"(若沒有「blank」,則會變成 "Carbon-13")。在 "Carbon -8" 中的 "8" 上使用
CTRL-X
會產生 "Carbon -9"(因為 -8 前面有空白字元。如果設定了「unsigned」,則會產生 "Carbon -7")。如果包含此格式,則會像設定了「unsigned」一樣防止溢位。如果同時包含此格式和「unsigned」,則「unsigned」將優先。
僅以 1-9 範圍內的數字開頭的數字始終被視為十進位。對於未被識別為八進位或十六進位的數字也是如此。
'patchmode' 'pm' E205 E206 'patchmode' 'pm' 字串(預設值 "")全域 當非空時,將保留檔案的舊版本。如果您正在變更原始碼發行版中的檔案,則可以使用此選項來保留檔案的原始版本。僅在第一次寫入檔案時,才會保留原始檔案的副本。副本的名稱是原始檔案的名稱,並附加
'patchmode' 選項中的字串。此選項應以點開頭。使用類似 ".orig" 或 ".org" 的字串。
'backupdir' 不得為空,才能使其正常運作。(詳細資訊:備份檔案會在成功寫入新檔案後重新命名為 patchmode 檔案,這就是為什麼必須可以寫入備份檔案的原因)。如果沒有要備份的檔案,則會建立一個空檔案。當
'backupskip' 模式匹配時,不會建立 patchmode 檔案。將
'patchmode' 用於壓縮檔案會在末尾附加副檔名(例如,「file.gz.orig」),因此產生的名稱並不總是會被識別為壓縮檔案。僅能使用正常的檔案名稱字元,
/\*?[|<>
是不合法的。
'path' 'pa' E343 E345 E347 E854 'path' 'pa' 字串(預設值 ".,,")全域或本機緩衝區
global-local 這是當使用
gf、[f、]f、^Wf、
:find、
:sfind、
:tabfind 和其他命令時,將搜尋的目錄列表,前提是要搜尋的檔案具有相對路徑(不是以 "/"、"./" 或 "../" 開頭)。
'path' 選項中的目錄可以是相對或絕對路徑。
使用逗號分隔目錄名稱
set path=.,/usr/local/include,/usr/include
也可以使用空格分隔目錄名稱。要在目錄名稱中使用空格,請在空格前加上額外的反斜線,並逸出空格
set path=.,/dir/with\\\ space
要在目錄名稱中包含逗號,請在逗號前加上額外的反斜線
set path=.,/dir/with\\,comma
若要相對於目前檔案的目錄進行搜尋,請使用
set path=.
若要在目前的目錄中搜尋,請在兩個逗號之間使用空字串
set path=,,
目錄名稱可以以 ':' 或 '/' 結尾。
當使用
netrw.vim 時,可以使用 URL。例如,加入 "https://www.vim.org" 會使 ":find index.html" 生效。
小心使用 '\' 字元,鍵入兩個字元才能在選項中獲得一個字元
set path=.,c:\\include
或者直接使用 '/' 取代
set path=.,c:/include
不要忘記 ".",否則即使檔案與檔案位於同一目錄中也找不到!最大長度受到限制。具體取決於系統,大多數情況下類似於 256 或 1024 個字元。您可以使用
'path' 的值檢查是否找到了所有包含檔案,請參閱
:checkpath。在從列表中新增或刪除目錄時,首選使用
:set+= 和
:set-=。這可以避免未來版本使用其他預設值時出現問題。若要移除目前目錄,請使用
set path-=
若要使用環境變數,您可能需要取代分隔符號。以下是一個範例,用於附加 $INCL,其中目錄名稱以分號分隔
let &path = &path .. "," .. substitute($INCL, ';', ',', 'g')
將 ';' 取代為 ':' 或使用的任何分隔符號。請注意,當 $INCL 包含逗號或空格時,此方法不起作用。
可以透過
highlight-blend 來覆寫快顯功能表中各個高亮顯示的透明度等級。例如,要啟用透明度,但強制使目前選取的元素完全不透明。
set pumblend=15
hi PmenuSel blend=0
'redrawdebug' 'rdb' 'redrawdebug' 'rdb' 字串 (預設值為 "") 全域選項。用於變更重繪工作方式的旗標,用於除錯目的。與將
'writedelay' 設定為某個合理值最為實用。支援下列旗標:compositor 表示合成器處理的每個重繪事件,方式是快速閃爍以色彩指示重繪類型的重繪區域。這些是使用的突出顯示群組(及其預設顏色):RedrawDebugNormal gui=reverse 通過的正常重繪 RedrawDebugClear guibg=Yellow 通過的清除事件 RedrawDebugComposed guibg=Green 由合成器修改的重繪事件(由於網格重疊等)RedrawDebugRecompose guibg=Red 由合成器本身產生的重繪,由於網格移動或刪除。line 在螢幕上繪製每行後引入延遲。當使用 TUI 或其他單網格 UI 時,「compositor」會提供更多資訊,應該優先使用(合成器會將每一行作為單獨的事件進行處理)flush 在每個「刷新」事件後引入延遲。nothrottle 關閉訊息網格的節流。這是一種最佳化方法,當繪製訊息區域時(啟用
'display' msgsep 旗標),會將許多小的捲動合併為一個較大的捲動。invalid 啟用對內部螢幕狀態不一致的更嚴格檢查(中止)。這在除錯器(和測試套件)內部執行 nvim 時最為實用。nodelta 將所有內部重新繪製的單元格發送到 UI,即使它們與已顯示狀態未更改也是如此。
'regexpengine' 're' 'regexpengine' 're' 數字 (預設值為 0) 全域選項。這會選取預設的正規表示式引擎。
two-engines 可能的值為:0 自動選取 1 舊引擎 2 NFA 引擎 請注意,當使用 NFA 引擎且模式包含不支援的內容時,該模式將不匹配。這僅對偵錯正規表示式引擎有用。使用自動選取可讓 Vim 切換引擎,如果預設引擎的成本過高。例如,當 NFA 引擎使用過多的狀態時。這應該可以防止 Vim 在複雜模式與長文字組合時掛起。
用於搜尋 "/" 和 "?" 命令
預設尺規寬度為 17 個字元。若要將尺規設為 15 個字元寬,請在開頭放置「%15(」,在結尾放置「%)」。範例
set rulerformat=%15(%c%V\ %p%%%)
'runtimepath' 'rtp' vimfiles 'runtimepath' 'rtp' 字串 (預設值為 "$XDG_CONFIG_HOME/nvim, $XDG_CONFIG_DIRS[1]/nvim, $XDG_CONFIG_DIRS[2]/nvim, … $XDG_DATA_HOME/nvim[-data]/site, $XDG_DATA_DIRS[1]/nvim/site, $XDG_DATA_DIRS[2]/nvim/site, … $VIMRUNTIME, … $XDG_DATA_DIRS[2]/nvim/site/after, $XDG_DATA_DIRS[1]/nvim/site/after, $XDG_DATA_HOME/nvim[-data]/site/after, … $XDG_CONFIG_DIRS[2]/nvim/after, $XDG_CONFIG_DIRS[1]/nvim/after, $XDG_CONFIG_HOME/nvim/after") 全域設定。要搜尋這些執行階段檔案的目錄清單:filetype.lua 檔案類型
new-filetype autoload/ 自動載入的腳本
autoload-functions colors/ 配色方案檔案
:colorscheme compiler/ 編譯器檔案
:compiler doc/ 文件
write-local-help ftplugin/ 檔案類型外掛程式
write-filetype-plugin indent/ 縮排腳本
indent-expression keymap/ 按鍵對應檔案
mbyte-keymap lang/ 選單翻譯
:menutrans lua/
Lua 外掛程式 menu.vim GUI 選單
menu.vim pack/ 套件
:packadd parser/
treesitter 語法剖析器 plugin/ 外掛程式腳本
write-plugin queries/
treesitter 查詢 rplugin/
remote-plugin 腳本 spell/ 拼字檢查檔案
spell syntax/ 語法檔案
mysyntaxfile tutor/ 教學檔案
:Tutor
預設值設定為搜尋以下位置:1. 您的主目錄,用於個人喜好設定。由
stdpath("config")
提供。
$XDG_CONFIG_HOME 2. 根據
xdg,必須包含設定檔的目錄($XDG_CONFIG_DIRS,預設為 /etc/xdg)。這也包含系統管理員的喜好設定。3. 資料主目錄,用於使用者安裝的外掛程式。由
stdpath("data")/site
提供。
$XDG_DATA_HOME 4. $XDG_DATA_DIRS 中每個目錄的 nvim/site 子目錄。這適用於系統管理員安裝但不是 Nvim 發行版一部分的外掛程式。XDG_DATA_DIRS 預設為 /usr/local/share/:/usr/share/,因此預計系統管理員會將站點外掛程式安裝到 /usr/share/nvim/site。5. 會話狀態目錄,用於交換、備份目錄、檢視目錄、復原目錄等狀態資料。由
stdpath("state")
提供。
$XDG_STATE_HOME 6. $VIMRUNTIME,用於與 Nvim 一起發行的檔案。
after-directory7、8、9、10。在 1、2、3 和 4 的 after/ 子目錄中,以相反的順序排列。這是為了讓喜好設定覆蓋或添加到發行的預設值或全系統設定(很少需要)。
請注意,與
'path' 不同,不允許使用「**」等萬用字元。允許使用一般的萬用字元,但會顯著減慢搜尋執行階段檔案的速度。為了加快速度,請盡可能少使用項目並避免使用萬用字元。請參閱
:runtime。範例
set runtimepath=~/vimruntime,/mygroup/vim,$VIMRUNTIME
這將首先使用目錄 "~/vimruntime"(包含您的個人 Nvim 執行階段檔案),然後使用 "/mygroup/vim",最後使用 "$VIMRUNTIME"(預設執行階段檔案)。您可以將一個目錄放在 $VIMRUNTIME 之前,以尋找取代發行執行階段檔案的檔案。您可以將一個目錄放在 $VIMRUNTIME 之後,以尋找添加到發行執行階段檔案的檔案。
注意:當水平調整終端機緩衝區的大小時,不可見且保留在捲動緩衝區中的行不會重新排版。
'scrolljump' 'sj' 'scrolljump' 'sj' 數字 (預設為 1) 全域設定。當游標移出螢幕時(例如,使用「j」),捲動的最小行數。不適用於捲動命令(例如,
CTRL-E
、
CTRL-D
)。如果您的終端機捲動速度非常慢,這非常有用。當設定為 -1 到 -100 的負數時,這會用作視窗高度的百分比。因此,-50 會捲動視窗高度的一半。
'scrolloff' 'so' 'scrolloff' 'so' 數字 (預設為 0) 全域或視窗本地設定
global-local。在游標上方和下方保持的最小螢幕行數。這會讓您正在工作的位置周圍有一些上下文可見。如果您將其設定為非常大的值 (999),游標行將始終位於視窗中間(檔案開頭或結尾處或長行換行時除外)。使用本地值後,使用以下兩種方法之一返回全域值
setlocal scrolloff<
setlocal scrolloff=-1
'selection' 'sel' 'selection' 'sel' 字串 (預設值 "inclusive") 全域 此選項定義選取的行為。它僅在視覺模式和選取模式中使用。可能的值
值 超過行 是否包含
old 無 是 inclusive 是 是 exclusive 是 無 "超過行" 表示允許游標定位在行尾後的一個字元。"inclusive" 表示選取的最後一個字元會包含在操作中。例如,當使用 "x" 刪除選取時。當使用 "old" 且
'virtualedit' 允許游標移過行尾時,換行符號仍不會包含在內。請注意,當使用 "exclusive" 且從末尾向後選取時,當從一般模式開始且
'virtualedit' 為空時,您無法包含行的最後一個字元。
'sessionoptions' 'ssop' 'sessionoptions' 'ssop' 字串 (預設值 "blank,buffers,curdir,folds,help,tabpages,winsize,terminal") 全域 變更
:mksession 命令的效果。此為以逗號分隔的單字列表。每個單字都會啟用儲存和還原某些項目
單字 儲存和還原
blank 空白視窗 buffers 隱藏和未載入的緩衝區,而不僅僅是視窗中的緩衝區 curdir 目前目錄 folds 手動建立的摺疊、開啟/關閉的摺疊和本機摺疊選項 globals 以大寫字母開頭且至少包含一個小寫字母的全域變數。僅儲存字串和數字類型。 help 說明視窗 localoptions 視窗或緩衝區的本機選項和對應 (而非本機選項的全域值) options 所有選項和對應 (也包括本機選項的全域值) skiprtp 從選項中排除
'runtimepath' 和
'packpath' resize Vim 視窗的大小:
'lines' 和
'columns' sesdir 工作階段檔案所在的目錄將成為目前目錄 (在不同系統從網路存取專案時很有用) tabpages 所有標籤頁面;若無此選項,則僅還原目前標籤頁面,因此您可以為每個標籤頁面建立一個工作階段 terminal 包含可還原命令的終端機視窗 winpos 整個 Vim 視窗的位置 winsize 視窗大小 slash
已棄用 永遠啟用。在檔案名稱中使用 "/"。 unix
已棄用 永遠啟用。使用 "\n" 行尾符號。
請勿同時包含 "curdir" 和 "sesdir"。當兩者皆未包含時,檔案名稱會儲存為絕對路徑。如果您省略 "options",則在還原工作階段後許多事情都無法正常運作。
'shada' 'sd' E526 E527 E528 'shada' 'sd' 字串 (Win32 的預設值:!,'100,<50,s10,h,rA:,rB: 其他的預設值:!,'100,<50,s10,h) 全域 當非空白時,會在啟動時讀取 shada 檔案,並在結束 Vim 時寫入 (請參閱
shada 檔案)。字串應為以逗號分隔的參數列表,每個參數都包含一個識別特定參數的字元,後面接著指定該參數值的數字或字串。如果省略特定字元,則該參數會使用預設值。以下是識別字元的列表及其值的效果。
字元 值
shada-! ! 當包含時,儲存和還原以大寫字母開頭且不包含小寫字母的全域變數。因此,會儲存 "KEEPTHIS 和 "K_L_M",但不會儲存 "KeepThis" 和 "_K_L_M"。巢狀列表和字典項目可能無法正確讀回,您最後會得到一個空白項目。
shada-quote" 為每個暫存器儲存的最大行數。'<' 項目的舊名稱,缺點是您需要在 " 前面加上反斜線,否則它會被識別為註解的開頭!
shada-%% 當包含時,儲存和還原緩衝區列表。如果 Vim 是使用檔案名稱引數啟動的,則不會還原緩衝區列表。如果 Vim 是在沒有檔案名稱引數的情況下啟動的,則會從 shada 檔案還原緩衝區列表。快速修正 (
'buftype')、未列出 (
'buflisted')、未命名和卸除式媒體上的緩衝區 (
shada-r) 不會儲存。當後面跟著一個數字時,該數字會指定儲存的最大緩衝區數量。如果沒有數字,則會儲存所有緩衝區。
shada-'' 記住標記的先前編輯檔案的最大數量。當
'shada' 非空白時,必須永遠包含此參數。包含此項目也表示會在 shada 檔案中儲存
跳躍列表和
變更列表。
shada-// 要儲存的搜尋模式歷程記錄中的最大項目數。如果非零,也會儲存先前的搜尋和取代模式。當未包含時,會使用
'history' 的值。
shada-:: 要儲存的命令列歷程記錄中的最大項目數。當未包含時,會使用
'history' 的值。
shada-<< 為每個暫存器儲存的最大行數。如果為零,則不會儲存暫存器。當未包含時,會儲存所有行。'"' 是此項目的舊名稱。另請參閱下方的 's' 項目:以 KiB 為單位指定的限制。
shada-@@ 要儲存的輸入行歷程記錄中的最大項目數。當未包含時,會使用
'history' 的值。
shada-cc 虛擬選項,保留以實現相容性。沒有實際效果:ShaDa 永遠使用 UTF-8,而且
'encoding' 值也固定為 UTF-8。
shada-ff 是否需要儲存檔案標記。如果為零,則不會儲存檔案標記 ('0 到 '9、'A 到 'Z)。當不存在或非零時,則會全部儲存。'0 用於目前的游標位置 (當結束或執行
:wshada 時)。
shada-hh 停用在載入 shada 檔案時
'hlsearch' 的效果。當未包含時,會取決於自上次搜尋命令後是否已使用 ":nohlsearch"。
shada-nn shada 檔案的名稱。名稱必須緊接著 'n'。必須在選項的結尾!如果已設定
'shadafile' 選項,則該檔案名稱會覆寫此處透過
'shada' 給定的檔案名稱。開啟檔案時會擴充環境變數,而不是在設定選項時。
shada-rr 卸除式媒體。引數為字串 (最多到下一個 ',')。可以多次給定此參數。每個參數都會指定不儲存標記的路徑開頭。這是為了避免卸除式媒體。對於 Windows,您可以使用 "ra:,rb:"。您也可以將其用於暫存檔案,例如,對於 Unix: "r/tmp"。會忽略大小寫。
shada-ss 項目內容的最大大小 (以 KiB 為單位)。如果為零,則不會儲存任何項目。與 Vim 不同,這適用於所有項目,但緩衝區列表和標頭除外。完整項目大小會減少三個不帶正負號的整數:若使用
s10
,則最大項目大小可能為 1 個位元組 (類型:7 位元整數) + 9 個位元組 (時間戳記:最多 64 位元整數) + 3 個位元組 (項目大小:最多 16 位元整數,因為 2^8 < 10240 < 2^16) + 10240 個位元組 (要求的最大項目內容大小) = 10253 個位元組。
範例
set shada='50,<1000,s100,:0,n~/nvim/shada
'50 系統會記住您編輯的最後 50 個檔案的標記。 <1000 系統會記住暫存器的內容 (每個暫存器最多 1000 行)。 s100 系統會略過內容佔用超過 100 KiB 的項目。 :0 系統不會儲存命令列歷程記錄。 n~/nvim/shada 要使用的檔案名稱為 "~/nvim/shada"。 no / 由於未指定 '/',因此會使用預設值,也就是儲存所有搜尋歷程記錄,以及先前的搜尋和取代模式。 no % 系統不會儲存也不會讀回緩衝區列表。 no h 系統會還原
'hlsearch' 反白顯示。
如果 shell 的名稱包含空格,則需要將其用引號括起來。以下為使用引號的範例
set shell=\"c:\program\ files\unix\sh.exe\"\ -f
請注意,每個引號前面都有一個反斜線 (以避免開始註解),並且每個空格前面也有一個反斜線 (以避免結束選項值),因此最好使用
:let-&,如下所示
let &shell='"C:\Program Files\unix\sh.exe" -f'
另請注意,"-f" 並不在引號內,因為它不是命令名稱的一部分。
shell-unquoting關於引號的規則:1. 選項會以空格和 Tab 字元分隔,但引號內的除外:"abc def" 會執行名為 "abc" 的 shell,並帶有額外的引數 "def",而 '"abc def"' 會執行名為 "abc def" 的 shell,不帶任何額外引數 (此處及以下:額外引數意指「除了
'shellcmdflag' 之外的引數」)。2. 引號在選項中可以出現在任何位置和任何次數:'"abc"'、'"a"bc'、'a"b"c'、'ab"c"' 和 '"a"b"c"' 都等同於 "abc"。3. 在引號內,反斜線後接反斜線表示一個反斜線。反斜線後接引號表示一個引號。反斜線後接其他任何字元,則表示反斜線和下一個字元的字面意義:'"a\\b"' 與 "a\b" 相同,'"a\\"b"' 會執行字面上名為 'a"b' 的 shell,'"a\b"' 再次與 "a\b" 相同。4. 在引號外,反斜線始終表示它本身,不能用於跳脫引號:'a\"b"' 與 "a\b" 相同。請注意,此處理是在
:set 完成其自身的跳脫處理後才進行的,因此為了確保程式碼的易讀性,請像上面所示使用
:let-&。
shell-powershell若要使用 PowerShell
let &shell = executable('pwsh') ? 'pwsh' : 'powershell'
let &shellcmdflag = '-NoLogo -NonInteractive -ExecutionPolicy RemoteSigned -Command [Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.UTF8Encoding]::new();$PSDefaultParameterValues[''Out-File:Encoding'']=''utf8'';$PSStyle.OutputRendering=''plaintext'';Remove-Alias -Force -ErrorAction SilentlyContinue tee;'
let &shellredir = '2>&1 | %%{ "$_" } | Out-File %s; exit $LastExitCode'
let &shellpipe = '2>&1 | %%{ "$_" } | tee %s; exit $LastExitCode'
set shellquote= shellxquote=
'shellpipe' 'sp' 'shellpipe' 'sp' 字串 (預設值為 ">", "| tee", "|& tee" 或 "2>&1| tee") 全域選項,用於將 ":make" 命令的輸出放入錯誤檔案的字串。另請參閱
:make_makeprg。關於如何包含空格和反斜線,請參閱
option-backslash。臨時檔案的名稱可以使用 "%s" 來表示 (如果此選項的值中沒有出現 %s,則會自動附加檔案名稱)。對於 MS-Windows,預設值為 "2>&1| tee"。stdout 和 stderr 會儲存在檔案中並回顯到螢幕上。對於 Unix,預設值為 "| tee"。編譯器的 stdout 會儲存在檔案中並回顯到螢幕上。如果
'shell' 選項在初始化後為 "csh" 或 "tcsh",則預設值會變為 "|& tee"。如果
'shell' 選項為 "sh"、"ksh"、"mksh"、"pdksh"、"zsh"、"zsh-beta"、"bash"、"fish"、"ash" 或 "dash",則預設值會變為 "2>&1| tee"。這表示 stderr 也會包含在內。在使用
'shell' 選項之前,會移除路徑,因此 "/bin/sh" 會使用 "sh"。此選項的初始化會在讀取 vimrc 和其他初始化之後進行,以便在設定
'shell' 選項時,
'shellpipe' 選項會自動變更,除非之前已明確設定。當
'shellpipe' 設定為空字串時,將不會重新導向 ":make" 的輸出。如果您使用的
'makeprg' 會自行寫入
'makeef',這會很有用。如果您不想要使用管道,但又想要包含
'makeef',請將
'shellpipe' 設定為單一空格。別忘了在空格前面加上反斜線:":set sp=\ "。未來,管道可能會用於篩選,此選項將會過時 (至少對於 Unix 而言)。由於安全考量,此選項無法從
modeline 或
sandbox 中設定。
'shellredir' 'srr' 'shellredir' 'srr' 字串 (預設值為 ">", ">&" 或 ">%s 2>&1") 全域選項,用於將篩選器命令的輸出放入臨時檔案的字串。另請參閱
:!。關於如何包含空格和反斜線,請參閱
option-backslash。臨時檔案的名稱可以使用 "%s" 來表示 (如果此選項的值中沒有出現 %s,則會自動附加檔案名稱)。預設值為 ">"。對於 Unix,如果
'shell' 選項在初始化期間為 "csh" 或 "tcsh",則預設值會變為 ">&"。如果
'shell' 選項為 "sh"、"ksh"、"mksh"、"pdksh"、"zsh"、"zsh-beta"、"bash" 或 "fish",則預設值會變為 ">%s 2>&1"。這表示 stderr 也會包含在內。對於 Win32,會執行 Unix 檢查,並額外檢查 "cmd",這會將預設值變為 ">%s 2>&1"。此外,也會檢查附加 ".exe" 的相同名稱。此選項的初始化會在讀取 vimrc 和其他初始化之後進行,以便在設定
'shell' 選項時,
'shellredir' 選項會自動變更,除非之前已明確設定。未來,管道可能會用於篩選,此選項將會過時 (至少對於 Unix 而言)。由於安全考量,此選項無法從
modeline 或
sandbox 中設定。
o 覆蓋寫入檔案的訊息,並隨後
shm-o 覆蓋讀取檔案的訊息(對於 ":wn" 或當
'autowrite' 開啟時很有用) O 讀取檔案的訊息會覆蓋任何先前的
shm-O 訊息;也適用於快速修復訊息 (例如,":cn") s 不顯示 "search hit BOTTOM, continuing at TOP" 或
shm-s "search hit TOP, continuing at BOTTOM" 訊息;當使用搜尋計數時,不在計數訊息前顯示 "W" (請參閱下方的
shm-S) t 如果檔案訊息太長而無法顯示在命令列上,則截斷訊息的開頭
shm-t,最左邊的欄位會出現 "<";在 Ex 模式下會忽略 T 如果其他訊息太長而無法顯示在命令列上,則截斷訊息的中央
shm-T;中央會出現 "...";在 Ex 模式下會忽略 W 在寫入檔案時,不顯示 "written" 或 "[w]"
shm-W A 當找到現有的
shm-A 交換檔案時,不顯示 "ATTENTION" 訊息 I 在啟動 Vim 時,不顯示介紹訊息
shm-I請參閱
:intro c 不顯示
ins-completion-menu 訊息;例如
shm-c範例:「-- XXX completion (YYY)」、「match 1 of 2」、「The only match」、「Pattern not found」、「Back at original」等等。 C 不顯示掃描 ins-completion
shm-C 項目時的訊息,例如「scanning tags」 q 在錄製巨集時,不顯示「recording @a」
shm-q F 編輯檔案時,不顯示檔案資訊,例如
shm-F 對於該命令使用
:silent
;請注意,這也會影響來自
'autoread' 重新載入的訊息 S 搜尋時不顯示搜尋計數訊息,例如
shm-S "[1/5]"。當不存在 "S" 旗標時(例如,顯示搜尋計數),「search hit BOTTOM, continuing at TOP」和「search hit TOP, continuing at BOTTOM」訊息僅透過搜尋計數統計資料之前的 "W" (提示:Wrapped) 字母表示。
這讓您可以避免在緩衝區之間切換時需要按下
<Enter>
,但仍盡可能在可用空間中提供有用的訊息。若要取得
'shm' 為空時會收到的完整訊息,請使用 ":file!"。有用的值: shm= 不縮寫訊息。 shm=a 縮寫,但不損失資訊。 shm=at 縮寫,並在必要時截斷訊息。
只允許使用可列印的單元格字元,不包括
<Tab>
和逗號(在未來版本中,逗號可能用於分隔顯示在行尾和開頭的部分)。
hl-NonText 高亮顯示群組決定高亮顯示。請注意,showbreak 後面的 Tab 字元會以不同的方式顯示。如果您想要讓
'showbreak' 出現在行號之間,請將 "n" 旗標新增到
'cpoptions'。視窗的區域設定會覆蓋全域設定。如果已設定全域值,而您希望目前視窗中沒有值,請使用 NONE。
setlocal showbreak=NONE
範例:將此選項與
'sidescroll' 和
'listchars' 一起嘗試,如下列範例所示,永遠不要讓游標移動到「extends」字元上
set nowrap sidescroll=1 listchars=extends:>,precedes:<
set sidescrolloff=1
'signcolumn' 'scl' 'signcolumn' 'scl' 字串 (預設值 "auto") 視窗本地 何時以及如何繪製符號欄。 有效值為: "auto" 僅在有符號要顯示時 "auto:[1-9]" 調整大小以容納最多指定數字 (最多 9 個) 的多個符號,例如 "auto:4" "auto:[1-8]-[2-9]" 調整大小以容納最多指定最大數字 (最多 9 個) 的多個符號,同時保留至少指定最小數字 (最多 8 個) 的固定空間。 最小數字應始終小於最大數字,例如 "auto:2-5" "no" 永不顯示 "yes" 始終顯示 "yes:[1-9]" 始終顯示,並為最多指定數字 (最多 9 個) 的符號保留固定空間,例如 "yes:3" "number" 在
'number' 欄中顯示符號。 如果數字欄不存在,則行為類似於 "auto"。
這表示可以辨識美式英語、荷蘭語和醫學詞彙。無法辨識的單字會被反白顯示。單字列表名稱必須由字母數字字元、破折號或底線組成。不應包含逗號或句點。建議使用破折號將兩個字母的語言名稱與規格分開。因此,「en-rare」用於表示罕見的英文單字。地區名稱必須放在最後,格式為「_xx」,其中「xx」是兩個字母的小寫地區名稱。您可以列出多個地區來使用:「en_us,en_ca」同時支援美國和加拿大英語,但不支援澳洲、紐西蘭或英國的特定單字。(
注意:目前 en_au 和 en_nz 字典比 en_ca、en_gb 和 en_us 舊)。如果包含名稱「cjk」,則不會對東亞字元進行拼字檢查。這在編輯同時包含亞洲文字的文本時很有用。請注意,「medical」字典並不存在,它只是一個較長名稱的範例。
E757作為特殊情況,可以按原樣給定 .spl 檔案的名稱。名稱中的第一個「_xx」會被移除並用作地區名稱(_xx 是一個底線,後面跟著兩個字母,然後是非字母)。這主要是為了測試目的。您必須確保使用正確的編碼,Vim 不會檢查它。相關拼字檔案的尋找方式在此說明:
spell-load。
'spelloptions' 'spo' 'spelloptions' 'spo' 字串(預設為 "")緩衝區局部設定。用於拼字檢查的逗號分隔選項列表:camel 當單字為 CamelCased 時,假設「Cased」是單獨的單字:單字中小寫字母後面的每個大寫字元都表示一個新單字的開始。noplainbuffer 只有在啟用
'syntax' 或在緩衝區內設定了 extmark 時,才對緩衝區進行拼字檢查。在這種情況下,只會對緩衝區的指定區域進行拼字檢查。
best 最適合英文的內部方法。尋找像「fast」這樣的變更,並使用一些聽起來類似的評分來改善排序。
double 使用兩種方法並混合結果的內部方法。第一種方法是「fast」,另一種方法計算建議聽起來與錯誤單字的相似程度。這僅在語言指定聲音折疊時才有效。可能很慢且不一定會產生更好的結果。
fast 僅檢查簡單變更的內部方法:字元插入/刪除/交換。對於簡單的輸入錯誤效果很好。
timeout:{millisec} 將搜尋建議的時間限制為 {millisec}
毫秒。適用於以下方法。省略時,限制為 5000。為負數時,沒有限制。
file:{filename} 讀取檔案
{filename}
,該檔案必須有兩欄,以斜線分隔。第一欄包含錯誤的單字,第二欄包含建議的正確單字。範例
theribal/terrible
將其用於常見的錯誤,這些錯誤不會出現在內部方法建議列表的頂部。沒有斜線的行會被忽略,請將其用於註解。第二欄中的單字必須正確,否則將不會使用。如果某個單字目前標記為拼字錯誤,請將該單字新增到「.add」檔案。該檔案適用於所有語言。
只能使用「best」、「double」或「fast」中的一種。其他選項可以以任何順序出現多次。範例
set sps=file:~/.config/nvim/sugg,best,expr:MySuggest()
可能的值為:cursor 維持相同的相對游標位置。screen 將文字保留在相同的螢幕行上。topline 維持相同的頂部行。
對於「screen」和「topline」值,必要時會變更游標位置。在這種情況下,跳躍列表將使用先前的游標位置填入。「screen」在啟用
'wrap' 時,文字並非總是能保留在相同的螢幕行上。
'startofline' 'sol' 'nostartofline' 'nosol' 'startofline' 'sol' 布林值(預設為關閉)全域設定。在「on」時,下面列出的命令會將游標移動到該行的第一個非空白字元。關閉時,游標會保留在相同的欄位中(如果可能)。這適用於以下命令
CTRL-D
、CTRL-U
、CTRL-B
、CTRL-F
、「G」、「H」、「M」、「L」、「gg」
帶有計數的「%」
變更緩衝區的命令(CTRL-^
、:bnext、:bNext 等)
只有行號的 Ex 命令,例如「:25」或「:+」。在變更緩衝區的命令的情況下,游標會放置在上次編輯緩衝區時所在的欄位。
%l 目前繪製行的行號欄 %s 目前繪製行的標記欄 %C 目前繪製行的摺疊欄
注意:也支援 %@ 按一下執行函數項目,但指定函數對於同一欄中的每一列都相同。它不能透過動態
'statuscolumn' 格式切換,處理常式在撰寫時應考慮到這一點。
範例
" Line number with bar separator and click handlers:
set statuscolumn=%@SignCb@%s%=%T%@NumCb@%l│%T
" Line numbers in hexadecimal for non wrapped part of lines:
let &stc='%=%{v:virtnum>0?"":printf("%x",v:lnum)} '
" Human readable line numbers with thousands separator:
let &stc='%{substitute(v:lnum,"\\d\\zs\\ze\\'
. '%(\\d\\d\\d\\)\\+$",",","g")}'
" Both relative and absolute line numbers with different
" highlighting for odd and even relative numbers:
let &stc='%#NonText#%{&nu?v:lnum:""}' .
'%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}' .
'%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}'
警告:此運算式會針對每個螢幕行進行評估,因此定義一個昂貴的運算式可能會對渲染效能產生負面影響。
該選項由以標準文字穿插的 printf 樣式 '%' 項目組成。每個狀態行項目的格式為:%-0{minwid}.{maxwid}{item} 除 {item}
之外的所有欄位都是選用的。單個百分比符號可以寫成「%%」。
如果選項以「%!」開頭,則將其用作運算式,進行評估,並將結果用作選項值。範例
set statusline=%!MyStatusLine()
g:statusline_winid 變數將設定為狀態行所屬視窗的
視窗 ID。結果可以包含也將被評估的 %{} 項目。請注意,「%!」運算式是在目前視窗和緩衝區的上下文中評估的,而 %{} 項目是在狀態行所屬視窗的上下文中評估的。
如果在評估選項時發生錯誤,則會將其設為空白,以避免進一步的錯誤。否則,螢幕更新會循環。如果結果包含不可列印的字元,則結果是不可預測的。
欄位含義
- 左對齊項目。當 minwid 大於項目的長度時,預設為右對齊。0 數字項目中的前導零。被「-」覆寫。minwid 項目的最小寬度,由「-」和「0」設定的填補。值必須小於或等於 50。maxwid 項目的最大寬度。文字項目會在左側截斷為「<」。數字項目將向下移動到 maxwid-2 位數,然後是「>」數字,其中數字是缺少的位數,很像指數符號。item 以下說明的一個字母代碼。
以下說明狀態列中可能出現的項目。每個「項目」的第二個字元表示類型:N 代表數字,S 代表字串,F 代表以下描述的旗標。
不適用
項目意義
f S 緩衝區中檔案的路徑,可以是使用者輸入的路徑或是相對於目前目錄的路徑。F S 緩衝區中檔案的完整路徑。t S 緩衝區中檔案的檔案名稱(尾部)。m F 修改旗標,文字為「[+]」;如果
'modifiable'選項關閉,則為「[-]」。M F 修改旗標,文字為「,+」或「,-」。r F 唯讀旗標,文字為「[RO]」。R F 唯讀旗標,文字為「,RO」。h F 說明緩衝區旗標,文字為「[help]」。H F 說明緩衝區旗標,文字為「,HLP」。w F 預覽視窗旗標,文字為「[Preview]」。W F 預覽視窗旗標,文字為「,PRV」。y F 緩衝區中檔案的類型,例如「[vim]」。請參閱
'filetype'。Y F 緩衝區中檔案的類型,例如「,VIM」。請參閱
'filetype'。q S 「[快速修復列表]」、「[位置列表]」或空白。k S 當使用
:lmap對應時,「b:keymap_name」的值或
'keymap'的值:「<keymap>」。n N 緩衝區編號。b N 游標下字元的值。B N 如上,以十六進位表示。o N 游標下位元組在檔案中的位元組編號,第一個位元組為 1。助記:從檔案開頭的偏移量(加一)。O N 如上,以十六進位表示。l N 行號。L N 緩衝區中的行數。c N 欄號(位元組索引)。v N 虛擬欄號(螢幕欄)。V N 虛擬欄號,表示為 -{num}。如果與 'c' 相等則不顯示。p N 檔案中已處理的行百分比,如同
CTRL-G。P S 顯示視窗中已處理的檔案百分比。這與
'ruler'所描述的百分比類似。長度固定為 3,除非經過翻譯。S S
'showcmd'的內容,請參閱
'showcmdloc'。a S 參數列表狀態,如同預設標題。(
{current}
/
{max}
) 如果參數檔案計數為零或一,則為空白。 { NF 評估「%{」和「}」之間的表達式並替換結果。請注意,在結尾「}」之前沒有「%」。表達式不能包含「}」字元,呼叫函式可以解決這個問題。請參閱下方
stl-%{。
{%
- 這幾乎與「{」相同,只是表達式的結果會重新評估為狀態列格式字串。因此,如果表達式的返回值包含「%」項目,它們將被展開。表達式可以包含「}」字元,表達式的結尾用「%}」表示。例如
func! Stl_filename() abort
return "%t"
endfunc
stl=%{Stl_filename()}
的結果為
"%t"
stl=%{%Stl_filename()%}
的結果為
"目前檔案的名稱"
%} - 「{%」表達式的結尾 ( - 項目群組的開始。可用於設定區段的寬度和對齊方式。必須在某處接著%) 。) - 項目群組的結尾。不允許使用寬度欄位。T N 用於
'tabline':標籤頁 N 標籤的開始。使用 %T 或 %X 結束標籤。使用滑鼠左鍵點擊此標籤會切換到指定的標籤頁,而使用滑鼠中鍵點擊則會關閉指定的標籤頁。X N 用於
'tabline':關閉標籤頁 N 標籤的開始。使用 %X 或 %T 結束標籤,例如:%3Xclose%X。使用 %999X 表示「關閉目前標籤頁」標籤。使用滑鼠左鍵點擊此標籤會關閉指定的標籤頁。@ N 執行函式標籤的開始。使用 %X 或 %T 結束標籤,例如:%10@
[email protected]%X。使用滑鼠點擊此標籤將執行指定的函式:在範例中,當使用滑鼠左鍵在「foo.c」上點擊一次時,將執行
SwitchBuffer(10, 1, 'l', ' ')
表達式。指定的函式會依序接收以下參數:1. minwid 欄位值,如果未指定 N 則為零 2. 偵測多次點擊的滑鼠點擊次數 3. 使用的滑鼠按鈕:「l」、「r」或「m」分別代表左鍵、右鍵或中鍵;不應依賴第三個參數僅為「l」、「r」或「m」:其他包含僅 ASCII 小寫字母的非空字串值也可能適用於其他滑鼠按鈕 4. 按下的修飾鍵:如果按下 shift 修飾鍵,則字串包含「s」,按下 control 則包含「c」,按下 alt 則包含「a」,按下 meta 則包含「m」;目前如果未按下修飾鍵,字串則包含空格,但不應依賴空格的存在或修飾鍵的特定順序:使用
stridx() 來測試是否存在某個修飾鍵;字串保證只包含 ASCII 字母和空格,每個修飾鍵一個字母;可能也會出現「?」修飾鍵,但它的出現是一個錯誤,表示新增了新的滑鼠按鈕識別,但沒有修改對此標籤滑鼠點擊做出反應的程式碼。使用
getmousepos().winid 在指定的函式中取得點擊項目的對應視窗 ID。< - 如果行太長,從何處截斷。預設為從開頭截斷。不允許使用寬度欄位。= - 對齊區段之間的分隔點。每個區段將以相等數量的空格分隔。使用一個 %=,其後面的內容將靠右對齊。使用兩個 %=,則有一個中間部分,其左右兩邊都有空白。不允許使用寬度欄位。# - 設定醒目提示群組。名稱必須跟在後面,然後再次出現 #。因此,針對醒目提示群組 HLname 使用 %#HLname#。也會對非目前視窗的狀態列使用相同的醒目提示。* - 將醒目提示群組設定為 User{N},其中
{N}
取自 minwid 欄位,例如 %1*。使用 %* 或 %0* 還原正常醒目提示。User{N} 和 StatusLine 之間的差異將應用於非目前視窗的狀態列 StatusLineNC。數字 N 必須介於 1 和 9 之間。請參閱
hl-User1..9
當顯示旗標時,如果該旗標緊接著純文字,Vim 會移除開頭的逗號(如果有)。當旗標像以下範例中那樣使用時,這會產生良好的顯示效果。
當群組中的所有項目都變成空字串(即未設定的旗標)且未針對該群組設定 minwid 時,整個群組將變成空的。當未設定任何旗標時,這會使像以下這樣的群組完全從狀態列中消失。
set statusline=...%(\ [%M%R%H]%)...
請注意,每次顯示狀態列時都會評估表達式。
stl-%{ g:actual_curbuf g:actual_curwin 評估 %{} 時,目前的緩衝區和目前視窗將暫時設定為目前正在繪製其狀態列的視窗(和緩衝區)的緩衝區和視窗。表達式將在此環境中評估。變數「g:actual_curbuf」會設定為實際目前緩衝區的
bufnr()
編號,而「g:actual_curwin」會設定為實際目前視窗的
視窗 ID。這些值為字串。
如果您想要狀態列更新時未更新(例如,在設定表達式中使用的變數之後),可以使用 :redrawstatus
強制更新。
所有數字的結果都被視為顯示用的數字。否則,結果會被視為旗標文字,並套用上述規則。
請留意表達式中的錯誤。它們可能會使 Vim 無法使用!如果您遇到困難,請按住「:」或「Q」以取得提示,然後退出並使用「vim --clean」編輯您的 vimrc 或其他任何檔案以使其正常運作。
範例:模擬設定了
'ruler'的標準狀態列
set statusline=%<%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P
類似,但加入游標下字元的 ASCII 值(如「ga」)
set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
顯示位元組計數和位元組值,修改旗標為紅色。
set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'
hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red
如果載入壓縮檔案,則顯示 ,GZ 旗標
set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h...
並定義此函式
function VarExists(var, val)
if exists(a:var) | return a:val | else | return '' | endif
endfunction
'switchbuf' 'swb' 'switchbuf' 'swb' 字串(預設值 "uselast")全域。此選項控制在緩衝區之間切換時的行為。當以下情況發生時會檢查此選項:
使用緩衝區分割命令(例如
:sbuffer、
:sbnext 或
:sbrewind)跳轉至緩衝區時。可能的值(逗號分隔列表): useopen 如果包含此值,則跳轉到目前標籤頁中包含指定緩衝區的第一個開啟視窗(如果有的話)。否則:不檢查其他視窗。 usetab 類似於 "useopen",但也會考慮其他標籤頁中的視窗。 split 如果包含此值,則在為顯示錯誤的
quickfix 命令載入緩衝區之前分割目前的視窗。否則:不分割,使用目前視窗(在 quickfix 視窗中使用時:先前使用的視窗或分割,如果沒有其他視窗)。 vsplit 就像 "split" 但垂直分割。 newtab 就像 "split",但開啟一個新的標籤頁。當兩者都存在時,會覆蓋 "split"。 uselast 如果包含此值,則在使用
quickfix 命令跳轉至錯誤時,跳轉到先前使用的視窗。如果視窗啟用了
'winfixbuf',則目前不會將
'switchbuf' 應用於分割視窗。
'syntax' 'syn' 'syntax' 'syn' 字串(預設值 "")緩衝區局部
local-noglobal。設定此選項後,會載入具有此名稱的語法,除非已使用 ":syntax off" 關閉語法突出顯示。否則,此選項並不總是反映目前的語法(變數 b:current_syntax 會反映)。此選項在 modeline 中最有用,適用於未自動識別語法的檔案。範例,在 IDL 檔案中
/* vim: set syntax=idl : */
當值中出現點時,這會分隔兩個檔案類型名稱。範例
/* vim: set syntax=c.doxygen : */
這會先使用 "c" 語法,然後使用 "doxygen" 語法。請注意,第二個語法必須準備好作為附加元件載入,否則會被跳過。可能會出現多個點。若要關閉目前檔案的語法突出顯示,請使用
set syntax=OFF
實際設定
'syntax' 選項時,會觸發語法自動命令事件,並將該值作為引數。此選項不會複製到另一個緩衝區,與
'cpoptions' 中的 's' 或 'S' 旗標無關。只能使用字母數字字元、'.'、'-' 和 '_'。
可能的值(逗號分隔列表): left 如果包含此值,則移至上一個標籤頁而不是下一個標籤頁。 uselast 如果包含此值,則盡可能移至先前使用的標籤頁。此選項的優先順序高於其他選項。
請記住,只有一個標籤頁是目前的標籤頁,其他標籤頁是不可見的,而且您無法跳轉至其視窗。
注意:將
'tabstop' 設定為 8 以外的任何值可能會導致您的檔案在許多地方顯示不正確。該值必須大於 0 且小於 10000。
當 Vim 在檔案開頭找到一行指示該檔案未排序時,無論如何都會對一個檔案執行線性搜尋
!_TAG_FILE_SORTED 0 /some comment/
[「0」前後的空白必須是單個 <Tab>
]
當二元搜尋在
「tags」 中列出的任何檔案中都找不到相符項目,且忽略大小寫或使用模式而非一般的標籤名稱時,會使用線性搜尋重新嘗試。未排序標籤檔案中的標籤,以及大小寫不同的比對,只會在重新嘗試時找到。
如果標籤檔案指出它是以忽略大小寫排序的,則在忽略大小寫時,可以避免第二次的線性搜尋。請在「!_TAG_FILE_SORTED」行中使用值「2」來表示此情況。大多數的 Unix 系統中,可以使用「sort」的 -f 開關,以忽略大小寫的方式排序標籤檔案,例如指令:「sort -f -o tags tags」。對於 Universal ctags 和 Exuberant ctags 5.x 或更高版本 (至少 5.5),也可以使用 --sort=foldcase 開關。請注意,大小寫必須摺疊為大寫才能正常運作。
當
「tagbsearch」 關閉時,當存在完全符合的標籤時,標籤搜尋速度較慢,但當不存在完全符合的標籤時,搜尋速度會更快。未排序標籤檔案中的標籤可能只會在
「tagbsearch」 關閉時找到。當標籤檔案未排序,或以錯誤的方式排序 (不是根據 ASCII 位元組值排序) 時,
「tagbsearch」 應關閉,或必須將上面給出的行包含在標籤檔案中。此選項不會影響尋找所有符合標籤的命令 (例如,命令列完成和「:help」)。
Nvim 會自動嘗試判斷主機終端是否支援 24 位元色彩,如果支援,則會啟用此選項 (除非使用者明確停用)。
BS 退格鍵
HT TAB
FF 表單饋送
ESC 逸出鍵
DEL 刪除鍵
C0 其他控制字元,不包括換行和歸位 < ' '
C1 控制字元 0x80...0x9F
若要在檔案名稱中包含逗號,請在其前面加上反斜線。逗號後的空格會被忽略,否則空格會包含在檔案名稱中。有關使用反斜線,請參閱
option-backslash。當從清單中新增或移除目錄時,建議使用
:set+= 和
:set-=。這樣可以避免在未來版本使用其他預設值時發生問題。出於安全考量,此選項中不能使用反引號。
當此選項包含 printf 樣式的 '%' 項目時,它們會根據
'statusline' 所使用的規則展開。如果它包含無效的 '%' 格式,該值會按原樣使用,且在設定該值時不會給出錯誤或警告。當
'modelineexpr' 關閉時,此選項無法在 modeline 中設定。
範例
auto BufEnter * let &titlestring = hostname() .. "/" .. expand("%:p")
set title titlestring=%<%F%=%l/%L-%P titlelen=70
'titlelen' 的值用於在可用空間的中間或右側對齊項目。有些人喜歡將檔名放在最前面
set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)
請注意 "%{ }" 和一個表示式的使用,以取得不包含檔名的檔案路徑。 "%( %)" 結構用於僅在需要時加入分隔空格。
注意:在
'titlestring' 中使用特殊字元可能會導致顯示亂碼 (例如,當它包含 CR 或 NL 字元時)。
例如,如果收到
<Esc>
( \x1b 位元組) 且
'ttimeout' 設定為開啟,Nvim 會等待
'ttimeoutlen' 毫秒,讓終端機完成按鍵碼序列。如果在逾時之前沒有收到輸入,則會假定只有單個
<Esc>
。許多 TUI 游標按鍵碼都以
<Esc>
開頭。
在非常慢的系統上,這可能會失敗,導致游標按鍵有時無法運作。如果您發現此問題,您可以執行 ":set ttimeoutlen=9999"。Nvim 會等待 <Esc>
之後的下一個字元到達。
'undodir' 'udir' E5003 'undodir' 'udir' 字串 (預設為 "$XDG_STATE_HOME/nvim/undo//") 全域 以逗號分隔的 undo 檔案目錄名稱清單。有關格式的詳細資訊,請參閱
'backupdir'。"." 表示使用該檔案的目錄。"file.txt" 的 undo 檔案名稱為 ".file.txt.un~"。對於其他目錄,檔案名稱是編輯檔案的完整路徑,其中路徑分隔符號會被 "%" 取代。寫入時:會使用第一個存在的目錄。"." 永遠有效,"." 後面的目錄將不會用於寫入。如果沒有任何目錄存在,Nvim 將嘗試建立清單中的最後一個目錄。讀取時,會嘗試所有項目以尋找 undo 檔案。使用第一個存在的 undo 檔案。當無法讀取時,會給出錯誤訊息,且不會使用其他項目。請參閱
undo-persistence。基於安全考量,此選項無法從
modeline 或
sandbox 中設定。
但是,您也可以透過在
'cpoptions' 中包含 'u' 旗標來實現 Vi 相容性,且仍然能夠使用
CTRL-R
來重複 undo。另請參閱
undo-two-ways。設定為 -1 表示完全沒有 undo。您可能只希望對當前緩衝區執行此操作
setlocal ul=-1
這有助於在單個變更用盡記憶體時。
當要使用全域值時,本地值會設定為 -123456。
當儲存 undo 以進行重新載入時,不會讀取任何 undo 檔案。
請注意,這會導致整個緩衝區儲存在記憶體中。如果您的記憶體不足,請將此選項設定為較低的值。
例如,在編輯組語檔案時,其中語句從第 9 欄開始,註解從第 41 欄開始,使用以下方法可能會很有用
set varsofttabstop=8,32,8
這會將軟 Tab 停止點設定為 8 和 8 + 32 個空格,以及之後每欄額外 8 個空格。
這會使第一個 tab 寬度為 4 個空格,第二個為 20 個空格,第三個為 10 個空格,之後所有的 tab 皆為 8 個空格寬。
在等級 1 時,會啟用 Lua 腳本中選項、映射等的追蹤;為了效能考量,當
'verbose' 為 0 時,Lua 腳本不會被追蹤。
如果大於或等於指定的等級,Nvim 會產生以下訊息
等級 訊息
---------------------------------------------------------------------- 1 啟用 Lua 追蹤 (見上文)。不產生訊息。 2 當一個檔案被 ":source" 時,或
shada 檔案被讀取或寫入時。 3 UI 資訊,終端機功能。 4 Shell 命令。 5 每個搜尋過的 tags 檔案和 include 檔案。 8 執行自動命令群組的檔案。 9 執行的自動命令。 11 在路徑中尋找項目。 12 Vimscript 函數呼叫。 13 當拋出、捕獲、完成或丟棄異常時。 14 在 ":finally" 子句中任何待處理的事項。 15 來自腳本的 Ex 命令 (截斷至 200 個字元)。 16 Ex 命令。
'viewoptions' 'vop' 'viewoptions' 'vop' 字串 (預設為 "folds,cursor,curdir") 全域 變更
:mkview 命令的效果。它是一個以逗號分隔的單字列表。每個單字都會啟用儲存和還原某些內容
單字 儲存和還原
cursor 檔案和視窗中的游標位置 curdir 如果使用
:lcd 設定的本機目前目錄 folds 手動建立的折疊、開啟/關閉的折疊和本機折疊選項 options 視窗或緩衝區的本機選項和映射 (非本機選項的全域值) localoptions 與 "options" 相同 slash
已過時 永遠啟用。在檔名中使用 "/"。 unix
已過時 永遠啟用。使用 "\n" 行尾符號。
'virtualedit' 've' 'virtualedit' 've' 字串 (預設為 "") 全域或本機於視窗
global-local 以逗號分隔的單字列表: block 允許在可視區塊模式下進行虛擬編輯。 insert 允許在插入模式下進行虛擬編輯。 all 允許在所有模式下進行虛擬編輯。 onemore 允許游標移動到剛好超過行尾的位置 none 當作為本機值使用時,即使設定了全域值,也不允許虛擬編輯。當作為全域值使用時,"none" 與 "" 相同。 NONE "none" 的替代拼寫。
虛擬編輯表示游標可以定位在沒有實際字元的位置。這可能是在 tab 的中間或在行尾之外。這對於在可視模式下選取矩形和編輯表格很有用。"onemore" 並非相同,它只允許游標移動到剛好在該行的最後一個字元之後。這使某些命令更一致。先前,如果該行為空,則游標始終位於行尾之後。但它遠非與 Vi 相容。它也可能會破壞某些外掛程式或 Vim 腳本。例如,因為
l 可以將游標移動到最後一個字元之後。請謹慎使用!使用
$
命令會移動到該行的最後一個字元,而不是其後。這實際上可能會將游標向左移動!
g$
命令會移動到螢幕行的末尾。將 "all" 與 "onemore" 結合使用沒有意義,但您不會收到警告。當與其他單字結合使用時,"none" 會被忽略。
'whichwrap' 'ww' 'whichwrap' 'ww' 字串 (預設為 "b,s") 全域 允許指定的左右移動游標的按鍵,當游標位於該行的第一個/最後一個字元時,移動到上一/下一行。串連字元以允許這些按鍵執行此操作
字元 按鍵 模式
b
<BS>
一般和可視 s
<Space>
一般和可視 h "h" 一般和可視 (不建議使用) l "l" 一般和可視 (不建議使用) <
<Left>
一般和可視 >
<Right>
一般和可視 ~ "~" 一般 [
<Left>
插入和取代 ]
<Right>
插入和取代 例如
set ww=<,>,[,]
僅在使用游標鍵時才允許換行。當移動鍵與刪除或變更運算子結合使用時,<EOL>
也計為一個字元。當游標跨越行尾時,這會使 "3h" 與 "3dh" 不同。這也適用於 "x" 和 "X",因為它們的作用與 "dl" 和 "dh" 相同。如果您使用此功能,您可能還需要使用映射 ":map <BS>
X" 來使退格鍵刪除游標前面的字元。當包含 'l' 並且它在行尾 (非空行) 的運算子之後使用時,它不會移動到下一行。這使得 "dl"、"cl"、"yl" 等可以正常工作。
然後在輸入 :ss 之後,您可以使用 CTRL-P
& CTRL-N
。
當選單啟用時,這些按鍵有特殊含義:CTRL-P
- 前往上一個條目 CTRL-N
- 前往下一個條目 <Left>
<Right>
- 選擇上一個/下一個匹配項(類似於 CTRL-P
/CTRL-N) <PageUp>
- 選擇幾個條目之前的匹配項 <PageDown>
- 選擇幾個條目之後的匹配項 <Up>
- 在檔案名稱/選單名稱補全中:向上移動到父目錄或父選單。 <Down>
- 在檔案名稱/選單名稱補全中:向下移動到子目錄或子選單。 <CR>
- 在選單補全中,當游標正好在點號之後時:移動到子選單。 CTRL-E
- 結束補全,回到選擇匹配項之前的狀態。 CTRL-Y
- 接受目前選取的匹配項並停止補全。
如果您希望
<Left>
和
<Right>
移動游標而不是選擇不同的匹配項,請使用此設定
cnoremap <Left> <Space><BS><Left>
cnoremap <Right> <Space><BS><Right>
每個部分都包含一個以冒號分隔的列表,其中包含以下可能的值: "" 只補全第一個匹配項。 "full" 補全下一個完整匹配項。在最後一個匹配項之後,將使用原始字串,然後再次使用第一個匹配項。如果啟用了
'wildmenu',也會啟動它。"longest" 補全到最長的共同字串。如果這沒有產生更長的字串,則使用下一部分。 "list" 當有多個匹配項時,列出所有匹配項。"lastused" 當補全緩衝區名稱且有多個緩衝區匹配時,按上次使用時間(而非目前緩衝區)對緩衝區進行排序。當只有單個匹配項時,在所有情況下都會完全補全。
有用的冒號分隔值範例:"longest:full" 類似於 "longest",但如果啟用了
'wildmenu',也會啟動它。不會補全到下一個完整匹配項。"list:full" 當有多個匹配項時,列出所有匹配項並補全第一個匹配項。"list:longest" 當有多個匹配項時,列出所有匹配項並補全到最長的共同字串。"list:lastused" 當有多個緩衝區匹配時,列出所有匹配項並按上次使用時間(而非目前緩衝區)對緩衝區進行排序。
補全第一個完整匹配項、下一個匹配項等等(預設)。
set wildmode=longest,full
補全最長的共同字串,然後補全每個完整匹配項
set wildmode=list:full
列出所有匹配項並補全每個完整匹配項
set wildmode=list,full
列出所有匹配項而不補全,然後補全每個完整匹配項
set wildmode=longest,list
'winaltkeys' 'wak' 'winaltkeys' 'wak' 字串(預設為 "menu")僅在 Win32 中使用。某些 GUI 版本允許使用 ALT 鍵與選單中帶有底線的字元組合來存取選單項目。這與 ALT 鍵用於對應和輸入特殊字元衝突。此選項指定要執行的操作:no 不要將 ALT 鍵用於選單。可以對應 ALT 鍵組合,但沒有自動處理。yes ALT 鍵處理由視窗系統完成。無法對應 ALT 鍵組合。menu 在組合字元為選單快捷鍵的情況下使用 ALT 鍵,將由視窗系統處理。可以對應其他按鍵。如果透過從
'guioptions' 中排除 'm' 來停用選單,則永遠不會將 ALT 鍵用於選單。此選項不適用於 Win32 上的
<F10>
。
垂直分隔符號的反白顯示由分隔符號左側的視窗決定。索引標籤頁的
'tabline' 反白顯示由索引標籤頁的最後一個焦點視窗決定。彈出式選單的反白顯示由目前視窗決定。無法覆寫訊息區域的反白顯示。
範例:為非目前的視窗顯示不同的顏色
set winhighlight=Normal:MyNormal,NormalNC:MyNormalNC
'winminwidth' 'wmw' 'winminwidth' 'wmw' 數字 (預設值為 1) 全域。當視窗不是目前視窗時,其最小寬度。這是一個硬性最小值,視窗永遠不會變得更小。當設定為零時,視窗可能會在必要時被「壓縮」至零欄 (即只有一個垂直分隔線)。當它們變為活動狀態時,它們將恢復到至少一行 (因為游標必須有地方可去)。使用
'winwidth' 來設定目前視窗的最小寬度。此選項僅在縮小視窗時檢查。不要使用過大的數字,當開啟多個視窗時,會導致錯誤。0 到 12 的值是合理的。
'wrap' 'nowrap' 'wrap' 布林值 (預設為開啟) 視窗本地選項。此選項會變更文字的顯示方式。它不會變更緩衝區中的文字,請參閱
'textwidth'。當開啟時,長度超過視窗寬度的行將會換行,並在下一行繼續顯示。當關閉時,行將不會換行,並且只會顯示長行的部分內容。當游標移動到未顯示的部分時,螢幕將會水平捲動。如有必要,該行將在單字中間斷開。請參閱
'linebreak' 以在單字邊界處斷開。為了使水平捲動更有用,請嘗試以下操作
set sidescroll=5
set listchars+=precedes:<,extends:>