选项
Nvim :help
页面,生成 来自 源代码 使用 tree-sitter-vimdoc 解析器。
选项
有关选项的概述,请参见 quickref.txt
选项列表。
Vim 有许多内部变量和开关,可以设置它们以实现特殊效果。这些选项有三种形式:布尔值只能是开或关
布尔值 切换 数字具有数值 字符串具有字符串值
:se :set :se[t][!] 显示所有与默认值不同的选项。当存在 [!] 时,每个选项都在单独的一行上。
:se[t][!] all 显示所有选项。当存在 [!] 时,每个选项都在单独的一行上。
:se[t] {option}
切换选项:设置,打开它。数字选项:显示值。字符串选项:显示值。
:se[t] no{option} 切换选项:重置,关闭它。
:set-args :set= E487 E521 :se[t]
{option}
={value} 或 :se[t]
{option}
:{value} 将字符串或数字选项设置为
{value}
。对于数值选项,值可以以十进制、十六进制(以 0x 开头)或八进制(以 '0' 或 '0o' 开头)给出。可以通过键入
'wildchar' 插入旧值(默认情况下,这是一个
<Tab>
)。许多具有固定语法的字符串选项也支持完成已知值。请参阅
命令行完成 和
完成设置选项。
{option}
和 '=' 之间的空格是允许的,并将被忽略。'=' 和
{value}
之间的空格是不允许的。请参阅
选项反斜杠 以了解如何在
{value}
中使用空格和反斜杠。
:se[t]
{option}
+={value}
:set+=将
{value}
添加到数字选项,或将
{value}
附加到字符串选项。当选项是逗号分隔列表时,将添加逗号,除非该值为空。如果选项是标志列表,则将删除多余的标志。当添加已经存在的标志时,选项值不会改变。另请参阅上面的
:set-args。
:se[t]
{option}
^={value}
:set^=将
{value}
乘以数字选项,或将
{value}
预置到字符串选项。当选项是逗号分隔列表时,将添加逗号,除非该值为空。另请参阅上面的
:set-args。
:se[t]
{option}
-={value}
:set-=从数字选项中减去
{value}
,或者从字符串选项中删除
{value}
(如果存在)。如果在字符串选项中找不到
{value}
,则不会出现错误或警告。当选项是逗号分隔列表时,将删除逗号,除非选项变为空。当选项是标志列表时,
{value}
必须与它们在选项中出现的完全相同。一次删除一个标志以避免问题。可以通过键入
'wildchar' 插入来自逗号分隔列表或标志列表的各个值。请参阅
完成设置选项。另请参阅上面的
:set-args。
":set" 的
{option}
参数可以重复。例如
:set ai nosi sw=3 ts=3
如果在某个参数中出现错误,将给出错误消息,并将忽略以下参数。
shiftwidth=4
上次从模式行第 1 行设置
cindent
上次从 /usr/local/share/vim/vim60/ftplugin/c.vim 第 30 行设置
这仅在请求特定选项值时执行,而不是针对 ":verbose set all" 或没有参数的 ":verbose set"。当手动设置选项时,不会出现“Last set”消息。当在执行函数、用户命令或自动命令时设置选项时,将报告定义它的脚本。一些特殊文本
上次从模式行第 1 行设置
选项是在
模式行 中设置的。
上次从 --cmd 参数设置
选项是使用命令行参数
--cmd 或 + 设置的。
上次从 -c 参数设置
选项是使用命令行参数
-c、+、
-S 或
-q 设置的。
上次从环境变量设置
选项是从 $VIMINIT 设置的。
上次从错误处理程序设置
在评估它导致错误时,选项被清除。
option-backslash 要在字符串选项值中包含空格,它必须以反斜杠开头。要包含反斜杠,您必须使用两个。实际上,这意味着选项值中的反斜杠数量减半(向下取整)。在选项
'path'、
'cdpath' 和
'tags' 中,空格必须以三个反斜杠开头,因为它们可以由逗号或空格分隔。逗号分隔的选项(如
'backupdir' 和
'tags')也需要用两个反斜杠转义逗号,而对于非逗号分隔的选项(如
'makeprg')则不需要。当使用
:let 和
字面量字符串 设置选项时,您需要使用少一层反斜杠。以下是一些示例
: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!)
对于第一个,开头将被保留,但对于第二个,反斜杠将减半。这确保了它在您希望反斜杠减半和您希望保留反斜杠时都有效。第三个给出可能不是您想要的结果。避免使用它。
添加选项标志 删除选项标志 E539一些选项是标志列表。当您要向此类选项添加标志时,不改变现有的标志,您可以这样做
:set guioptions+=a
从选项中删除标志,如下所示
:set guioptions-=a
这将从
'guioptions' 中删除 'a' 标志。请注意,您应该一次添加或删除一个标志。如果
'guioptions' 的值为 "ab",使用 "set guioptions-=ba" 将不起作用,因为字符串 "ba" 不存在。
:set_env 扩展环境 扩展环境变量 特定字符串选项中的环境变量将被扩展。如果环境变量存在,则 '$' 和后面的环境变量名称将被替换为其值。如果它不存在,则 '$' 和名称不会被修改。任何非标识符字符(不是字母、数字或 '_')都可以在环境变量名称后面。该字符和后面的内容将附加到环境变量的值。示例
: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
现在,
'list' 选项也将设置在 "two" 中,因为使用 ":set list" 命令,您也设置了全局值。
:set nolist
:e one
:setlocal list
:e two
现在
'list' 选项没有设置,因为 ":set nolist" 重置了全局值,":setlocal list" 仅改变了局部值,而 ":e two" 获取了全局值。请注意,如果您接下来执行以下操作
:e one
您将恢复
'list' 的值,因为它是在您上次编辑 "one" 时使用的值。窗口的本地选项会为每个缓冲区记住。这也会在缓冲区未加载时发生,但在缓冲区被清除时
: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" 的行为可能会有所不同。
一些选项的值,例如
'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}
,但前提是在(嵌套)autocommands 序列中尚未完成此操作。这是以下操作的简写
:if !did_filetype()
: setlocal filetype={filetype}
:endif
此命令在 filetype.vim 文件中使用,以避免两次设置
'filetype' 选项,导致加载不同的设置和语法文件。
option-window optwin :bro[wse] se[t]
:set-browse :browse-set :opt :options :opt[ions] 打开一个窗口,用于查看和设置所有选项。选项按功能分组。为每个选项提供简短的帮助。在简短的帮助上按
<CR>
以打开一个帮助窗口,其中包含更多关于该选项的帮助。修改选项的值,并在 "set" 行上按
<CR>
设置新值。对于窗口和缓冲区特定的选项,将使用最后一个访问的窗口来设置选项值,除非这是一个帮助窗口,在这种情况下,将使用帮助窗口下面的窗口(跳过选项窗口)。
$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")')
尽管 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:" 等普通词误识别为 modeline 的可能性。有一个例外:"vi:" 和 "vim:" 也可以位于行的开头(为了与版本 3.0 兼容)。在行的开头使用 "ex:" 将被忽略(这可能是 "example:" 的简写)。
如果 modeline 在 modeline 中被禁用,则随后出现的 modelines 将被忽略。这样可以允许在每个文件的基础上关闭 modeline。当一行看起来像 modeline 但实际上不是时,这很有用。例如,最好在包含 "vim:" 等字符串的 YAML 文件的开头使用
# vim: nomodeline
以避免误识别 modeline。如果存在任何 modeline 禁用后的同一行上的后续选项,则仍然会对这些选项进行计算(但您通常不会有任何选项)。
modeline-local 这些选项的设置方式与“:setlocal”类似:新值只应用于包含文件的缓冲区和窗口。虽然可以从模式行设置全局选项,但这并不常见。如果您打开了两个窗口,并且其中的文件将相同的全局选项设置为不同的值,则结果取决于最后打开的窗口。
当编辑一个已加载的文件时,只使用来自模式行的窗口本地选项。因此,如果您在打开文件后手动更改了缓冲区本地选项,那么如果您在另一个窗口中编辑相同的缓冲区,它将不会被更改。但窗口本地选项将被设置。
模式行版本 如果模式行只用于某些版本的 Vim,则可以在使用“vim:”或“Vim:”的地方指定版本号:vim{vers}: 版本
{vers}
或更高版本 vim<{vers}: 版本低于
{vers}
vim={vers}: 版本
{vers}
vim>{vers}: 版本高于
{vers}
{vers}
为 Vim 7.0 的 700(主版本乘以 100 加上次版本)。例如,要仅对 Vim 7.0 使用模式行
/* vim700: set foldmethod=marker */
要对版本 7.2 之后的 Vim 使用模式行
/* vim>702: set cole=2: */
“vim”和“:”之间不能有空格。如果
{vers}
不适合整数,则忽略模式行。
请注意,对于第一种形式,行中其余部分都被使用,因此像这样的行
/* vi:ts=4: */
将为尾部的“*/”给出错误消息。此行可以正常使用
/* vi:set ts=4: */
如果检测到错误,则跳过该行中的其余部分。
如果您想在 set 命令中包含“:”,请在它前面加上“\”。冒号前面的反斜杠将被删除。例如
/* vi:set fillchars=stl\:^,vert\:\|: */
这将
'fillchars' 选项设置为“stl:^,vert:\|”。冒号前只删除单个反斜杠。因此要包含“\:” 您必须指定“\\:”。
E992出于安全原因,不支持除“set”以外的其他命令(有人可能会创建带有模式行的特洛伊木马文本文件)。并且并非所有选项都可以设置。对于某些选项,会设置一个标志,以便在使用该值时,
沙箱 会生效。某些选项只能在
'modelineexpr' 设置的情况下从模式行设置(默认情况下关闭)。
尽管如此,模式行始终存在造成麻烦的小风险。例如,当某个恶作剧者将
'textwidth' 设置为 5 时,您所有的行都将意外地被换行。因此,在编辑不可信文本之前,请禁用模式行。例如,邮件 ftplugin 就会这样做。
提示:如果您想执行除设置选项以外的操作,可以定义一个自动命令来检查文件是否存在特定字符串。例如
au BufReadPost * if getline(1) =~ "VAR" | call SetVar() | endif
并定义一个函数 SetVar() 来对包含“VAR”的行执行某些操作。
在下面的列表中,所有选项都以完整名称和缩写形式(如果有)列出。两种形式都可以使用。
在本文档中,当布尔选项被“设置”时,表示输入“:set option”。当选项被“重置”时,表示使用“:set nooption”。
大多数选项在所有窗口和缓冲区中都是相同的。有一些选项是特定于在窗口中显示文本的方式的。这些选项可以在每个窗口中设置为不同的值。例如,
'list' 选项可以在一个窗口中设置,在另一个窗口中重置,以便同时查看两种类型的视图。有一些选项是特定于某个文件的。这些选项可以在每个文件或缓冲区中具有不同的值。例如,
'textwidth' 选项可以为普通文本文件设置为 78,为 C 程序设置为 0。
全局 所有缓冲区和窗口的单个选项 窗口本地 每个窗口都有该选项的自己的副本 缓冲区本地 每个缓冲区都有该选项的自己的副本
创建新窗口时,当前活动窗口中的选项值将用作窗口特定选项的默认值。对于缓冲区特定选项,这取决于
'cpoptions' 选项中的 's' 和 'S' 标志。如果包含 's'(默认情况下包含),则在首次进入缓冲区时,将从当前活动缓冲区复制缓冲区选项的值。如果包含 'S',则每次进入缓冲区时都会复制选项,这几乎等同于拥有全局选项。如果 's' 和 'S' 不存在,则在创建缓冲区时,将从当前活动缓冲区复制选项。
并非所有选项在所有版本中都受支持。这取决于支持的功能,有时还取决于系统。在下面的花括号中会对此进行说明。当选项不受支持时,仍然可以设置它而不会出现错误,这被称为隐藏选项。但是,您无法获取隐藏选项的值,因为它不会被存储。
要测试选项“foo”是否可以使用“:set”进行设置,请使用以下方法
if exists('&foo')
这对于隐藏选项也返回 true。要测试选项“foo”是否真的受支持,请使用以下方法
if exists('+foo')
目前有两个可能的值: "single": 使用与 US-ASCII 字符相同的宽度。这是大多数用户所期望的。 "double": 使用 ASCII 字符的两倍宽度。
E834 E835 如果
'listchars' 或
'fillchars' 包含双宽度字符,则无法使用“double”值。在调用 setcellwidths() 时,也可能会出现这些错误。
有许多 CJK 字体,其用于这些字符的字形宽度完全基于它们在传统/传统 CJK 编码中的字节数。在这些编码中,欧元、注册符号、希腊/西里尔字母用两个字节表示,因此这些字体对它们具有“宽”字形。这也适用于用于在文本文件中创建表格的一些线条绘制字符。因此,当使用 CJK 字体来渲染 GUI Vim 或者 Vim 在使用 CJK 字体的终端(模拟器)中运行(或者 Vim 在使用“-cjkwidth”选项调用的 xterm 中运行),此选项应设置为“double”才能使 Vim 感知的宽度与字体中字形的宽度相匹配。也许在 CJK MS-Windows 下,当系统区域设置为 CJK 区域设置之一时,也必须将其设置为“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 或
sandbox 中设置。
如果您想保留大量备份,可以使用 BufWritePre 自动命令在写入文件之前更改
'backupext' 以包含时间戳。
au BufWritePre * let &bex = '-' .. strftime("%Y%b%d%X") .. '~'
警告: 没有备份文件意味着当 Vim 无法正确写入您的缓冲区,然后出于某种原因,Vim 退出时,您将丢失原始文件和您正在写入的内容。只有在您不介意丢失文件的情况下才禁用备份。
请注意,环境变量不会被展开。如果您想使用 $HOME,则必须显式地展开它,例如
let &backupskip = escape(expand('$HOME'), '\') .. '/tmp/*'
这对于微调插入模式下响铃的时间非常有用。对于普通模式和 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 不会检查文件的 timestamps,如果文件被其他程序修改,这将不会被注意到。
"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' string (默认 "internal,keepascii") 全局 指定关于更改字母大小写的详细信息。它可能包含以下单词,用逗号隔开: internal 使用内部大小写映射函数,当前区域设置不会更改大小写映射。当 "internal" 被省略时,如果可用,则使用 towupper() 和 towlower() 系统库函数。 keepascii 对于 ASCII 字符 (0x00 到 0x7f),使用 US 大小写映射,当前区域设置无效。这可能只对土耳其语有影响。
'cdpath' 'cd' E344 E346 'cdpath' 'cd' string (默认等效于 $CDPATH 或 ",,") 全局 这是一个目录列表,当使用
:cd、
:tcd 和
:lcd 命令时会搜索这些目录,前提是正在搜索的目录具有相对路径,而不是以 "/"、"./ "或 "../" 开头的绝对部分,此时不会使用
'cdpath' 选项。
'cdpath' 选项的值与
'path' 的形式和语义相同。另请参见
file-searching。默认值取自 $CDPATH,并在前面添加 "," 以便首先在当前目录中查找。如果从 $CDPATH 获取的默认值不是你想要的,请将以下命令的修改版本包含在你的 vimrc 文件中以覆盖它
let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
'cedit'
'cedit' string (默认
CTRL-F
) 全局 在命令行模式中用于打开命令行窗口的键。只允许使用不可打印的键。该键可以指定为单个字符,但很难输入。首选方法是使用
key-notation(例如
<Up>
、
<C-F>
)或以脱字符号开头的字母(例如
^F
代表
CTRL-F
)。示例
set cedit=^Y
set cedit=<Esc>
相关的 Vim 变量是: v:charconvert_from 当前编码的名称 v:charconvert_to 目标编码的名称 v:fname_in 输入文件的名称 v:fname_out 输出文件的名称 请注意,v:fname_in 和 v:fname_out 永远不会相同。
否则,将在设置选项的脚本的上下文中评估该表达式,因此脚本局部项可用。
clipboard-unnamedplus unnamedplus "unnamed" 标志的变体,它使用剪贴板寄存器 "+" (
quoteplus) 而不是寄存器 "*",用于所有通常使用未命名寄存器进行的 yank、删除、更改和 put 操作。当 "unnamed" 也包含在选项中时,yank 和删除操作(但不包括 put)还将把文本复制到寄存器 "*" 中。参见
clipboard。
警告: 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
:autocmd 不会执行,这可能导致某些文件(例如 gzip 文件)出现意外补全。未加载的缓冲区不会为整行补全扫描。
menuone 即使只有一个匹配项,也使用弹出菜单。当有关于匹配项的附加信息时,这很有用,例如它来自哪个文件。
longest 仅插入匹配项的最长公共文本。如果显示了菜单,您可以使用
CTRL-L
添加更多字符。是否忽略大小写取决于补全的类型。对于缓冲区文本,使用
'ignorecase' 选项。
preview 在预览窗口中显示有关当前选定补全的额外信息。仅与 "menu" 或 "menuone" 结合使用。
popup 在弹出窗口中显示有关当前选定补全的额外信息。仅与 "menu" 或 "menuone" 结合使用。覆盖 "preview"。
noinsert 在用户从菜单中选择匹配项之前,不要插入任何文本。仅与 "menu" 或 "menuone" 结合使用。如果存在 "longest",则无效。
noselect 不要在菜单中选择匹配项,强制用户从菜单中选择一个匹配项。仅与 "menu" 或 "menuone" 结合使用。
fuzzy 为补全候选启用
fuzzy-matching。这允许更灵活、更直观的匹配,其中可以跳过字符,即使没有键入精确的序列,也可以找到匹配项。这只会影响如何从备选列表中减少补全候选,而不会影响如何收集候选(使用不同的补全类型)。
'v' 应用于可视区域中的所有行,而不仅仅是光标。一个有用的值是 "nc"。这在帮助文件中使用。只要您四处移动,文本就会隐藏,但当开始插入文本或选择可视区域时,隐藏的文本就会显示,这样您就可以看到自己在做什么。请记住,光标位置并不总是显示的位置。例如,当垂直移动时,它可能会更改列。
值 效果
0 正常显示文本 1 每个隐藏文本块用一个字符替换。如果语法项没有定义自定义替换字符(参见
:syn-cchar),则使用在
'listchars' 中定义的字符。它以“Conceal”突出显示组突出显示。 2 隐藏文本完全隐藏,除非它定义了自定义替换字符(参见
:syn-cchar)。 3 隐藏文本完全隐藏。
包含行为
cpo-a a 包含时,带有文件名参数的“:read”命令将为当前窗口设置备用文件名。
cpo-AA 包含时,带有文件名参数的“:write”命令将为当前窗口设置备用文件名。
cpo-bb “\|”在“:map”命令中被识别为映射命令的结尾。‘\’包含在映射中,‘|’之后的文本被解释为下一个命令。使用
CTRL-V
而不是反斜杠将‘|’包含在映射中。适用于所有映射、缩写、菜单和 autocmd 命令。另请参阅
map_bar。
cpo-BB 反斜杠在映射、缩写、用户命令和菜单命令的“to”部分中没有特殊含义。删除此标志才能像
CTRL-V
一样使用反斜杠。例如,命令“:map X \<Esc>”将 X 映射到:‘B’ 包含:“\^["(^[ 是一个真正的
<Esc>
) ‘B’ 不包含:“<Esc>” (5 个字符)
cpo-cc 搜索从光标位置处任何匹配的结尾处继续,但不会超过下一行的开头。当不存在时,搜索从光标位置继续一个字符。使用 ‘c’,“abababababab”在重复 “/abab” 时只得到三个匹配,不使用 ‘c’ 则有五个匹配。
cpo-CC 不要连接以反斜杠开头的源代码行。参见
line-continuation。
cpo-dd 在
'tags' 选项中使用“./”并不意味着使用相对于当前文件的标签文件,而是使用当前目录中的标签文件。
cpo-DD 在 Normal 模式命令(带有字符参数,如
r、
f 和
t)之后,不能使用
CTRL-K
输入二合字。
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 在为
'autoindent' 插入缩进后立即将光标向上或向下移动时,不要删除缩进。
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 包含时,将追加到文件的“:write”命令将为当前缓冲区设置文件名,如果当前缓冲区尚未具有文件名,并且还包含 ‘F’ 标志
cpo-F。
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}
行的上下文。当省略时,将使用六行的上下文。当使用零时,上下文实际上是 1,因为折叠需要两行之间的空格,即使对于删除的行也是如此。将其设置为非常大的值 (999999) 以完全禁用折叠。参见
fold-diff。
iblank 忽略所有行都是空白的更改。如果
'diffexpr' 为空,则向 "diff" 命令添加 "-B" 标志。检查 "diff" 命令的文档以了解其确切功能。
注意: diff 窗口将不同步,因为不会考虑空白行之间的差异。
icase 忽略文本中的大小写更改。 "a" 和 "A" 被视为相同。如果
'diffexpr' 为空,则向 "diff" 命令添加 "-i" 标志。
iwhite 忽略空格数量的更改。如果
'diffexpr' 为空,则向 "diff" 命令添加 "-b" 标志。检查 "diff" 命令的文档以了解其确切功能。它应该忽略添加尾随空格,但不应该忽略前导空格。
iwhiteall 忽略所有空格更改。如果
'diffexpr' 为空,则向 "diff" 命令添加 "-w" 标志。检查 "diff" 命令的文档以了解其确切功能。
iwhiteeol 忽略行尾的空格更改。如果
'diffexpr' 为空,则向 "diff" 命令添加 "-Z" 标志。检查 "diff" 命令的文档以了解其确切功能。
horizontal 以水平拆分启动 diff 模式(除非显式指定其他方式)。
vertical 以垂直拆分启动 diff 模式(除非显式指定其他方式)。
closeoff 当关闭一个设置了
'diff' 的窗口,并且同一标签页中只剩下一个设置了
'diff' 的窗口时,在该窗口中执行
:diffoff
。这将撤消
:diffsplit
命令。
hiddenoff 当缓冲区变为隐藏时,不要使用 diff 模式。
foldcolumn:{n} 在启动 diff 模式时,将
'foldcolumn' 选项设置为
{n}
。如果没有设置,则使用 2。
internal 使用内部 diff 库。当
'diffexpr' 设置时,此选项将被忽略。
E960 当在写入缓冲区时内存不足时,此选项将被忽略,不适用于涉及该缓冲区的 diff 操作。设置
'verbose' 选项以查看此情况何时发生。
indent-heuristic 对内部 diff 库使用缩进启发式算法。
linematch:{n} 对每个生成的 hunk 启用第二阶段 diff,以对齐行。当 hunk 中的总行数超过 {n}
时,将不会执行第二阶段 diff,因为非常大的 hunk 会导致明显的延迟。推荐设置是 "linematch:60",因为这将启用对包含最多 30 行的每个 hunk 的 2 个缓冲区 diff 进行对齐,或者对包含最多 20 行的每个 hunk 的 3 个缓冲区 diff 进行对齐。
algorithm:{text} 对内部 diff 引擎使用指定的 diff 算法。目前支持的算法包括: myers 默认算法 minimal 额外花费时间以生成尽可能小的 diff patience patience diff 算法 histogram histogram diff 算法
示例
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
两次编辑同一个文件会导致警告。不建议在 is 上使用 "/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".
当设置了此选项后,在开始编辑文件后,
'modified' 选项将被设置,因为文件在写入时将有所不同。
'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>
检测
FileType filetypes 当值中出现点时,它将分隔两个文件类型名称,因此不应将其用于文件类型。例如
/* 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
任何省略的项目都将回退到默认值。
请注意,"horiz"、"horizup"、"horizdown"、"vertleft"、"vertright" 和 "verthoriz" 仅在
'laststatus' 为 3 时使用,因为否则只使用垂直窗口分隔符。
如果
'ambiwidth' 为 "double",则 "horiz"、"horizup"、"horizdown"、"vert"、"vertleft"、"vertright"、"verthoriz"、"foldsep" 和 "fold" 默认使用单字节替代方案。
示例
set fillchars=stl:\ ,stlnc:\ ,vert:│,fold:·,diff:-
对于 "stl"、"stlnc"、"foldopen"、"foldclose" 和 "foldsep" 项目,支持单字节和多字节字符。但不支持双宽字符。
E1512
如果找到匹配项,该函数应返回一个包含一个或多个文件名的
List。如果未找到匹配项,该函数应返回一个空列表。
如果在函数调用期间遇到任何错误,将使用空列表作为返回值。
示例
" 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 任何 block (, {, [[, [{, 等等 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%") 时,此选项不会使用。这意味着运算符将包含整个关闭的折叠。请注意,垂直移动不在此列表中,因为这会使移动到关闭的折叠变得非常困难。在插入模式下,当插入文本时,包含光标的折叠将始终处于打开状态。要关闭折叠,可以使用
'foldlevel' 选项与
zx 命令一起重新应用,或者将
'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()
否则,表达式将在设置选项的脚本的上下文中求值,因此可以使用脚本局部项。
:s/// subst. all subst. one :s///g subst. one subst. all :s///gg subst. all subst. one
注意: 设置此选项可能会破坏依赖于 '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
该选项是一个逗号分隔的零件列表。每个零件都包含一个模式列表和一个参数列表:mode-list:argument-list,mode-list:argument-list,.. 模式列表是一个以破折号分隔的这些模式列表:n 正常模式 v 可视模式 ve 可视模式,具有
'selection' “exclusive”(如果未指定,则与 'v' 相同) o 操作待定模式 i 插入模式 r 替换模式 c 命令行正常模式(追加)模式 ci 命令行插入模式 cr 命令行替换模式 sm 在插入模式下显示匹配 a 所有模式 参数列表是一个以破折号分隔的这些参数列表:hor{N} 水平条,
{N}
为字符高度的百分比 ver{N} 垂直条,
{N}
为字符宽度的百分比 block 块光标,填充整个字符
上述三个中应该只出现一个。
默认情况下,每种模式都为“block”。blinkwait{N}
cursor-blinkingblinkon{N} blinkoff{N} 光标的闪烁次数:blinkwait 是光标开始闪烁之前的延迟,blinkon 是光标显示的时间,blinkoff 是光标不显示的时间。时间以毫秒为单位。当其中一个数字为零时,则不会闪烁。例如
set guicursor=n:blinkon0
默认情况下,每种模式都为“blinkon0”。
{group-name}
决定光标颜色和字体的突出显示组。在
TUI 中
inverse/reverse 和无组名将被解释为“主机终端默认光标颜色”,这通常意味着“反转的背景色和前景色”。
零件示例:n-c-v:block-nCursor 在正常模式、命令行模式和可视模式下,使用来自“nCursor”突出显示组的块光标 n-v-c-sm:block,i-ci-ve:ver25-Cursor,r-cr-o:hor20 在正常模式等模式下,使用主机终端定义的默认颜色的块光标。在插入模式等模式下,使用来自“光标”突出显示组的垂直条光标。在替换模式等模式下,使用默认颜色的下划线光标。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' number (默认值为 0) local to buffer 指定在插入模式下是否使用 :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' boolean (默认值为 on) global 在键入搜索命令时,显示模式在键入至今的位置,以及模式匹配的位置。匹配的字符串将被突出显示。如果模式无效或未找到,则不会显示任何内容。屏幕将经常更新,这在快速终端上非常有用。请注意,将显示匹配项,但光标将返回到其原始位置,当没有匹配项找到以及按下
<Esc>
时。您仍然需要使用
<Enter>
完成搜索命令,以便将光标移动到匹配项。您可以使用
CTRL-G
和
CTRL-T
键移动到下一个和上一个匹配项。
c_CTRL-G c_CTRL-T Vim 只搜索大约半秒钟。使用复杂的模式和/或大量文本,匹配项可能无法找到。这是为了避免在您键入模式时 Vim 停止响应。
hl-IncSearch 突出显示组决定突出显示。当
'hlsearch' 打开时,在键入搜索命令时,所有匹配的字符串也会被突出显示。另请参见:
'hlsearch'。如果您不想打开
'hlsearch',但希望在搜索时突出显示所有匹配项,您可以使用 autocmd 打开和关闭
'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()
否则,表达式将在设置选项的脚本的上下文中求值,因此可以使用脚本局部项。
表达式必须返回以空格为单位的缩进数量。它可以返回 "-1" 以保留当前缩进(这意味着
'autoindent' 用于缩进)。用于计算缩进的有用函数是
indent()、
cindent() 和
lispindent()。表达式的计算必须没有副作用!它不能更改文本,跳转到另一个窗口等。之后,光标位置始终恢复,因此光标可以移动。通常,此选项将设置为调用函数
set indentexpr=GetMyIndent()
'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 使用一个移位的特殊键来开始选择(选择模式或可视模式,具体取决于 "key" 是否存在于
'selectmode' 中)。stopsel 使用一个未移位的特殊键来停止选择。此处的特殊键是指光标键、
<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
The
'langmap' 选项是一个由逗号分隔的部分列表。每个部分可以采用两种形式之一: 1. 一组键值对。每个键值对都是一个“从”字符,紧跟一个“到”字符。示例:“aA”,“aAbBcC”。 2. 一个“从”字符列表,一个分号和一个“到”字符列表。示例:“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" 字段时,制表符显示为 "^I" 或 "<09>",就像不可打印字符的显示方式一样。
光标显示在制表符字符所占用的空格的开头,而不是像通常在正常模式下的结尾一样。要获得这种光标位置,同时使用空格显示制表符,请使用
set list lcs=tab:\ \
lcs-eol eol:c 用于在每行末尾显示的字符。如果省略,则行末尾没有额外字符。
lcs-tabtab:xy[z] 用于显示制表符的两个或三个字符。第三个字符是可选的。
tab:xy 始终使用 'x',然后使用 'y',直到足够为止。因此 "tab:>-" 显示
>
>-
>--
etc.
tab:xyz 始终使用 'z',然后在前面加上 'x',然后使用 'y',直到足够为止。因此 "tab:<->" 显示
>
<>
<->
<-->
etc.
当省略 "tab:" 时,制表符显示为 ^I。
lcs-spacespace:c 用于显示空格的字符。如果省略,则空格将留空。
lcs-multispacemultispace:c... 用于循环显示多个连续空格的一个或多个字符。覆盖 "space" 设置,除了单个空格。如果省略,则使用 "space" 设置。例如,
:set listchars=multispace:---+
将十个连续空格显示为
---+---+--
lcs-lead lead:c 用于显示前导空格的字符。省略时,前导空格将为空白。覆盖前导空格的“space”和“multispace”设置。可以将其与“tab:”组合使用,例如
set listchars+=tab:>-,lead:.
不应使用字符“:”和“,”。可以使用 UTF-8 字符。所有字符必须为单宽字符。
E1512
每个字符都可以用十六进制表示
set listchars=eol:\\x24
set listchars=eol:\\u21b5
set listchars=eol:\\U000021b5
请注意,使用双反斜杠。十六进制字符的个数必须正好为 2(对于 \\x)、4(对于 \\u)和 8(对于 \\U)。
示例
set lcs=tab:>-,trail:-
set lcs=tab:>-,eol:<,nbsp:%
set lcs=extends:>,precedes:<
这在您使用 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)全局 用于模式匹配的内存最大量(以 KB 为单位)。最大值为大约 2000000。使用它可以无限制地工作。
E363当 Vim 遇到限制时,它会显示错误消息,并且行为类似于键入
CTRL-C
。遇到限制通常意味着模式效率低下或过于复杂。这在使用非常长的行的模式“\(.\)*”时就可能发生。“.*”的效果要好得多。也可能在重绘时发生,当语法规则尝试匹配复杂的文本结构时。Vim 可能会在达到
'maxmempattern' 限制之前耗尽内存,在这种情况下,您将收到“内存不足”错误而不是错误消息。
有三个用逗号分隔的数字
{start},{inc},{added}
对于大多数语言,未压缩的单词树适合内存。{start}
给出了在进行任何压缩之前可以使用多少内存(以 KB 为单位)。它应该比 Vim 可用的内存略小。
超过{start}
限制后,{inc}
数字指定在进行另一次压缩之前可以分配多少内存(以 KB 为单位)。数字越小,意味着在添加更少的单词后就会进行压缩,速度较慢。数字越大,意味着会分配更多内存。
完成压缩后,在忽略{inc}
限制并按需进行压缩之前,可以添加{added}
乘以 1024 个单词。数字越小,表示达到{inc}
限制的可能性越小,使用的内存更少,但速度更慢。
需要这些数字的语言是意大利语和匈牙利语。默认值适用于您拥有大约 512 MB 内存的情况。如果您拥有 1 GB 内存,可以使用
set mkspellmem=900000,3000,800
'mouse'
'mouse' string (默认 "nvi") 全局 启用鼠标支持。例如,要在普通模式和可视模式下启用鼠标
set mouse=nv
要暂时禁用鼠标支持,请在使用鼠标时按住 Shift 键。
可以为不同的模式启用鼠标支持: n 普通模式 v 可视模式 i 插入模式 c 命令行模式 h 编辑帮助文件时,所有先前的模式 a 所有先前的模式 r 用于
hit-enter 和
more-prompt 提示
在文本缓冲区中的任何位置左键单击以将光标放置在该位置。这对运算符也有效,例如,键入
d,然后左键单击以删除从当前光标位置到您单击位置的文本。
如果针对 "v"(可视模式)启用,则双击选择单词,三击选择整行,四击选择矩形块。
'mousemodel' 'mousem' 'mousemodel' 'mousem' string (默认 "popup_setpos") 全局 设置用于鼠标的模型。该名称主要指定右键用于什么: extend 右键扩展选择。这与 xterm 中的行为类似。 popup 右键弹出一个菜单。按住 Shift 的左键扩展选择。这与 Microsoft Windows 中的行为类似。 popup_setpos 与 "popup" 相似,但光标会移动到鼠标单击的位置,因此所选操作将对单击的对象起作用。如果单击选择内部,则对该选择进行操作,即不移动光标。当然,这意味着右键单击选择之外将结束可视模式。每种模型下每个按钮的概述
mouse 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>
需要 CTRL 修饰符的鼠标命令可以通过在使用鼠标之前键入 "g" 键来模拟:"g<LeftMouse>" 是 "<C-LeftMouse> (跳转到鼠标单击下的标签) "g<RightMouse>" 是 "<C-RightMouse> ("CTRL-T")
'mousescroll' E5080 'mousescroll' string (默认 "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' string (默认 "bin,hex") 局部于缓冲区 这定义了 Vim 在使用
CTRL-A
和
CTRL-X
命令分别对数字进行加减时将考虑的基数;有关这些命令的更多信息,请参见
CTRL-A。 alpha 如果包含,单个字母字符将被递增或递减。这对带有字母索引 a)、b) 等的列表很有用。
octal-nrformatsoctal 如果包含,以零开头的数字将被视为八进制。例如:对 "007" 使用
CTRL-A
会得到 "010"。 hex 如果包含,以 "0x" 或 "0X" 开头的数字将被视为十六进制。例如:对 "0x100" 使用
CTRL-X
会得到 "0x0ff"。 bin 如果包含,以 "0b" 或 "0B" 开头的数字将被视为二进制。例如:对 "0b1000" 使用
CTRL-X
会减一,得到 "0b0111"。 unsigned 如果包含,数字被识别为无符号。因此,前导破折号或负号不会被视为数字的一部分。例如:对 "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
不会有任何效果,溢出被阻止。 blank 如果包含,将根据前导空格将数字视为有符号或无符号。如果带有前导破折号的数字的破折号紧接在非空格字符之前(即不是制表符或 " "),则负号不会被视为数字的一部分。例如:对 "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 在每个“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 plugins 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") 全局 此选项定义选择的行为。它仅在 Visual 和 Select 模式中使用。可能的值
值 超过行 包含
旧的 否 是 包含 是 是 排他 是 否 "超过行" 表示光标允许定位在行尾之后一个字符。 "包含" 表示选择中的最后一个字符包含在操作中。例如,当使用 "x" 删除选择时。当使用 "old" 并且
'virtualedit' 允许光标移动到行尾之后时,换行符仍然不包含在内。请注意,当使用 "exclusive" 并从末尾向后选择时,您不能包含行的最后一个字符,当从 Normal 模式开始并且
'virtualedit' 为空时。
'sessionoptions' 'ssop' 'sessionoptions' 'ssop' 字符串 (默认 "blank,buffers,curdir,folds,help,tabpages,winsize,terminal") 全局 更改
:mksession 命令的效果。它是一个逗号分隔的单词列表。每个单词都启用保存和恢复某些内容
词 保存和恢复
空白的空窗口缓冲区隐藏并卸载缓冲区,不仅限于窗口当前目录中的缓冲区。当前目录手动创建的折叠、打开/关闭的折叠和本地折叠选项。全局变量,以大写字母开头且至少包含一个小写字母的全局变量。只存储字符串和数字类型。帮助帮助窗口本地选项 本地到窗口或缓冲区的选项和映射(不是本地选项的全局值)。选项 所有选项和映射(包括本地选项的全局值)。skiprtp 从选项中排除
'runtimepath' 和
'packpath'。调整大小 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-file)。字符串应为逗号分隔的参数列表,每个参数由一个字符标识特定参数,后跟一个指定该参数值的数字或字符串。如果省略了特定字符,则使用默认值作为该参数的值。以下是标识字符及其值的影响列表。
字符 值
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. 选项在空格和制表符字符上拆分,这些字符不在引号内:"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" 输出的重定向。如果使用自己写入
'makeef' 的
'makeprg',则此功能很有用。如果不需要管道,但需要包含
'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 完成 (YYY)","匹配 1/2","唯一匹配","未找到模式","返回到原始位置",等等。C 在扫描 ins-completion
shm-C 项目时不会显示消息,例如 "正在扫描标签"。q 在录制宏时不会显示 "正在录制 @a"
shm-q。F 在编辑文件时不会显示文件信息,例如
shm-F 使用了
:silent
命令;请注意,这也影响来自
'autoread' 的消息,重新加载 S 在搜索时不会显示搜索计数消息,例如
shm-S "[1/5]"。当 "S" 标志不存在时(例如显示搜索计数),"搜索到达底部,继续从顶部开始" 和 "搜索到达顶部,继续从底部开始" 消息只由搜索计数统计信息之前的 "W"(助记符:包裹)字母表示。
这给了你机会避免缓冲区之间的更改需要你按
<Enter>
,但仍然为可用空间提供了尽可能有用的消息。要获得使用空
'shm' 时会得到的消息,请使用 ":file!"。有用的值:shm= 没有消息缩写。shm=a 缩写,但不丢失信息。shm=at 缩写,并在必要时截断消息。
只允许可打印的单单元格字符,不包括
<Tab>
和逗号(在未来的版本中,逗号可能用于分隔显示在行尾和行首的部分)。
hl-NonText 高亮组决定高亮显示。请注意,显示断行后的制表符将以不同的方式显示。如果你想要
'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()
如果在评估选项时出现错误,则它将被清空以避免进一步的错误。否则,屏幕更新将循环。如果结果包含不可打印的字符,则结果是不可预测的。
字段含义
- 左对齐项目。默认情况下,当 minwid 大于项目长度时,项目将右对齐。0 数字项目中的前导零。被 "-" 覆盖。minwid 项目的最小宽度,填充由 "-" 和 "0" 设置。值必须小于或等于 50。maxwid 项目的最大宽度。文本项目的左端将使用 "<" 进行截断。数字项目将被向下移至 maxwid-2 位,然后是 ">"number,其中 number 是缺少的位数,类似于指数表示法。item 一个字母代码,如下所述。
以下是可能的 statusline 项目的说明。 "item" 中的第二个字符是类型:N 表示数字,S 表示字符串,F 表示标志,如下所述
不适用
item 含义
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 "[Quickfix List]"、"[Location List]" 或空。k S "b:keymap_name" 的值或当使用
:lmap 映射时
'keymap' 的值:"<keymap>" n N 缓冲区号。b N 光标下字符的值。B N 如上所述,以十六进制表示。o N 文件中光标下字节的字节号,第一个字节为 1。助记符:从文件开头偏移(加 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}
of
{max}
)如果参数文件计数为零或一,则为空。{ NF 评估 "%{" 和 "}" 之间的表达式并替换结果。请注意,在结束 "}" 之前没有 "%"。表达式不能包含 "}" 字符,调用函数来解决此问题。请参阅下面的
stl-%{。
{%
- 这几乎与 "{" 相同,只是表达式的结果会再次评估为状态行格式字符串。因此,如果 expr 的返回值包含 "%" 项目,它们将被扩展。表达式可以包含 "}" 字符,表达式结尾由 "%" 表示。例如
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. 按下的修饰键:包含字符串 "s"(如果按下了 Shift 修饰键)、"c"(表示 Ctrl)、"a"(表示 Alt)和 "m"(表示 Meta);目前,如果未按下修饰键,则字符串包含空格,但不应依赖空格的存在或修饰键的特定顺序:使用
stridx() 来测试是否存在某个修饰键;字符串保证只包含 ASCII 字母和空格,每个修饰键一个字母;"?" 修饰键也可能存在,但它的存在是 bug,表示添加了新的鼠标按钮识别,但没有修改对该标签上鼠标点击作出反应的代码。使用
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 变量确实反映当前语法)。此选项在模式行中最有用,因为它适用于无法自动识别的文件语法。示例,在 IDL 文件中
/* vim: set syntax=idl : */
当值中出现句点时,它将分隔两个文件类型名称。示例
/* vim: set syntax=c.doxygen : */
这将首先使用 "c" 语法,然后使用 "doxygen" 语法。请注意,第二个语法必须准备作为补充加载,否则将被跳过。可能出现多个句点。要关闭当前文件的语法高亮,请使用
set syntax=OFF
实际设置
'syntax' 选项时,会触发 Syntax 自动命令事件,并以该值作为参数。此选项不会复制到其他缓冲区,与
'cpoptions' 中的 's' 或 'S' 标志无关。只能使用字母数字字符、'.'、'-' 和 '_'。
可能的值(逗号分隔列表):left 如果包含,则转到上一个标签页,而不是下一个标签页。uselast 如果包含,则如果可能,转到以前使用的标签页。此选项优先于其他选项。
请记住,只有一个标签页是当前标签页,其他标签页是不可见的,您无法跳转到它们的窗口。
注意:将
'tabstop' 设置为除 8 之外的任何值都可能导致您的文件在许多地方显示错误。该值必须大于 0 且小于 10000。
当 Vim 在文件开头找到一行指示该文件未排序时,无论如何都会对一个文件进行线性搜索
!_TAG_FILE_SORTED 0 /some comment/
['0' 之前和之后的空格必须是一个 <Tab>
]
当执行二进制搜索并且在
'tags' 中列出的任何文件中都没有找到匹配项,并且忽略大小写或使用模式而不是普通标签名称时,将使用线性搜索重新尝试。未排序标签文件中的标签以及大小写不同的匹配项将仅在重新尝试时找到。
如果标签文件指示它已按大小写折叠排序,则当忽略大小写时,可以避免第二次线性搜索。为此,在 "!_TAG_FILE_SORTED" 行中使用 '2' 值。可以使用大多数 unices 中 "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 制表符
FF 换页符
ESC 转义符
DEL 删除键
C0 其他控制字符,不包括换行符和回车符 < ' '
C1 控制字符 0x80...0x9F
要在文件名中包含逗号,请在其前面加上反斜杠。逗号后的空格将被忽略,否则空格将包含在文件名中。有关使用反斜杠的信息,请参阅
option-backslash。当从列表中添加或删除目录时,建议使用
:set+= 和
:set-=。这可以避免在未来版本使用其他默认值时出现问题。出于安全原因,此选项中不能使用反引号。
'title' 'notitle' 'title' boolean (默认关闭) 全局 当开启时,窗口标题将设置为
'titlestring' 的值(如果它不为空),或者设置为: filename [+=-] (path) - Nvim 其中: filename 正在编辑的文件的名称 - 表示文件不可修改,
'ma' 关闭 + 表示文件已修改 = 表示文件是只读的 =+ 表示文件是只读的且已修改 (path) 是正在编辑的文件的路径
当此选项包含 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//") 全局 用于撤销文件的目录名称列表,以逗号分隔。有关格式的详细信息,请参见
'backupdir'。“.” 表示使用文件的目录。对于 "file.txt",撤销文件名是 ".file.txt.un~"。对于其他目录,文件名是编辑文件的完整路径,路径分隔符被替换为 "%”。写入时:使用第一个存在的目录。“.” 始终有效,"." 之后的目录不会用于写入。如果所有目录都不存在,Nvim 将尝试创建列表中的最后一个目录。读取时,会尝试所有条目以查找撤销文件。使用第一个存在的撤销文件。如果无法读取,则会给出错误,不会再使用其他条目。请参见
undo-persistence。出于安全原因,此选项不能从
modeline 或
sandbox 中设置。
但是,您也可以通过在
'cpoptions' 中包含 'u' 标志来获得 Vi 兼容性,并且仍然可以使用
CTRL-R
来重复撤销。另请参见
undo-two-ways。设置为 -1 表示根本不撤销。您可能只想对当前缓冲区执行此操作。
setlocal ul=-1
这在您因单个更改而耗尽内存时很有帮助。
当全局值要使用时,局部值被设置为 -123456。
在为重载保存撤销时,不会读取任何撤销文件。
请注意,这会导致整个缓冲区存储在内存中。如果您耗尽内存,请将此选项设置为较低的值。
例如,在编辑语句从第 9 列开始、注释从第 41 列开始的汇编语言文件时,使用以下内容可能会有用:
set varsofttabstop=8,32,8
这将设置软制表符停靠,分别为 8 和 8 + 32 个空格,之后每列增加 8 个空格。
这将使第一个制表符宽度为 4 个空格,第二个为 20 个空格,第三个为 10 个空格,所有后续制表符为 8 个空格。
在级别 1 启用对 Lua 脚本中选项、映射等的赋值跟踪;当
'verbose' 为 0 时,不会跟踪 Lua 脚本,以提高性能。
如果大于或等于给定级别,Nvim 会生成以下消息:
级别 消息
---------------------------------------------------------------------- 1 启用 Lua 跟踪(见上文)。不生成消息。 2 当一个文件被 ":source"'ed 时,或者
shada 文件被读取或写入。 3 UI 信息,终端功能。 4 Shell 命令。 5 每个搜索的标签文件和包含文件。 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 允许在 Visual 块模式下进行虚拟编辑。 insert 允许在插入模式下进行虚拟编辑。 all 允许在所有模式下进行虚拟编辑。 onemore 允许光标移动到行的末尾之外 none 当用作局部值时,即使全局值已设置,也不允许虚拟编辑。当用作全局值时,"none" 与 "" 相同。 NONE "none" 的替代拼写。
虚拟编辑意味着光标可以放置在没有实际字符的地方。这可以是制表符的中间或行的末尾。这对在 Visual 模式下选择矩形并编辑表格很有用。 "onemore" 与此不同,它只允许光标移动到行最后一个字符之后。这使得一些命令更加一致。以前,如果行为空,光标总是位于行末尾。但这与 Vi 不兼容。它也可能破坏一些插件或 Vim 脚本。例如,因为
l 可以将光标移动到最后一个字符之后。谨慎使用!使用
$
命令将移动到行中的最后一个字符,而不是最后一个字符之后。这实际上可能会将光标向左移动!
g$
命令将移动到屏幕行的末尾。将 "all" 与 "onemore" 组合在一起没有意义,但你不会收到警告。当与其他词语组合时,"none" 将被忽略。
'whichwrap' 'ww' 'whichwrap' 'ww' string (默认 "b,s") global 允许指定的键(将光标向左/右移动)在光标位于行首/行尾时移动到前一行/下一行。将字符连接起来以允许这些键进行此操作
字符键模式
b
<BS>
正常和 Visual s
<Space>
正常和 Visual h "h" 正常和 Visual(不建议) l "l" 正常和 Visual(不建议) <
<Left>
正常和 Visual >
<Right>
正常和 Visual ~ "~" 正常 [
<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',它也会启动
'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:>