:se :set
:se[t][!] 显示所有不同于缺省值的选项。
[!] 给出时,将每个选项单独显示在一行上。
:se[t][!] all 显示除了终端设置以外的所有选项。
[!] 给出时,将每个选项单独显示在一行上。
:se[t] termcap 显示所有的终端选项。注意 在 GUI 里,不会显示键码,因为
它们是内部生成的,无法改变。而且 GUI 里即使修改终端代
码也没用 ...
终端选项的形式为 t_AB,见 terminal-options 。
:se[t]! termcap 同上,但不使用多列。
E518 E519
:se[t] {option}? 显示 {option} 的值。
:se[t] {option} 布尔选项: 置位,也就是打开。
数值选项: 显示其值。
字符串选项: 显示其值。
:se[t] no{option} 布尔选项: 复位,也就是关闭。
:set-! :set-inv
:se[t] {option}! 或
:se[t] inv{option} 布尔选项: 反转其值。
:set-default :set-& :set-&vi :set-&vim
:se[t] {option}& 将选项重置为其缺省值。可能受 'compatible' 的现值影响。
:se[t] {option}&vi 将选项重置为其 Vi 的缺省值。
:se[t] {option}&vim 将选项重置为其 Vim 的缺省值。
:se[t] all& 设置所有选项为其缺省值。以下选项的值不会改变:
所有 t_ 开始的终端选项
'columns'
'cryptmethod'
'encoding'
'key'
'lines'
'term'
'ttymouse'
'ttytype'
警告: 此命令会有很多副作用。
:set-args :set= E487 E521
:se[t] {option}={value} 或
:se[t] {option}:{value}
设置字符串或数值选项的值为 {value}。
数值选项的值可以用十进制、十六进制 (0x 开头) 或八进制
('0' 或 '0o' 开头)。
要补全旧值,可用 'wildchar' (缺省是 <Tab>,但置位
'compatible' 时会是 CTRL-E)。许多使用固定语法名和名字
的字符串选项,也支持用已知值进行补全。见
cmdline-completion 和 complete-seg-option 。
{option} 和 '=' 之间可以有空白,但会被忽略。而 '=' 和
{value} 之间不能有空白。
option-backslash 说明如何在 {value} 里使用空白和反斜
杠。
:se[t] {option}+={value} :set+=
将 {value} 加入数值选项,或者附加到字符串选项之后。
选项为逗号分隔的列表时,除非原来的值为空,会先加上一个
逗号。
选项为标志位列表时,会删除多余的标志位。如果加入已经存
在的标志位,选项值不变。
另见上面的 :set-args 。
:se[t] {option}^={value} :set^=
把 {value} 乘到数值选项上,或者附加到字符串选项之前。
选项为逗号分隔的列表时,除非原来的值为空,会先加上一个
逗号。
另见上面的 :set-args 。
:se[t] {option}-={value} :set-=
从数值选项里减去 {value},或者在该值存在时,从字符串选
项里将其删除。如果 {value} 在字符串选项里不存在,不会
给出错误或者警告。
选项为逗号分隔的列表时,除非新值为空,会删除一个逗号。
选项为标志位的列表时,{value} 里标志位的顺序必须和它们
在选项里出现的顺序完全相同。可以通过逐个删除标志位来解
决这个问题。
在逗号分隔的列表或标志位列表里,要自动插入已有的个体
值,可用 'wildchar'。见 complete-set-option 。
另见上面的 :set-args 。
":set" 可以设置多个 {option} 参数。例如:
:set ai nosi sw=3 ts=3
如果其中一个参数出错,会给出错误信息,而且后续参数将不再处理。
:set-verbose
'verbose' 非零时,在显示选项值的同时,会指明该选项最近一次被设置的位置。
例如:
:verbose set shiftwidth cindent?
shiftwidth=4
最近修改于 modeline 行 1
cindent
最近修改于 /usr/local/share/vim/vim60/ftplugin/c.vim 行 30
只有在请求特定选项的值时才会有此功能,":verbose set all" 或者没有参数的
":verbose set" 都不会。
如果该选项是手动设置的,不会给出 "最近修改于" 消息。
如果该选项是在函数、用户命令或者自动命令执行期间设置的,会显示它们定义所在的脚
本位置。
注意 一些选项的设置也可能是 'compatible' 设置时所产生的副作用。
一些特殊的文字:
最近修改于 modeline 行 1
选项最后在 modeline 里设置。
最近修改于 --cmd 参数
选项最后由命令行参数 --cmd 或 + (译者注: 应该不含 +) 设置。
最近修改于 -c 参数
选项最后由命令行参数 -c 、+、 -S 或 -q 设置。
最近修改于环境变量
选项最后由环境变量、$VIMINIT、$GVIMINIT 或 $EXINIT 设置。
最近修改于错误处理器
选项计算时出错,因而被清除。
{仅当编译时加入 +eval 特性才有效}
:set-termcap E522
要设置终端选项,在需要 {option} 的地方可用 "t_xx" 形式。这些选项会覆盖相应的
termcap 值。设置后,可以用于映射。如果 "xx" 包含特殊字符,须用 <t_xx> 形式:
:set <t_#4>=^[Ot
也可用此语法来将普通键翻译为特殊键码。例如,如果 Alt-b 产生 <Esc>b,可用:
:set <M-b>=^[b
(这里 ^[ 是真正的 <Esc>,用 CTRL-V <Esc> 来输入)
这个方法优于映射之处在于,它适用于所有情况。
可以定义任何键码,如:
:set t_xy=^[foo;
如果该名字不能识别,不会给出警告。定义后,可以为这些键码定义映射:
:map <t_xy> something
E846
还没有设置的键码会被当作不存在。试图读取其值会报错:
:set t_kb=
:set t_kb
E846: 键码不存在: t_kb
为了安全原因,t_xx 选项不能在 modeline 或者 sandbox 里设置。
":set" 给出的列表看起来和 Vi 不同。长字符串选项会在列表底部。而选项的数量也相
当多。"set all" 的输出可能一整屏都放不下,此时 Vim 会给出 more-prompt 。
option-backslash
在字符串选项值中,如果要包含空白,一定要用反斜杠前导。如果要包含单个反斜杠,一
定要输入两个。换而言之,选项值里实际的反斜杠数目会减半 (往下取整)。
选项 'path'、'cdpath' 和 'tags' 里,为了与 3.0 版本兼容,空白必须要用三个反斜
杠前导,因为那时选项可以用逗号或空格分隔。
在像 'backupdir' 和 'tags' 那样的逗号分隔的选项里,也需要以两个反斜杠前导来转
义逗号,但对像 'makeprg' 那样不用逗号分隔的选项,则不需要如此。
用 :let 和 literal-string 设置选项时,应减少一层反斜杠。
这里有一些例子:
:set makeprg=make\ file 实际值 "make file"
:let &makeprg='make file' (同上)
:set makeprg=make\\\ file 实际值 "make\ file"
:set tags=tags\ /usr/tags 实际值 "tags" 和 "/usr/tags"
:set tags=tags\\\ file 实际值 "tags file"
:let &tags='tags\ file' (同上)
:set makeprg=make,file 实际值 "make,file"
:set makeprg=make\\,file 实际值 "make\,file"
:set tags=tags,file 实际值 "tags" 和 "file"
:set tags=tags\\,file 实际值 "tags\,file"
:let &tags='tags\,file' (同上)
"|" 字符会把 ":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\"
Vim9 脚本会简单一点,注释由 '#' 字符开始,且必须有前导的空白。所以不太需要反
斜杠:
vim9script
set titlestring=hi\ "there"
set titlestring=hi#there#
set titlestring=hi\ \#there#
Win32 基本上不会删除文件名里的反斜杠。更准确地说: 对于期待文件名的选项而言 (那
些需要扩展环境变量的),不会删除普通文件名字符之前的反斜杠。但特殊字符 (空格、
反斜杠、逗号等) 之前的反斜杠的用法仍如上所述。
有一个特例,如果该值以 "\\" 开始:
:set dir=\\machine\path 实际值 "\\machine\path"
:set dir=\\\\machine\\path 实际值 "\\machine\path"
:set dir=\\path\\file 实际值 "\\path\file" (错了!)
第一个例子里的开始部分会保持不变,但第二个例子里的反斜杠会减半。这样可以确保在
需要反斜杠减半和需要保持原样这两种情况下都能正常工作。第三个例子的结果也许出乎
意料,请避免这种用法。
add-option-flags remove-option-flags
E539 E550 E551 E552
有些选项是标志位的列表。如果想向这样的选项添加标志位而不影响已有的值,可用:
:set guioptions+=a
要从选项里删除标志位,可用:
:set guioptions-=a
这样就会删除 'guioptions' 里的 'a' 标志位。
注意 一次只应该加减一个标志位。如果 'guioptions' 的值是 "ab",不能用
"set guioptions-=ba",因为字符串 "ba" 没有在原值里出现。
:set_env expand-env expand-environment-var
若干字符串选项会扩展环境变量。如果某环境变量存在,'$' 后跟该环境变量名会被替换
为其值。如果不存在,'$' 和该名字都不会被改写。环境变量名可以后跟任何非标识符字
符 (非字母、数字或 '_')。该字符和其后的内容会附加于环境变量值之后。比如:
:set term=$TERM.new
:set path=/usr/$INCLUDE,$HOME/include,.
用 ":set opt-=val" 或 ":set opt+=val" 从选项里加减字符串时,环境变量的扩展会在
加入或删除操作之前完成。
局部选项的处理 local-options
注意: 下述内容也适用于 global-local 选项。
有的选项只适用于单个窗口或缓冲区。每个窗口或缓冲区会有该选项的独立副本,因而可
以拥有不同的值。例如,可以在一个窗口置位 '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
又会得到上次编辑 "one" 时的 'list' 值。因为会为每个缓冲区分别记住其窗口局部选
项。这也适用于被卸载的缓冲区,但真正删除缓冲区 :bwipe 时,此信息就丢失了。
特殊的窗口局部选项 local-noglobal
创建新窗口时,不复制下述的窗口局部选项,它们的行为因而略有不同:
选项 原因
'previewwindow' 仅可在一个窗口中置位
'scroll' 特定于已有的窗口
'winfixbuf' 特定于已有的窗口
'winfixheight' 特定于已有的窗口
'winfixwidth' 特定于已有的窗口
特殊的缓冲区局部选项
创建新缓冲区时,不复制下述的缓冲区局部选项,它们的行为因而略有不同:
选项 原因
'filetype' 自动命令显式设置
'syntax' 自动命令显式设置
'bufhidden' 指示 special-buffers
'buftype' 指示 special-buffers
'readonly' 会自动检测
'modified' 会自动检测
:setl :setlocal
:setl[ocal][!] ... 类似于 ":set",但只设置局部于当前缓冲区或者窗口的值。
并非所有的选项都有局部值。如果该选项没有局部值,那么会
设置全局值。
用 "all" 参数时: 显示所有局部选项的局部值。
参数省略时: 显示所有不同于缺省的局部选项的局部值。
用来显示特定的局部选项时,会显示其局部值。对全局/局部
布尔变量而言,如果使用的是全局值,在选项名前会显示
"--"。
对全局选项而言,会显示其全局值 (将来或许会有所改变)。
:se[t] {option}< 设置 {option} 的有效值为其全局值。
对字符串 global-local 选项而言,会撤销其局部值,从而
使用它的全局值。
对其他类型的选项而言,则会复制其全局值到局部值。
:setl[ocal] {option}< 设置 {option} 的有效值为其全局值。
对数值和布尔型 global-local 选项而言,会撤销其局部
值,从而使用它的全局值。
对其他类型的选项,包括字符串 global-local 选项而言,
则会复制其全局值到局部值。
注意 字符串型和数值型 global-local 选项行为的细微差异。
:setg :setglobal
:setg[lobal][!] ... 类似于 ":set",但只设置局部选项的全局值,而不改变其局
部值。
用来显示特定的选项时,会显示其全局值。
用 "all" 参数时: 显示所有局部选项的全局值。
参数省略时: 显示所有不同于缺省的局部选项的全局值。
对缓冲区和窗口的局部选项而言:
命令 全局值 局部值 条件
:set option=value 设置 设置
:setlocal option=value - 设置
:setglobal option=value 设置 -
:set option? - 显示 设置了局部值时
:set option? 显示 - 没设置局部值时
:setlocal option? - 显示
:setglobal option? 显示 -
有局部值的全局选项 global-local
有些选项之所以被定义为全局选项,是因为多数情况下,它们在所有缓冲区和窗口里只需
设置一个值。不过,对某些全局选项,设置不同的局部值有时也很有用。为此,可用
":setlocal" 来设置这些全局选项的局部值。此时,该缓冲区或窗口会使用局部值,而其
它缓冲区和窗口会继续使用全局值。
例如,假定有两个窗口,都在编辑 C 源代码,也都使用全局的 'makeprg' 选项。如果其
中一个窗口决定这么做:
:set makeprg=gmake
那么另一个窗口也会切换到新值,无需再为那个 C 源代码窗口重复设置一遍 'makeprg'
选项。
不过,如果希望在新窗口里编辑 Perl 脚本并使用不同的 'makeprg' 值,而不影响 C 源
代码的设置,可用这个命令:
:setlocal makeprg=perlmake
只要把该局部值设为空,就可以切换回全局值:
:setlocal makeprg=
这只适用于字符串选项。对数值或布尔型选项,需要使用 "<" 标志:
:setlocal autoread<
要 注意,对非布尔型和非数值的选项使用 "<" 时,会将全局值复制到局部值,而不是直
接引用全局值 (如果后来又改变全局值,就能看出两者的区别了)。也可用:
:set path<
这会撤销 'path' 的局部值,从而使用它的全局值。它和下行的效果相同:
:setlocal path=
注意: 更多的全局选项将来可能会成为 global-local 类型。那时,在全局选项上使用
":setlocal" 的效果可能会有不同。
option-value-function
有些选项 ('completefunc'、'findfunc'、'imactivatefunc'、'imstatusfunc'、
'omnifunc'、'operatorfunc'、'quickfixtextfunc'、'tagfunc' 和 'thesaurusfunc')
应设为函数名、函数引用或匿名函数。使用匿名函数时,会转换为形如 "<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
只要函数存在于当前脚本, Vim9 脚本里可以省略 "s:" 和 "<SID>":
set opfunc=MyLocalFunc
要设为函数引用变量:
let Fn = function('MyTagFunc')
let &tagfunc = Fn
要设为匿名函数:
let &tagfunc = {t -> MyTagFunc(t)}
要设为匿名函数表达式变量:
let L = {a, b, c -> MyTagFunc(a, b , c)}
let &tagfunc = L
在 Vim9 脚本里,已编译函数里可以使用匿名函数,但不支持闭包,因为函数调用时不会
包含定义所在的上下文。
设置文件类型
:setf[iletype] [FALLBACK] {filetype} :setf :setfiletype
将 'filetype' 选项设为 {filetype}。但如果已经在 (嵌套)
自动命令序列中设置过该选项,就不再进行。
等价于下面代码的缩写:
:if !did_filetype()
: setlocal filetype={filetype}
:endif
该命令用于在 filetype.vim 里避免重复设置 'filetype' 选
项,从而防止加载多个文件类型的设置和语法文件。
可选的 FALLBACK 参数给出时,后续的 :setfiletype 命令可
覆盖 'filetype'。这用于基于猜测的文件类型检测。此命令
后 did_filetype() 为假。
option-window optwin
:bro[wse] se[t] :set-browse :browse-set :opt :options
:opt[ions] 打开窗口,阅读和设置所有的选项。选项以功能分组。
提供每个选项简短的帮助。在简短帮助上按 <CR>,会打开帮
助窗口来提供该选项更多的帮助。
修改选项的值后,在 "set" 行上按 <CR> 即可生效。对于窗
口和缓冲区局部选项,设置的是最近访问窗口的值。除非它是
帮助窗口,此时使用的是帮助窗口下方的窗口 (选项窗口本身
不算)。
{仅当编译时加入 +eval 特性才有效}
$HOME
"~" 的作用相当于 "$HOME",但仅在选项开头和空格或逗号之后才会被识别。
Unix 系统上也可以用 "~user" 形式。它相当于用户 "user" 的主目录。例如:
:set path=~mool/include,/usr/include,.
Unix 系统上还可以用 "${HOME}" 形式。这里 {} 之间的环境变量名可以包含非标识符字
符。注意 如果想在这种形式的文件名上使用 "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') 会返回真值。$HOME 被手动设置为
非空字符串时,新值会被导出到子进程里。
注意 选项的扩展有最大长度限制。具体取决于系统,通常为 256 或 1024 个字符。
:fix :fixdel
:fix[del] 设置 't_kD' 的值,如果:
't_kb' 是 't_kD' 就会成为
CTRL-? CTRL-H
非 CTRL-? CTRL-?
(CTRL-? 是 0o177 八进制、0x7f 十六进制)
如果删除键的终端代码不对,但退格键的代码正确,可在
.vimrc 里放上:
:fixdel
不管退格键的实际代码是什么,它都能正确工作。
如果退格键的终端代码不对,可以用:
:if &term == "termname"
: set t_kb=^V<BS>
: fixdel
:endif
这里 "^V" 是 CTRL-V 而 "<BS>" 是退格键 (不要输入四个字
符!)。把 "termname" 换成实际的终端名。
如果 <Delete> 键发送了一个奇怪的键序列 (不是 CTRL-? 或
CTRL-H),不要用 ":fixdel",而应该用:
:if &term == "termname"
: set t_kD=^V<Delete>
:endif
这里 "^V" 是 CTRL-V 而 "<Delete>" 是删除键 (不要输入八
个字符!)。把 "termname" 换成实际的终端名。
Linux-backspace
Linux 的备注: 退格键缺省产生 CTRL-?,这是错的。在
rc.local 里放上这行可以修正:
echo "keycode 14 = BackSpace" | loadkeys
NetBSD-backspace
NetBSD 的备注: 如果退格键产生错误的键码,可试用:
xmodmap -e "keycode 22 = BackSpace"
如果成功,可在 .Xmodmap 文件里加入:
keysym 22 = BackSpace
要使之生效,需要重启系统。
除了用 ":set" 命令设置选项以外,还有三个方法可以为一个或多个文件自动设置选项:
1. 启动 Vim 时,可以从若干地方读取初始化设置,见 initialization 。多数设置在
所有编辑会话中共享。有些则取决于 Vim 启动时的当前目录。可用 :mkvimrc 、
:mkview 和 :mksession 创建初始化设置。
2. 开始编辑新文件时,会执行自动命令。可在此为匹配特定模式的文件设置选项和执行
其他操作,见 autocommand 。
3. 开始编辑新文件并且打开 'modeline' 选项时,在文件开始和结束处的若干行上检查
模式行。下面解释此机制。
modeline vim: vi: ex: E520
模式行有两种形式。第一种形式:
[text{white}]{vi: vim: ex:}[white]{options}
[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,会忽略后续的模式行。这种方法可为个别文件关闭模
式行,用于避免误把相似内容当作模式行。例如,如果 YAML 文件包含了像 "vim:" 这样
的字符串,可在文件开头用
# vim: nomodeline
来避免错误检测出模式行。在同一模式行上关闭 modeline 后,其后的选项仍会被计算
(但这种情况通常不会出现)。
modeline-local
模式行上选项的设置类似于 ":setlocal": 新值只适用于包含该文件的缓冲区和窗口。尽
管模式行里可以设置全局值,但这非常罕见。如果打开两个窗口且其中的两个文件为同一
个全局选项设置不同的值,结果取决于哪个文件后打开。
编辑已经载入的文件时,只使用模式行里的窗口局部选项。如果打开文件后,手动修改了
缓冲区局部选项,在别的窗口里编辑同一个缓冲区时,这些选项不会被更改。但窗口局部
选项会被重新设置。
modeline-version
如果要模式行只适用于某些 Vim 版本,可在使用 "vim:" 或 "Vim:" 时指定版本号:
vim{vers}: {vers} 或更高版本
vim<{vers}: {vers} 之前的版本
vim={vers}: {vers} 版本
vim>{vers}: {vers} 之后的版本
Vim 7.0 的 {vers} 值为700 (主版本号乘一百,加副版本号)。
例如,要指定只适用于 Vim 7.0 或更高版本的模式行:
/* vim700: set foldmethod=marker */
要为 Vim 7.2 之前的版本设置模式行:
/* vim>702: set cole=2: */
"vim" 和 ":" 之间不能有空格。
'modelines' 选项设置要检查模式行的行数。如果关闭 'modeline' 或者 'modelines'
为零,不会检查模式行。
注意 第一种形式会占用该行的其余部分。所以下行:
/* vi:ts=4: */
会为拖尾的 "*/" 报错。下面的形式就可以:
/* vi:set ts=4: */
如果检测到错误,会忽略该行的其余部分。
要在 set 命令里包含 ':',可在冒号之前加上 '\'。':' 之前的反斜杠会被删除。例如:
/* vi:set fillchars=stl\:^,vert\:\|: */
会设置 'fillchars' 选项为 "stl:^,vert:\|"。':' 前只删除一个反斜杠。因此要表示
"\:",需写成 "\\:"。
E992
为了安全原因,不支持除了 "set" 以外的任何命令 (不然,有人可能会用模式行来创建
一个特洛伊木马文本文件)。而且也不是所有选项都可设置。对有些选项而言,会设置一
个标志位来激活 sandbox 。有的选项则仅在 'modelineexpr' 置位时 (缺省关闭) 才能
从模式行设置。
即便如此,使用模式行仍有一定风险。例如,如果有些开玩笑的人将 'textwidth' 设置
为 5,可能导致所有行会被意外回绕。因此,在编辑不信任的文本时最好关闭模式行。像
mail 文件类型插件就是这么做的。
提示: 如果想执行除选项设置外的其他操作,可定义自动命令,并检查文件是否包含特定
字符串。例如:
au BufReadPost * if getline(1) =~ "VAR" | call SetVar() | endif
同时定义 SetVar() 函数,对包含 "VAR" 行的文件执行特定操作。
下表给出所有选项,包括全名及可选的缩写。可任意使用两种形式。
本文档里,布尔型选项的 "置位" 意味着输入 ":set option"。选项的 "复位" 意味着使
用 ":set nooption"。
有些选项有两个缺省值: "Vim 缺省" 在没有置位 'compatible' 时使用,而 "Vi 缺省"
在置位 'compatible' 时使用。
多数选项适用于所有的窗口和缓冲区。但也有些选项专门控制窗口里文本显示的方式。每
个窗口可设置不同值。比如 'list' 选项,可以在一个窗口置位而在显示相同文本的另一
个窗口复位,从而同时查看同一文件的不同视图。还有些选项专用于特定的文件。每个文
件或者缓冲区可设置不同值。比如 'textwidth' 选项,可在普通的文本文件里设为 78,
而在 C 程序里设为 0。
全局 所有缓冲区和窗口使用同一个选项值
局部于窗口 每个窗口有自己的选项值
局部于缓冲区 每个缓冲区有自己的选项值
创建新窗口时,使用当前活动窗口的选项值作为窗口局部选项的缺省值。缓冲区局部选项
则取决于 'cpoptions' 选项的 's' 和 'S' 标志位。包含 's' (缺省) 时,在第一次进
入该缓冲区时,会从当前活动缓冲区复制选项值。包含 'S' 时,每次进入该缓冲区时,
都会复制当前缓冲区的选项值。这和全局选项几乎没有区别。's' 和 'S' 都未给出时,
在建立该缓冲区时,会从当前活动的缓冲区复制选项值。
隐藏选项 hidden-options
不是所有版本都支持所有的选项。这取决于支持的特性,有时也取决于系统。下面会在花
括号里提供这方面的评注。一个选项即使不支持也可以进行设置且不会报错。这些选项被
称为隐藏选项。不过,隐藏选项的值无法取回,因为设置的值不会被保存。
要测试选项 "foo" 是否可用 ":set" 设置:
if exists('&foo')
这里,隐藏选项也会返回真。要测试是否真正支持选项 "foo":
if exists('+foo')
E355
Q_op 提供选项的简短描述列表,可用于跳转。
'aleph' 'al' aleph Aleph
'aleph' 'al' 数值型 (MS-Windows 的缺省为 128,否则为 224)
全局
{仅当编译时加入 +rightleft 特性才有效}
希伯来字母表首个字母对应的 ASCII 码。希伯来模式下的键盘映射例程,包括
插入模式 (如果置位 'hkmap') 和命令行模式 (如果按了 CTRL-_),都会在
[aleph..aleph+26] 范围内输出希伯来字符。
aleph=128 用于 PC 编码,而 aleph=224 用于 ISO 8859-8。
见 rileft.txt 。
'allowrevins' 'ari' 'noallowrevins' 'noari'
'allowrevins' 'ari' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +rightleft 特性才有效}
允许在插入和命令行模式下使用 CTRL-_。缺省关闭,以防用户想输入 SHIFT-_
时误按了 CTRL-_ 进入反向插入模式,而不知如何退出。见 'revins'。
注意: 'compatible' 置位时会复位本选项。
'altkeymap' 'akm' 'noaltkeymap' 'noakm'
'altkeymap' 'akm' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +farsi 特性才有效}
本选项曾用于现已删除的波斯语支持。见 farsi.txt 。
'ambiwidth' 'ambw'
'ambiwidth' 'ambw' 字符串 (缺省: "single")
全局
仅在 'encoding' 为 "utf-8" 或其他 Unicode 编码时有效。指定 Vim 如何处
理东亚二义性宽度字符类 (East Asian Width Class Ambiguous) (例如欧元符
号、注册记号、版权记号、希腊字母、西里尔字母等等)。
目前有两个可选值:
"single": 宽度和 US-ASCII 字符相同。多数用户希望如此。
"double": 宽度为 US-ASCII 字符的两倍。
E834 E835
如果 'listchars' 或 'fillchars' 包含此类字符,不能使用 "double" 值。
调用 setcellwidths() 时,也可能报告同样的错误。
在 setcellwidths() 指定的字符范围里,本选项会被覆盖。
在一些 CJK 字体里,这些字符的字形宽度完全由它们在传统的 CJK 编码里占据
字节的数目决定。在那些编码里,欧元、注册记号、希腊/西里尔字母等占据两
个字节,因而在这些字体里,它们会用 "宽" 字形显示。这也包括文本文件里制
表用的一些画线字符。因此,在使用 CJK 字体的 GUI 或者终端 (模拟器) (包
括带有 "-cjkwidth" 选项的 xterm) 里运行 Vim 时,应把本选项设为
"double",以匹配 Vim 里这些字体的实际字形宽度。CJK MS-Windows 上,如果
系统 locale 为 CJK locale 之一,可能也应把本选项设为 "double"。见
Unicode Standard Annex #11 (http://www.unicode.org/reports/tr11)。
编译时加入 +termresponse 特性并且 t_u7 设为获取光标位置报告的转义
序列时,Vim 会在启动时自动设置本选项。响应值可通过 v:termu7resp 获
取。
'antialias' 'anti' 'noantialias' 'noanti'
'antialias' 'anti' 布尔型 (缺省: 关闭)
全局
{仅当编译时加入 macOS 的 GUI 支持才有效}
仅在 macOS v10.2 及以后版本的 Vim GUI 版本上有效。打开时,Vim 会使用平
滑 ("反锯齿") 字体,在适配的显示器以及字号下可提高可读性。当 'guifont'
设为缺省值 (空串) 时,置位本选项有时可能会引起问题。
注意: 'compatible' 置位时会复位本选项。
'arabic' 'arab' 'noarabic' 'noarab'
'arabic' 'arab' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +arabic 特性才有效}
置位本选项以编辑阿拉伯文本。
置位本选项会:
- 置位 'rightleft' 选项,除非 'termbidi' 已置位。
- 置位 'arabicshape' 选项,除非 'termbidi' 已置位。
- 设置 'keymap' 选项为 "arabic";插入模式下 CTRL-^ 会切换英语和阿拉伯
语的键盘映射。
- 置位 'delcombine' 选项。
注意 要使用阿拉伯文本,'encoding' 必须是 "utf-8"。
复位本选项会:
- 复位 'rightleft' 选项。
- 关闭 'keymap' 的使用 (但不改变其值)。
注意 这里不复位 'arabicshape' 和 'delcombine' (这些是全局选项)。
注意: 'compatible' 置位时会复位本选项。
另见 arabic.txt 。
'arabicshape' 'arshape'
'noarabicshape' 'noarshape'
'arabicshape' 'arshape' 布尔型 (缺省打开)
全局
{仅当编译时加入 +arabic 特性才有效}
打开且 'termbidi' 关闭时,启动必要的可视字符校正,确保阿拉伯文本正确显
示。本质上它打开了字型重整;这是一个广义的术语,包括:
a) 根据词内位置 (开头、中间、结尾和单独出现) 改变/调整字符的形状。
b) 启动组合字符的能力
c) 启动一些字符所需的组合
关闭时,显示每个字符各自的独立字形。
阿拉伯语是一个复杂的语言,还需要其他的设置。详见 arabic.txt 。
注意: 'compatible' 置位时会复位本选项。
'autochdir' 'acd' 'noautochdir' 'noacd'
'autochdir' 'acd' 布尔型 (缺省关闭)
全局
{仅当编译时加入此特性才有效,用 exists("+autochdir")
可以检查}
打开时,Vim 会在打开文件、切换缓冲区、删除缓冲区或者打开/关闭窗口时,
切换当前工作目录。具体来说,切换到打开或者选中的文件的所在目录。
缓冲区没有名字也就没有目录,因此切换到此类缓冲区时,不会改变当前目录。
注意: 打开本选项会使得某些插件无法工作。
'autocomplete' 'ac' 'noautocomplete' 'noac'
'autocomplete' 'ac' 布尔型 (缺省关闭)
全局或局部于缓冲区 global-local
{仅在有定时支持的平台上有效}
打开时,Vim 会在用户键入时实时显示补全菜单,和 i_CTRL-N 类似,但无需
手动触发。见 ins-autocompletion 。
'autocompletedelay' 'acl'
'autocompletedelay' 'acl' 数值型 (缺省为 0)
全局
用户输入后自动补全菜单出现的延迟时间,以毫秒为单位。如果不希望菜单太快
弹出,可将此值设置为略高于打字速度。见 ins-autocompletion 。
'autocompletetimeout' 'act'
'autocompletetimeout' 'act' 数值型 (缺省为 80)
全局
用于衰减时间片补全算法的初始超时 (以毫秒为单位)。从此值开始,每个更慢
的源的超时会递减一半,直到最小值为止。所有的源都会运行,但更慢的源优先
级会迅速降低。缺省值已经过调整,即使是在有多个慢速源的慢速系统上,菜单
弹出时间仍会保持在 ~200ms 左右。很少需要改变此值。只接受 80 或更高的值
合法。
特殊情况: 'complete' 包含函数源 ("F" 或 "o") 时,会临时使用比本选项更
长的超时,例如 LSP 服务器载入模块等情况下需要更长的时间,因此这些源会
启用超时 ~1s。
见 ins-autocompletion 。
'autoindent' 'ai' 'noautoindent' 'noai'
'autoindent' 'ai' 布尔型 (缺省关闭)
局部于缓冲区
开启新行 (插入模式下输入 <CR>,或者使用 "o" 或 "O" 命令) 时,自动从当
前行复制缩进量。在新行上,如果未输入内容 (除了 <BS> 或 CTRL-D 外),按
<Esc>、CTRL-O 或 <CR> 会删除缩进。除非 'cpoptions' 里包含了 'I' 标志
位,否则移动光标到其他行也会触发相同效果。
打开本选项时,排版 (用 "gq" 命令或者插入模式下到达了 'textwidth') 会使
用第一行的缩进量。
打开 'smartindent' 或 'cindent' 时,缩进量的调整方式会有所不同。
'paste' 选项置位时会临时复位本选项。'paste' 复位时会恢复本选项。
'autoread' 'ar' 'noautoread' 'noar'
'autoread' 'ar' 布尔型 (缺省关闭)
全局或局部于缓冲区 global-local
文件检测到在 Vim 外被修改且在 Vim 里未被改动时,会自动重新读取。但文件
在外部被删除时,不会这么做,这样还能保留删除前的文本内容。文件恢复后才
重新读取。 timestamp
如果本选项有局部值,下面的命令会切换回直接使用全局值:
:set autoread<
'autoshelldir' 'asd' 'noautoshelldir' 'noasd'
'autoshelldir' 'asd' 布尔型 (缺省关闭)
全局
打开后,在终端窗口里运行的外壳改变目录时,Vim 会自动改变当前工作目录。
为此,需要正确配置外壳,使其在当前目录改变时释出 OSC 7 转义序列。例
如,Linux 上如果用 bash 或 zsh 的话,可在外壳的 profile 里执行
/etc/profile.d/vte.sh。bash 可用以下代码 (放在 bash 初始文件里):
if [[ -n "$VIM_TERMINAL" ]]; then
PROMPT_COMMAND='_vim_sync_PWD'
function _vim_sync_PWD() {
printf '\033]7;file://%s\033\\' "$PWD"
}
fi
或者,在 zsh 初始文件里:
if [[ -n "$VIM_TERMINAL" ]]; then
autoload -Uz add-zsh-hook
add-zsh-hook -Uz chpwd _vim_sync_PWD
function _vim_sync_PWD() {
printf '\033]7;file://%s\033\\' "$PWD"
}
fi
在 fish 初始文件里:
if test -n "$VIM_TERMINAL"
function _vim_sync_PWD --on-variable=PWD
printf '\033]7;file://%s\033\\' "$PWD"
end
end
另一个办法可见 terminal-autoshelldir 。
OSC 序列如果解析失败,会报错 E1179 。
'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 。
注意 不是所有命令都应用本选项。为此可用 'autowriteall'。
'buftype' 为 "nowrite"、"nofile"、"terminal" 或 "prompt" 的缓冲区不会
自动保存。
小心使用 : 对缓冲区不想保存的临时修改,可能因本选项被强行保存。可先用
":file {name}" 给缓冲区换名来避免这种情况。
'autowriteall' 'awa' 'noautowriteall' 'noawa'
'autowriteall' 'awa' 布尔型 (缺省关闭)
全局
和 'autowrite' 类同,但也适用于 ":edit"、":enew"、":quit"、":qall"、
":exit"、":xit"、":recover" 命令以及 Vim 窗口关闭时。
置位本选项等同于同时置位了 'autowrite'。
'background' 'bg'
'background' 'bg' 字符串 (缺省为 "dark" 或 "light",见下)
全局
设为 "dark" 或 "light" 时,Vim 会试图选择适配深色或浅色背景的颜色。其
他值非法。Vim 会尝试根据使用的终端自动判断缺省值,但不一定总是准确。
设置本选项不会直接改变背景色,只是告诉 Vim 应适配的背景风格。要直接改
变背景色,见 :hi-normal 。
'background' 改变时,Vim 会根据新值调整缺省的颜色组。但已用于语法高亮
的颜色不会改变。 g:colors_name
已经载入色彩方案时 ("g:colors_name" 变量已设置),'background' 的改变会
导致该色彩方案被重新载入。如果该方案会根据 'background' 自动调整,效果
会符合预期。但如果该方案自己设置 'background',实际效果可能会被撤销。
必要时可先删除 "g:colors_name" 变量。
复原 'background' 为其缺省值时:
:set background&
Vim 会尝试猜测其值。GUI 下通常可用,终端中不一定准确。
如果 GUI 支持深色主题,可以在 'guioptions' 中使用 "d" 标志位,见
'go-d' 。
t_RB 选项有设置时,Vim 会使用它从终端请求背景色。当返回的 RGB 色与
'background' 的深浅不符时,会调整 'background' 并重画屏幕。这可能会有
副作用,如果怀疑有问题,可在 .vimrc 里复位 t_RB 。 t_RB 的响应
值可从 v:termrbgresp 中获取。
启动 GUI 时,'background' 的缺省值是 "light"。当 .gvimrc 里未设置该值
而 Vim 检测到实际背景很深时,'background' 才会被设为 "dark"。但这会在
.gvimrc 读入 后 才发生 (因为窗口需要被打开才能发现实际的背景色)。要避
免延迟检测,在使用 'background' 值的命令之前 (比如,在 ":syntax on" 之
前),可在 .gvimrc 里先放上 ":gui" 命令来强制打开 GUI 窗口。
MS-Windows 上的缺省值是 "dark"。
其他系统上,当 'term' 为 "linux"、"screen.linux"、"cygwin" 或 "putty"
或当 $COLORFGBG 建议使用深色 (译者注: 部分终端会设置 COLORFGBG,格式通
常为 "前景;后景",两者都是 0-15 间的色彩值,有的终端可能有三个参数等变
种。Vim 会根据最后一个参数是否为 0-6 或 8 来判断是否深色) 时,缺省值是
"dark",否则是 "light"。
:terminal 命令和 term_start() 函数会使用 'background' 值来决定终端
窗口启动时使用白色还是黑色背景。
本选项通常在 .vimrc 文件里设置。可根据终端名选择。例如:
:if &term == "pcterm"
: set background=dark
:endif
设置本选项时,高亮组的缺省设置会相应调整。要调整其它设置,在设置本选项
之后 再使用 ":highlight" 命令。
本选项也在 "$VIMRUNTIME/syntax/syntax.vim" 文件里使用,用来选择语法高
亮的颜色。在改变本选项后,必须再次载入 syntax.vim 才能看到新效果。这可
以通过 ":syntax on" 完成。
'backspace' 'bs'
'backspace' 'bs' 字符串 (Vim 缺省: "indent,eol,start",
Vi 缺省: "")
全局
本选项会影响 <BS>、<Del>、CTRL-W 和 CTRL-U 在插入模式下的工作方式。这
是逗号分隔的项目列表。每个项目允许一种退格删除的内容:
值 效果
indent 允许在自动缩进上退格
eol 允许在换行符上退格 (连接行)
start 允许在插入开始位置上退格;CTRL-W 和 CTRL-U 在到达插入开始位置
时会停留一次。
nostop 类似于 start,但 CTRL-W 和 CTRL-U 不会在插入开始位置停留。
该值为空时,会使用 Vi 兼容的退格方式,上述的各种方式都不可用。
为了和 5.4 及更早的版本后向兼容,可用:
值 效果
0 同 ":set backspace=" (Vi 兼容)
1 同 ":set backspace=indent,eol"
2 同 ":set backspace=indent,eol,start"
3 同 ":set backspace=indent,eol,nostop"
如果 <BS> 或 <Del> 键和预期不符,见 :fixdel 。
注意: 'compatible' 置位时会设置本选项为 ""。
'backup' 'bk' 'nobackup' 'nobk'
'backup' 'bk' 布尔型 (缺省关闭)
全局
覆盖文件前先创建备份。成功写入后保留该备份。如果只希望写入期间备份,成
功写入后不保留,复位本选项并置位 'writebackup' 选项 (这是缺省行为)。如
果完全不需要备份,同时复位两个选项 (如果文件系统差不多满了,这会有用)。
更多的解释可见 backup-table 。
匹配 'backupskip' 模式时,不会建立备份。
设置 'patchmode' 时,备份文件会改名,成为文件的最旧版本。
注意: 'compatible' 置位时会复位本选项。
'backupcopy' 'bkc'
'backupcopy' 'bkc' 字符串 (Vi 在 Unix 上的缺省: "yes",其他: "auto")
全局或局部于缓冲区 global-local
保存文件并建立备份时,本选项指定此操作应如何完成。这是逗号分隔的单词列
表。
主要值包括:
"yes" 先为文件建立备份,然后覆盖原来的文件
"no" 先为文件换名,然后写入一个新文件
"auto" 从上面两种方式里选用最佳方式
可与上述值一起使用的附加设置有:
"breaksymlink" 写入时总断开符号链接
"breakhardlink" 写入时总断开硬链接
通过建立备份并覆盖原来的文件的方式:
- 需要额外时间来复制文件。
+ 文件的特殊属性,包括 (硬 / 符号) 链接或者有资源分叉 (resource
fork) 等,都会被保留。
- 文件为链接时,备份会使用链接名,而非实际文件名。
通过给文件换名并写入新文件的方式:
+ 速度很快。
- 有时并非所有的文件属性都能被复制到新文件。
- 文件为链接时,新文件将不再是链接。
"auto" 值是折衷方案: 如果换名无副作用 (属性可保留且文件非链接),则用换
名。否则改用备份方式。
"breaksymlink" 和 "breakhardlink" 值可以和 "yes"、"no" 以及 "auto" 中
的任何一个混合使用。它们会强制按 "no" 的方式断开符号或硬链接: 给原来的
文件换名成为备份,并用原文件名写入新文件。这适用于源代码树等场景,当所
有的文件都是符号或者硬链接时。本地代码树会保留修改后的文件,而原有的源
文件不受影响。
crontab
一种情形下 "no" 和 "auto" 可能会有问题: 一个程序打开文件、启用 Vim 编
辑该文件、然后测试打开的文件 (通过文件描述符) 是否发生改变。该测试会检
查备份文件而非新建立的文件。"crontab -e" 就是这样一个例子,若干像
inotify 一样的 file-watcher 守护进程也是如此。这些情况下要考虑调整本
选项。
用备份方式时,原始文件会被清空,然后填入新的文本。这意味着原文件的文件
权限、拥有者和符号链接都保持不变。但备份文件是新建的,拥有者是当前编辑
用户,组继承自原文件。如果无法设置该组,组权限会退化为与其他用户 (非用
户和组成员) 相同。
用换名方式时刚好相反: 备份文件保留原文件的所有属性,新写入的文件由当前
用户拥有。如果原文件曾是 (硬/符号) 链接,新文件将不再是链接!因此,
"auto" 对链接文件不使用换名方式。新写入文件会尝试继承原文件的拥有者和
组,如果系统拒绝,"auto" 也会不使用换名方式。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'backupdir' 'bdir'
'backupdir' 'bdir' 字符串 (缺省值:
Amiga: ".,t:"
Win32: ".,$TEMP,c:/tmp,c:/temp"
Unix: ".,~/tmp,~/")
全局
逗号分隔的存放备份文件的目录名列表。
- 备份文件会在列表中首个可用目录里创建。该目录必须已经存在,Vim 不会自
动建立目录。
- 空值表示不创建备份文件 ('patchmode' 将不起作用!)。写入操作也可能因
此失败。
- 目录 "." 代表备份文件会放在和当前文件相同的目录里。
- "./" (或 MS-Windows 环境的 ".\") 开始的目录代表备份文件会放在相对于
当前文件的路径下。开头的 "." 会被当前文件的路径名替换 (目录中间部分
的 "." 没有特殊含义)。
- 忽略逗号后的空格,其余空格视为目录名的一部分。如果目录名需以空格开
头,在前面加反斜杠。
- 要在目录名里包含逗号,在前面加反斜杠。
- 目录名可以 '/' 结尾。
- Unix 和 Win32 上,如果目录以两个路径分隔符 "//" 结尾,备份文件名会使
用文件的完整路径生成,并将其中所有路径分隔符替换为百分号 '%'。从而保
证备份目录中备份文件名的唯一性。
Win32 上,也可以用 "\\" 结尾。不过,如果后面有逗号,必须使用 "//",
因为 "\\" 会把逗号当做文件名的一部分。所以,建议始终使用 '//' 而不是
'\\'。
- 环境变量被扩展 :set_env 。
- 注意 '\' 字符的使用,在空格前需要一个反斜杠,真正的反斜杠则需要两个
(见 option-backslash )。例如:
:set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
- 为了和 Vim 3.0 版本后向兼容,本选项开头的 '>' 会被删除。
另见 'backup' 和 'writebackup' 选项。
如果需要在 Unix 上隐藏备份文件,可考虑下值:
:set backupdir=./.backup,~/.backup,.,/tmp
要使之正确工作,需要在每个目录和主目录里先建立 ".backup" 目录。
建议使用 :set+= 和 :set-= 来从列表里加减目录。这可以避免未来版本更
改缺省值而引发的问题。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'backupext' 'bex' E589
'backupext' 'bex' 字符串 (缺省为 "~",VMS 上: "_")
全局
用于构造备份文件名的后缀字符串。缺省值很特别,可防止备份文件意外覆盖已
有文件。也可用 ".bak",但要确保不会覆盖已有的同名文件。
只能使用普通的文件名字符;"/\*?[|<>" 都不合法。
要想保留多个备份,可在写入文件前,通过 BufWritePre 自动命令修改
'backupext',例如加入时间戳。
:au BufWritePre * let &bex = '-' .. strftime("%Y%b%d%X") .. '~'
要把备份放在不同的目录里,可用 'backupdir'。
'backupskip' 'bsk'
'backupskip' 'bsk' 字符串 (缺省: "$TMPDIR/*,$TMP/*,$TEMP/*"
Unix: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*"
Mac: "/private/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*")
全局
文件名模式列表。当某个模式匹配要写入的文件名时,不会为该文件创建备份。
模式同时匹配文件名和完整路径名。模式的用法和 :autocmd 类似,见
autocmd-patterns 。
处理特殊字符时参考 option-backslash 。
$TMPDIR、$TMP 或 $TEMP 未定义时,缺省值不会包含未定义的目录。"/tmp/*"
只用于 Unix。
警告: 关闭备份意味着如果保存失败,则无论何种原因 Vim 退出时,会同时丢
失原文件和最新的修改。只有在完全不介意丢失整个文件时才可关闭备份。
注意 这里不会自动扩展环境变量。如果想用 $HOME,必须显式展开,例如:
:let &backupskip = escape(expand('$HOME'), '\') .. '/tmp/*'
注意 缺省值也确保 "crontab -e" 能工作 (如果给原来文件换名来建立备份,
crontab 不会看到新建立的文件)。另见 'backupcopy' 和 crontab (译者
注: 此处假定 "crontab -e" 会在某个 tmp 目录下创建用于编辑的临时文件)。
'balloondelay' 'bdlay'
'balloondelay' 'bdlay' 数值型 (缺省: 600)
全局
{仅当编译时加入 +balloon_eval 特性才有效}
气泡弹出前的延迟,以毫秒为单位。见 balloon-eval 。
'ballooneval' 'beval' 'noballooneval' 'nobeval'
'ballooneval' 'beval' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +balloon_eval 特性才有效}
在 GUI 中启动 balloon-eval 功能。
'balloonevalterm' 'bevalterm' 'noballoonevalterm'
'nobevalterm'
'balloonevalterm' 'bevalterm' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +balloon_eval_term 特性才有效}
在终端中启动 balloon-eval 功能。
'balloonexpr' 'bexpr'
'balloonexpr' 'bexpr' 字符串 (缺省 "")
全局或局部于缓冲区 global-local
{仅当编译时加入 +balloon_eval 特性才有效}
计算气泡显示文本的表达式。仅在 'ballooneval' 或 'balloonevalterm' 打开
时使用。可用以下变量:
v:beval_bufnr 要显示气泡的缓冲区号
v:beval_winnr 窗口编号
v:beval_winid 窗口 ID
v:beval_lnum 行号
v:beval_col 列号 (字节位置)
v:beval_text 鼠标指针所在或之后的单词
气泡显示仅限于普通文本。可考虑使用弹出窗口代替,见
popup_beval_example 。弹出窗口可以使用高亮并显示边框。
表达式的计算不能有副作用!
示例:
function MyBalloonExpr()
return 'Cursor is at line ' .. v:beval_lnum ..
\', column ' .. v:beval_col ..
\ ' of file ' .. bufname(v:beval_bufnr) ..
\ ' on word "' .. v:beval_text .. '"'
endfunction
set bexpr=MyBalloonExpr()
set ballooneval balloonevalterm
要异步获取气泡内容,可见 balloon_show() 。此时 'balloonexpr' 的计算应
返回空串。如果气泡只显示 "0",说明所用函数可能没有返回任何内容。
注意: 仅当光标在文本字符上时才会显示气泡。如果 'balloonexpr' 的计算结
果非空,Vim 不会试图给外部调试器 (Netbeans 或 Sun Workshop) 发送消息。
表达式以 s: 或 <SID> 开始时,会用脚本 ID ( local-function ) 替代这些
前缀。例如:
set bexpr=s:MyBalloonExpr()
set bexpr=<SID>SomeBalloonExpr()
否则,表达式会在设置本选项的脚本上下文里计算,这样就可访问该脚本的局部
项目。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
要检查是否支持多行气泡:
if has("balloon_multiline")
如果支持,\n" 字符会换行。表达式计算结果为 List 时,会把每个列表项转
换为字符串,再用 "\n" 连接。
注意: 'compatible' 置位时会设置本选项为 ""。
'belloff' 'bo'
'belloff' 'bo' 字符串 (缺省 "")
全局
指定要关闭响铃的事件列表,用逗号分隔。插入模式下的事件尤其常用。
也可配合 'visualbell' 显示可视响铃。
项目 代表事件
all 所有事件。
backspace 按 <BS> 或 <Del> 删除时出错。
cursor 插入模式下用光标键或 <PageUp>/<PageDown> 移动失败。
complete i_CTRL-X_CTRL-K 或 i_CTRL-X_CTRL-T 补全时出错。
copy 插入模式下用 i_CTRL-Y 或 i_CTRL-E 复制字符时失败。
ctrlg 插入模式下不能识别 <C-G> 之后的字符。
error 发生其它错误 (例如试图对末行进行连接) (多用于普通模式或命
令行模式)。
esc 普通模式下按了 <Esc>。
ex 可视模式下按 Q 时会报错。
hangul 忽略。
insertmode 'insertmode' 打开时按了 <Esc>。
lang 调用了 Lua/Mzscheme/TCL 的 beep 模块。
mess g< 没有输出可用。
showmatch 'showmatch' 函数里出错 (译者注: 找不到匹配的括号)。
operator cpo-E 在空区域上执行部分操作时出错。
register 插入模式下不能识别 <C-R> 之后的寄存器名。
shell 外壳输出 :! 时发出铃声。
spell 拼写检查时出错。
term :terminal 输出时发出铃声。
wildmode cmdline-completion 有多个匹配可用 (取决于 'wildmode' 设
置)。
最常用于调节插入模式下的响铃行为。普通模式和 Ex 命令中,响铃通常表示发
生了错误。此时可通过使用 "error" 关键字来关闭响铃。
'binary' 'bin' 'nobinary' 'nobin'
'binary' 'bin' 布尔型 (缺省关闭)
局部于缓冲区
编辑二进制文件前,应该置位本选项。也可用 Vim 的 -b 参数。打开本选项
时,一些选项的值会发生改变 (即使它们原本是打开的):
'textwidth' 会设为 0
'wrapmargin' 会设为 0
'modeline' 会被关闭
'expandtab' 会被关闭
此外,也不会使用 'fileformat' 和 'fileformats' 选项。文件的读写方式与
'fileformat' 设为 "unix" 时相同 (单个 <NL> 作为行分隔符)。
不会使用 'fileencoding' 和 'fileencodings' 选项。文件读取不经过转换。
注意: 打开 'bin' 选项后,在开始编辑 (另) 一个文件时,相关自动命令可能
会再次更改上述选项 (比如,'textwidth'),从而导致编辑出现问题。因此,在
文件载入后,可能需要重新置位 'bin'。
这些选项的原值会被保存,'bin' 从开到关时,会自动恢复。每个缓冲区都有独
立保存的一组选项值。
编辑文件时如果要置位 'binary',可用 ++bin 参数。这样无需手动输入
":set bin",避免影响所有格式的编辑文件。
写回文件时,只有原文件末行本来就包含 <EOL> 才会写入该行结束符 (普通非
二进制模式下,如果末行没有 <EOL>,Vim 会自动补一个;这会使文件变长)。
见 'endofline' 选项。
'bioskey' 'biosk' 'nobioskey' 'nobiosk'
'bioskey' 'biosk' 布尔型 (缺省打开)
全局
{仅适用于 MS-DOS}
为 MS-DOS 设计,不再支持。
'bomb' 'nobomb'
'bomb' 布尔型 (缺省关闭)
局部于缓冲区
保存文件时,如果满足以下条件,在文件开头会写入 BOM (Byte Order Mark,
字节顺序标记):
- 本选项打开
- 'binary' 选项关闭
- 'fileencoding' 为 "utf-8"、"ucs-2"、"ucs-4" 或其小端序/大端序变种。
有些应用程序使用 BOM 来识别文件编码。通常用于 MS-Windows 上的 UCS-2 文
件。对其他一些程序,这会造成麻烦,比如: "cat file1 file2" 会使 file2
的 BOM 出现在结果文件的中间。gcc 不接受 BOM。
读入文件且 'fileencodings' 以 "ucs-bom" 开头时,Vim 会检查 BOM 是否存
在,并相应地自动设置 'bomb'。
除非置位 'binary',否则 BOM 会从首行移除,因此编辑时看不到。如果没有更
改相关设置,保存文件时会自动恢复 BOM。
'breakat' 'brk'
'breakat' 'brk' 字符串 (缺省为 " ^I!@*-+;:,./?")
全局
{仅当编译时加入 +linebreak 特性才有效}
本选项指定在 'linebreak' 打开时可换行的字符。只能使用 ASCII 字符,但
'encoding' 为 8 位编码时,也可用 8 位字符。
'breakindent' 'bri' 'nobreakindent' 'nobri'
'breakindent' 'bri' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +linebreak 特性才有效}
回绕行会保持视觉缩进 (和行首空白数目相同),从而保留文本的水平块结构。
注意: 'compatible' 置位时会复位本选项。
'breakindentopt' 'briopt'
'breakindentopt' 'briopt' 字符串 (缺省为空)
局部于窗口
{仅当编译时加入 +linebreak 特性才有效}
'breakindent' 所用设置。包含以下逗号分隔的可选条目:
min:{n} 'breakindent' 生效后,文本断行时保留的最小宽度。如
果文本缩进后窄于此宽度,会调整缩进。从而避免因为垂
直空间占用过多导致断行过短或过度靠右。
(缺省: 20)
shift:{n} 'breakindent' 生效后,回绕行会在行首额外缩进指定数
量的字符。可实现动态法语段落缩进 (负位移) 或强调行
缩进 (正位移)。
(缺省: 0)
sbr 在显示回绕缩进前,会显示 'showbreak' 值。
(缺省: 关闭)
list:{n} 为匹配编号或无编号列表 (使用 'formatlistpat' 设置)
的行额外缩进指定数量。
(缺省: 0)
list:-1 同上,但额外缩进使用 'formatlistpat' 的匹配宽度。
column:{n} 缩进到列 {n}。覆盖其他子选项。注意: 如果
'showbreak' 值过长,可能会导致额外缩进。
(缺省: 关闭)
'browsedir' 'bsdir'
'browsedir' 'bsdir' 字符串 (缺省为 "last")
全局
{仅适用于 Motif、GTK、Mac 和 Win32 GUI}
文件浏览器使用的目录:
last 使用文件浏览器最近打开或保存文件时使用的所在目录。
buffer 使用相关缓冲区所在目录。
current 使用当前目录。
{path} 使用指定目录。
'bufhidden' 'bh'
'bufhidden' 'bh' 字符串 (缺省: "")
局部于缓冲区 local-noglobal
本选项指定缓冲区不再于窗口出现时的行为:
<empty> 跟随全局 'hidden' 选项
hide 隐藏缓冲区 (不卸载),即使没有置位 'hidden' 也是如此
unload 卸载缓冲区,即使置位 'hidden' 也是如此; :hide 命令也
会卸载缓冲区
delete 从缓冲区列表里删除缓冲区,即使置位 'hidden' 也是如此;
:hide 命令也会删除缓冲区,和 :bdelete 类同
wipe 从缓冲区列表里真正删除缓冲区,即使置位 'hidden' 也是如
此; :hide 命令也会真正删除缓冲区,和 :bwipeout 类
同
小心: 使用 "unload"、"delete" 或 "wipe" 值时,缓冲区未保存的改动会无预
警丢失。另外,这些值也会导致临时切换缓冲区的自动命令失效。
本选项和 'buftype' 和 'swapfile' 配合使用,可指定特殊的缓冲区类型。见
special-buffers 。
'buflisted' 'bl' 'nobuflisted' 'nobl' E85
'buflisted' 'bl' 布尔型 (缺省: 打开)
局部于缓冲区
本选项置位时,缓冲区会在缓冲区列表里显示。复位时,不能用 ":bnext"、
"ls"、Buffers 菜单等访问本缓冲区。
Vim 会为仅用于记住文件名或位置标记的缓冲区复位本选项。开始编辑缓冲区
时,Vim 会置位本选项,但用 ":buffer" 切换缓冲区时不会。
'buftype' 'bt' E382
'buftype' 'bt' 字符串 (缺省: "")
局部于缓冲区 local-noglobal
本选项值指定缓冲区类型:
<empty> 普通缓冲区
nofile 非文件缓冲区,即与文件无关且不会写回的缓冲区
nowrite 不会写回的缓冲区
acwrite 总是用 BufWriteCmd 自动命令写回的缓冲区
quickfix 快速修复缓冲区,包含错误列表 :cwindow 或位置列表
:lwindow
help 帮助缓冲区 (不应手动设置此值)
terminal 用于 terminal 的缓冲区 (不应手动设置此值)
prompt 提示缓冲区,仅末行可以编辑,用于插件,见
prompt-buffer
{仅当编译时加入 +channel 特性才有效}
popup 用于弹出窗口的缓冲区,见 popup
{仅当编译时加入 +textprop 特性才有效}
本选项和 'bufhidden' 和 'swapfile' 配合使用,可指定特殊的缓冲区类型。
见 special-buffers 。
要返回窗口类型,另见 win_gettype() 。
修改本选项需谨慎。可能有很多副作用!例如,Vim 不会检查文件时间戳,外部
修改因而不会被发现。
"quickfix" 缓冲区只用于错误列表和位置列表。 :cwindow 和 :lwindow 命
令会设置此值,不应手动修改。
"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")
全局
指定改变字母大小写的实现细节 case 。包含以下逗号分隔的单词:
internal 使用 Vim 内部的大小写映射函数,此时当前 locale 不会影
响大小写映射。仅在 'encoding' 为 Unicode 编码之一、
"latin1" 或 "iso-8859-15" 时生效。"internal" 省略时,
会使用系统库函数 (如有) towupper() 和 towlower()。
keepascii 对 ASCII 字符 (0x00 到 0x7f) 使用美式大小写映射,此时
当前 locale 不起作用。这可能只影响土耳其语。
'cdhome' 'cdh' 'nocdhome' 'nocdh'
'cdhome' 'cdh' 布尔型 (缺省: 关闭)
全局
打开时,不带参数的 :cd 、 :tcd 和 :lcd 就像在 Unix 上那样,将当前
工作目录切换到 $HOME 。
关闭时,这些命令只会显示当前目录名。
Unix 上,本选项无效果 (译者注: 总会切换到主目录)。
< 为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
注意: 'compatible' 置位时会复位本选项。
'cdpath' 'cd' E344 E346
'cdpath' 'cd' 字符串 (缺省: 等价于 $CDPATH 或 ",,")
全局
这是一个目录列表。使用 :cd 、 :tcd 和 :lcd 命令且指定的是相对路径
(不以 "/"、"./" 或 "../" 开头) 时,会按此列表依次搜索目录。绝对路径不
使用 'cdpath' 选项。
'cdpath' 选项值使用和 'path' 相同的形式和语义。另见 file-searching 。
缺省值取自 $CDPATH,并在前面附加 ",",从而优先搜索当前目录。
如果不想接受来自 $CDPATH 的缺省值,可在 vimrc 文件里加入下面命令的修改
版本以覆盖本选项:
:let &cdpath = ',' .. substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
('cdpath' 的内容可传递给外壳,以便扩展文件名)。
'cedit'
'cedit' 字符串 (Vi 缺省: "",Vim 缺省: CTRL-F)
全局
命令行模式下用于打开命令行窗口的键。
'compatible' 关闭时的缺省值为 CTRL-F。
只允许不可显示字符。
该键可用单字符指定,但不易输入,建议使用 key-notation (如 <Up>、
<C-F>) 或插入记号加字母 (如 ^F 表示 CTRL-F) 的形式。例如:
:set cedit=^Y
:set cedit=<Esc>
Nvi 也有本选项,但只使用第一个字符。
见 cmdwin 。
注意: 'compatible' 复位时会设置本选项为 Vim 缺省值。
'charconvert' 'ccv' E202 E214 E513
'charconvert' 'ccv' 字符串 (缺省为 "")
全局
{仅当编译时加入 +eval 特性才有效}
用于进行字符编码转换的表达式。文件读写所用编码和期望的编码不同时,会计
算本表达式。
如果内部支持 iconv() 函数且能完成本次转换,不使用 'charconvert',因为
前者速度快得多。
从标准输入 -- 读入时不使用 'charconvert',因为没有对应的文件可用于转
换。必须先保存为文件才能进行转换,
本表达式成功时必须返回零、假值或空字符串,失败时则必须返回非零或真值。
可能遇到的编码名来自 'encoding'。此外也使用 'fileencodings' 和
'fileencoding' 里的名字。
"latin1"、"unicode"、"ucs-2"、"ucs-4" 和 "utf-8" 之间的转换由 Vim 内部
完成,而不使用 'charconvert'。
'viminfo' 包含 'c' 标志位时,'charconvert' 也用于转换 viminfo 文件,包
括 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 永远不会相同。
注意 v:charconvert_from 和 v:charconvert_to 可能与 'encoding' 不同。
Vim 内部会使用 UTF-8 代替 UCS-2 或 UCS-4。
使用不带参数的函数调用更有效率,见 expr-option-function 。
使用 'charconvert' 时,Vim 不负责文件加密。如果希望转换后对文件加密,
'charconvert' 需要自行处理。
表达式以 s: 或 <SID> 开始时,会用脚本 ID ( local-function ) 替代这些
前缀。例如:
set charconvert=s:MyConvert()
set charconvert=<SID>SomeConvert()
否则,表达式会在设置本选项的脚本上下文里计算,这样就可访问该脚本的局部
项目。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'chistory' 'chi'
E1542 E1543 E1544
'chistory' 'chi' 数值型 (缺省为 10)
全局
{仅当编译时加入 +quickfix 特性才有效}
快速修复堆栈要保存的快速修复列表数量。必须介于 1 和 100 之间。如果选项
值小于当前快速修复列表堆栈的项目总数,会删除最老的那些列表。如果当前快
速修复列表因此被删除,堆栈顶部的 (即最近创建的) 快速修复列表会成为新的
当前列表。更多信息可见 quickfix-stack 。
'cindent' 'cin' 'nocindent' 'nocin'
'cindent' 'cin' 布尔型 (缺省关闭)
局部于缓冲区
打开 C 程序自动缩进。插入模式下启动重新缩进的热键见 'cinkeys',缩进风
格由 'cinoptions' 设置。
'indentexpr' 非空时,会覆盖 'cindent' 的设置。
'lisp' 未打开而 'indentexpr' 和 'equalprg' 均为空时,"=" 操作符会使用
本算法缩进,而不调用外部程序。
见 C-indenting 。
如果不喜欢 'cindent' 的工作方式,可改用 'smartindent' 选项,或者用
'indentexpr' 自定义缩进。
'paste' 置位时不使用本选项。
注意: 'compatible' 置位时会复位本选项。
'cinkeys' 'cink'
'cinkeys' 'cink' 字符串 (缺省为 "0{,0},0),0],:,0#,!^F,o,O,e")
局部于缓冲区
键列表,这些键会触在插入模式下发当前行的重新缩进。只有打开 'cindent'
而且 'indentexpr' 为空时才会用到。
本选项的格式见 cinkeys-format 。
见 C-indenting 。
'cinoptions' 'cino'
'cinoptions' 'cino' 字符串 (缺省为 "")
局部于缓冲区
本选项影响 'cindent' 重新缩进 C 程序行的方式。具体格式见
cinoptions-values ,C 缩进总体信息可见 C-indenting 。
'cinscopedecls' 'cinsd'
'cinscopedecls' 'cinsd' 字符串 (缺省为 "public,protected,private")
局部于缓冲区
cino-g 使用的标识 C++ 作用域声明的关键字。例如,可用于识别 Qt 框架中
额外的作用域声明 "signals"、"public slots" 和 "private slots":
set cinscopedecls+=signals,public\ slots,private\ slots
'cinwords' 'cinw'
'cinwords' 'cinw' 字符串 (缺省为 "if,else,while,do,for,switch")
局部于缓冲区
使用 'smartindent' 或 'cindent' 时,这些关键字会触发下一行的额外缩进。
对于 'cindent',只有在合适位置 (在 {} 里) 里才会触发。
注意 'cinwords' 不使用 'ignorecase'。要忽略大小写,必须列出关键字所有
的大小写组合: "if,If,IF"。
'clipboard' 'cb'
'clipboard' 'cb' 字符串 (X-windows 的缺省为
"autoselect,exclude:cons\|linux",
其它为 "")
全局
{仅当在 GUI 版本或者包含 +xterm_clipboard 或
+wayland_clipboard 或 +clipboard_provider 特性时才
有效}
本选项是逗号分隔的名字列表。
注意: 一旦出现 "exclude:",其后就不能再追加项目。因此,不要用 += 从末
尾附加,而要用 ^= 从前面添加,例如:
set clipboard^=unnamed
GUI 版本见 'go-A' 。
使用 clipboard-providers 特性时,仅支持 "unnamed" and "unnamedplus"
值。如果编译时未加入 +clipboard 特性但加入了 +clipboard_provider
特性,那么只有这两个值有效,其他值均为非法。
识别以下名字:
clipboard-unnamed
unnamed 包含时,Vim 会使用剪贴板寄存器 '*' 来执行所有的抽出、
删除、修改和放置操作,而不是通常使用的无名寄存器。显式
指定寄存器时,不管 'clipboard' 是否包含 "unnamed" 都会
使用指定寄存器。剪贴板寄存器总是可以通过 "* 记法来显式
访问。另见 gui-clipboard 。
clipboard-unnamedplus
unnamedplus "unnamed" 标志位的变体,对所有通常使用无名寄存器来抽
出、删除、修改和放置操作,会使用剪贴板 '+' 寄存器
( quoteplus ) 而不是 '*' 寄存器。同时也包含 "unnamed"
值时,抽出动作 (但不包括删除、修改和放置) 会同时将文本
放入 '*' 寄存器。如果使用 Wayland 且合成器不支持主选择
区,将改用常规选择区。仅当 +X11 或
+wayland_clipboard 特性存在时才可用。以下方法可用于
检查本值是否可用:
if has('unnamedplus')
clipboard-autoselect
autoselect 和 'guioptions' 的 'a' 标志位工作方法类似: 给出时,每
当启动可视模式或者扩展可视区域时,Vim 都会试图成为窗口
系统全局选择区的拥有者,或者将所选文本放入选择区寄存器
"* 使用的剪贴板上。详见 'go-a' 和 quotestar 。
GUI 激活时,会使用 'guioptions' 的 'a' 标志位。否则,
会使用本 "autoselect" 标志位。也适用于无模式选择。
clipboard-autoselectplus
autoselectplus 和 "autoselect" 类同,但使用 + 寄存器而不是 * 寄存器。
相当于 'guioptions' 的 'P' 标志位。
clipboard-autoselectml
autoselectml 和 "autoselect" 类同,但只适用于无模式选择。相当于
'guioptions' 的 'A' 标志位。
clipboard-html
html 当剪贴板包含 HTML 内容时,粘贴操作会使用 HTML 格式。而
将文本放入剪贴板时,也会将其标识为 HTML。例如,从
Firefox 复制渲染后的页面会在 Vim 中粘贴为 HTML 源码,
而从 Vim 复制 HTML 源码可粘贴到 Firefox 的富文本编辑框
(rich edit) 中。
可能只需要临时启用本值,例如通过 BufEnter 自动命令。
只支持 GTK 2 或更高版本。
clipboard-exclude
exclude:{pattern}
定义模式,用来匹配不连接到 X 服务器或 Wayland 合成器的
终端名 'term'。可用于以下情形:
- 在控制台上运行 Vim,
- $DISPLAY/$WAYLAND_DISPLAY 的设置会使得应用程序在另一
个显示上打开,
- 不希望在控制台连接到 X 服务器/Wayland 合成器,但希
望在终端模拟器中连接。
如果希望完全禁止与 X 服务器/Wayland 合成器建立连接,可
用:
exclude:.*
这与 -X 或 -Y 命令行参数的效果相同。
注意 如果没有到 X 服务器的连接,窗口标题无法复原,也无
法访问剪贴板。Wayland 的情况也类似,但那里没有窗口标题
复原功能。
{pattern} 解析时忽略 'magic' 值,总是假定 'magic' 已打
开。
本选项的其余内容均视作 {pattern} 的一部分,因此该项必
须放在列表的最后。
'clipmethod' 'cpm'
'clipmethod' 'cpm' 字符串 (缺省值:
Unix: "wayland,x11"
VMS: "x11"
其他: "")
全局
{仅当编译时加入 +xterm_clipboard 、
+wayland_clipboard 或 +eval 特性才有效}
指定系统剪贴板的访问方法 (或剪贴板提供者),会按给定顺序依次尝试,使用
首个可用的方法。支持的方法有:
wayland Wayland 选择区
x11 X11 选择区
<name> 使用指定名字的剪贴板提供者
注意: 当运行 GUI 或在没有 Wayland 或 X11 的系统,如 Windows 或 MacOS
上运行 Vim 时,会忽略本选项并使用 GUI 或系统提供的剪贴板访问方法,这意
味着 v:clipmethod 会被设为 "none"。使用 clipboard-providers 特性是
个例外,启用剪贴板提供者后,现有的剪贴板功能会被覆盖。
选项值是逗号分隔的项目列表。从左到右依次解析列表,首个可用且能正常工作
的方法被用作实际访问剪贴板的方法。
v:clipmethod 变量保存当前使用的访问方法。
'cmdheight' 'ch'
'cmdheight' 'ch' 数值型 (缺省为 1)
全局或局部于标签页
命令行使用的屏幕行数。设置较大的值有助于避免 hit-enter 提示。
本选项值为每个标签页独立保存,每个标签页可单独设置。
'cmdwinheight' 'cwh'
'cmdwinheight' 'cwh' 数值型 (缺省为 7)
全局
命令行窗口 cmdwin 使用的屏幕行数。
'colorcolumn' 'cc'
'colorcolumn' 'cc' 字符串 (缺省为 "")
局部于窗口
{仅当编译时加入 +syntax 特性才有效}
逗号分隔的屏幕列列表,这些列会采用 ColorColumn 高亮 hl-ColorColumn 。
可用于对齐文本,但会使屏幕刷新变慢。
屏幕列可为绝对值,或带前导 '+' 或 '-' 的数值,后者会基于 'textwidth'
进行加减调整。
:set cc=+1 " 高亮 'textwidth' 的后一列
:set cc=+1,+2,+3 " 高亮 'textwidth' 的后三列
:hi ColorColumn ctermbg=lightgrey guibg=lightgrey
<
'textwidth' 为零时,会跳过带 '-' 和 '+' 的项目。
最多可高亮 256 列。
'columns' 'co' E594
'columns' 'co' 数值型 (缺省为 80 或终端宽度)
全局
屏幕列数。通常由终端初始化代码设置,无需手动完成。另见
posix-screen-size 。
在 GUI 或者可改变大小的窗口里运行时,设置本选项可以改变窗口的大小。如
果只想设置 GUI 下的窗口大小,可在 gvimrc 文件里放入设置命令。
当设置本选项超过物理显示能力时,可能会导致显示混乱。GUI 中不会出现这种
问题,Vim 会限制可显示列数。下列命令可用来设置可用的最大窗口宽度:
:set columns=9999
最小值为 12,最大值为 10000。
<
'comments' 'com' E524 E525
'comments' 'com' 字符串 (缺省为
"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-")
局部于缓冲区
逗号分隔的字符串列表,用于指示注释行的格式。见 format-comments 。
option-backslash 说明如何使用反斜杠来包含空格。
'commentstring' 'cms' E537
'commentstring' 'cms' 字符串 (缺省为 "/* %s */")
局部于缓冲区
注释行样板。该值里的 "%s" 会被注释文本替换,尽量在 %s 前后留空格。目前
用于为折叠增加标志,见 fold-marker 。也常用于注释插件 (如
comment-install )。
'compatible' 'cp' 'nocompatible' 'nocp'
'compatible' 'cp' 布尔型 (缺省打开, vimrc 或 gvimrc 文件存在则缺省
关闭, defaults.vim 里会重设)
全局
启用本选项可使 Vim 更兼容 Vi,或以更有用的方式工作。
这是一个特殊的选项,因为它的置位与复位会影响到很多其他设置。
注意: 置位或者复位本选项会产生多种不可预期的影响: 映射的解释方式,撤销
行为等等,都会有所变化。如果在 vimrc 文件里设置此选项,最好放在文件开
头附近。
缺省打开本选项,各种选项使用 Vi 缺省。本缺省值适合那些希望以 Vi 风格使
用 Vim 的用户,他们可能都不知道或不关心 'compatible' 选项。
Vim 启动时如果找到 vimrc 或 gvimrc 文件,会关闭本选项,并将所有未
修改的选项设为 Vim 缺省值。换而言之, vimrc 或 gvimrc 文件存在时使
用 Vim 缺省,否则使用 Vi 缺省。(注意: 这不适用于系统范围的 vimrc 或
gvimrc 文件,也不适用于通过 -u 参数指定的文件)。另见
compatible-default 和 posix-compliance 。
也可用 "-C" 参数来置位本选项,用 "-N" 来复位。见 -C 和 -N 。
'cpoptions' 可对 Vi 兼容行为作进一步调整。
本选项置位时,会设置若干其它选项,使得 Vim 尽量和 Vi 兼容。本选项复位
时,会设置若干选项,使 Vim 更有用。下表列出所有受影响的选项。
{?} 列指示选项何时受影响。
+ 代表 'compatible' 置位时,选项会设为 {设置值} 给出的值。
& 代表 'compatible' 置位时,选项会设为 {设置值} 给出的值, 且 当
'compatible' 复位时,会设为 Vim 缺省值。
- 代表 'compatible' 置位时,选项值不改变, 但 在 'compatible' 复位
时,会设为 Vim 缺省值。
{效果} 栏总结 'compatible' 置位时的相应变动效果。
选项 + 设置值 效果
'allowrevins' + 关闭 没有 CTRL-_ 命令
'antialias' + 关闭 不使用反锯齿字体
'arabic' + 关闭 复位阿拉伯语相关的选项
'arabicshape' + 打开 字型校正
'backspace' + "" 普通的退格
'backup' + 关闭 没有备份文件
'backupcopy' & Unix: "yes" 备份文件由复制产生
其它: "auto" 复制或者换名产生备份文件
'balloonexpr' + "" 计算气泡中显示的文本
'breakindent' + 关闭 回绕行时不缩进
'cedit' - {不改变} {仅当复位 'cp' 时设为 vim 缺省值}
'cdhome' + 关闭 非 Unix 上 ":cd" 不切换到主目录
'cindent' + 关闭 不打开 C 代码缩进
'compatible' - {不改变} {仅当复位 'cp' 时设为 vim 缺省值}
'copyindent' + 关闭 不复制缩进结构
'cpoptions' & (所有标志位) Vi 兼容性标志位
'cscopepathcomp'+ 0 标签列表中不显示目录
'cscoperelative'+ 关闭 不使用路径基础名作为前缀
'cscopetag' + 关闭 ":tag" 不使用 cscope
'cscopetagorder'+ 0 见 cscopetagorder
'cscopeverbose' + 关闭 见 cscopeverbose
'delcombine' + 关闭 unicode: 将基础和组合字符整个删除
'digraph' + 关闭 没有二合字母
'esckeys' & 关闭 插入模式不使用 <Esc> 开始键码的键
同时会关闭 modifyOtherKeys 和
xterm-bracketed-paste
'expandtab' + 关闭 制表不扩展为空格
'fileformats' & "" 没有自动文件格式检测,
"dos,unix" MS-Windows 除外
'formatexpr' + "" 使用 'formatprg' 进行自动排版
'formatoptions' & "vt" Vi 兼容的排版选项
'gdefault' + 关闭 ":s" 缺省不使用 'g' 标志位
'history' & 0 没有命令行历史
'hkmap' + 关闭 没有希伯来语键盘映射
'hkmapp' + 关闭 没有根据读音的希伯来语键盘映射
'hlsearch' + 关闭 没有搜索匹配高亮
'incsearch' + 关闭 没有增量搜索
'indentexpr' + "" 没有基于表达式的缩进
'insertmode' + 关闭 不以插入模式启动
'iskeyword' & "@,48-57,_" 关键字只包含字母数位和 '_'
'joinspaces' + 打开 句号后会插入两个空格
'modeline' & 关闭 没有模式行
'more' & 关闭 列表不暂停
'mzquantum' - {不改变} {仅当复位 'cp' 时设为 vim 缺省值}
'numberwidth' & 8 行号占用的最少列数
'preserveindent'+ 关闭 改变缩进时,不保留当前缩进结构
'revins' + 关闭 没有反向插入
'ruler' & 关闭 没有标尺
'scrolljump' + 1 滚动不跳跃
'scrolloff' + 0 没有滚动偏移
'shelltemp' - {不改变} {仅当复位 'cp' 时设为 vim 缺省值}
'shiftround' + 关闭 缩进不取整到 shiftwidth 的倍数
'shortmess' & "S" 不缩短信息
'showcmd' & 关闭 不显示命令字符
'showmode' & 关闭 不显示当前模式
'sidescrolloff' + 0 水平滚动时光标移动到屏幕边缘
'smartcase' + 关闭 不启用智能忽略大小写
'smartindent' + 关闭 不启用智能缩进
'smarttab' + 关闭 不启用智能制表宽度
'softtabstop' + 0 不使用软制表位
'startofline' + 打开 一些命令会移动到行首
'tagcase' & "followic" 搜索标签文件时 'ignorecase'
'tagrelative' & 关闭 标签文件名不接受相对路径
'termguicolors' + 关闭 终端不使用 highlight-(guifg|guibg)
'textauto' & 关闭 不启用自动文本模式检测
'textwidth' + 0 不启用自动行回绕
'tildeop' + 关闭 波浪符不视作操作符
'ttimeout' + 关闭 终端不会超时
'undofile' + 关闭 不使用撤销文件
'viminfo' - {不改变} {仅当复位 'cp' 时设为 vim 缺省值}
'virtualedit' + "" 光标只能定位在实际字符上
'whichwrap' & "" 左右移动的键不会回绕
'wildchar' & CTRL-E 命令行补全用 CTRL-E,而非 <Tab>
'writebackup' + 打开或关闭 取决于 +writebackup 特性
'complete' 'cpt' E535
'complete' 'cpt' 字符串 (缺省: ".,w,b,u,t,i")
局部于缓冲区
本选项控制使用 CTRL-P、CTRL-N 或 ins-autocompletion 时
ins-completion 补全的行为,也用于整行补全 i_CTRL-X_CTRL-L 。
它指定补全类型和需要扫描的位置,其值是逗号分隔的标志位列表:
. 扫描当前缓冲区 (忽略 'wrapscan')
w 扫描其他窗口里的缓冲区
b 扫描缓冲区列表里其他载入的缓冲区
u 扫描缓冲区列表里已卸载的缓冲区
U 扫描不在缓冲区列表里的缓冲区
k 扫描 'dictionary' 选项给出的文件
kspell 使用当前激活的拼写检查 spell
k{dict} 扫描文件 {dict}。可以给出多个 "k" 标志位,也可以使用模式。比
如:
:set cpt=k/usr/dict/*,k~/spanish
s 扫描 'thesaurus' 选项给出的所有文件
s{tsr} 扫描文件 {tsr}。可以给出多个 "s" 标志位,也可以使用模式。
i 扫描当前文件和其包含的头文件
d 扫描当前文件和其包含的头文件里的定义名或宏 i_CTRL-X_CTRL-D
] 标签补全
t 同 "]"
F{func} 调用函数 {func}。可指定多个 "F" 标志位。函数调用的方式和返回值
详见 complete-functions 。该值可以是函数名或 Funcref 。对
Funcref 而言,其值里的空格必须以一个反斜杠 ('\') 转义,而逗
号使用两个反斜杠 ('\\') 转义 (见 option-backslash )。
和其他源不同,函数可以提供从光标之前非关键字字符开始的补全,且
替代文本的开始位置也可以和其他源不同。
{func} 返回的字典里如果包含了 {"refresh": "always"},当引导文
本改变时,会再次调用此函数。
如果匹配生成可能会很慢,应该定期调用 complete_check() 来确保
Vim 的响应速度。这对 ins-autocompletion 尤其重要。
F 等价于 "F{func}",其中函数取自 'completefunc' 选项。
o 等价于 "F{func}",其中 {func} 取自 'omnifunc' 选项。如果插件
(如 LSP 客户端) 定义了 'omnifunc',可适用于本标志位。
已卸载的缓冲区不会被加载,因而其中定义的自动命令 :autocmd 也不会执
行,这使得有些文件的补全效果出人意表 (比如 gzipped 压缩的文件)。整行补
全也不会扫描已卸载的缓冲区。
缺省是 ".,w,b,u,t,i",它代表会扫描:
1. 当前缓冲区
2. 其它窗口的缓冲区
3. 其它载入的缓冲区
4. 已卸载的缓冲区
5. 标签
6. 头文件
CTRL-N、CTRL-P 和 ins-autocompletion 可用于完成任何基于 'iskeyword'
的扩展 (比如字典 i_CTRL-X_CTRL-K 、头文件里的模式 i_CTRL-X_CTRL-I 、
标签 i_CTRL-X_CTRL-] 和普通的扩展)。应用 'complete' 里的 "F" 和 "o"
标志位,也可以补全非关键字。
在补全源标志位后,可以附加插入符 ("^") 后跟 {count},为该补全源指定可
选的匹配数量上限。例如: ".^9,w,u,t^5" 限制来自当前缓冲区的匹配最多 9
个,而来自标签的匹配最多 5 个。其他源无限制。
注意: 匹配限制只对正向补全 (CTRL-N) 有效,反向补全 (CTRL-P) 不适用。
'completefunc' 'cfu'
'completefunc' 'cfu' 字符串 (缺省: 空)
局部于缓冲区
{仅当编译时加入 +eval 特性才有效}
本选项指定插入模式补全 CTRL-X CTRL-U 使用的函数。 i_CTRL-X_CTRL-U
complete-functions 解释该函数的调用方式以及返回值的含义。本值可以是
函数名、 lambda 或 Funcref 。详见 option-value-function 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'completefuzzycollect' 'cfc'
'completefuzzycollect' 'cfc' 字符串 (缺省: 空)
全局
已废弃: 本选项不再使用。修改本选项值不会有任何影响。'completeopt' 包含
"fuzzy" 时,Vim 内部行为等价于本选项被设为:
"keyword,files,whole_line"
保留以下取值以保持兼容性,同时供可能会读取本选项的脚本使用:
keyword 当前文件里的关键字 i_CTRL-X_CTRL-N
'complete' 里标志位 "."、"w"、 i_CTRL-N i_CTRL-P
"b"、"u"、"U" 和 "k{dict}" 里的关键字
'dictionary' 里的关键字 i_CTRL-X_CTRL-K
files 文件名 i_CTRL-X_CTRL-F
whole_line 整行 i_CTRL-X_CTRL-L
'completeitemalign' 'cia'
'completeitemalign' 'cia' 字符串 (缺省: "abbr,kind,menu")
全局
逗号分隔的字符串列表,控制插入模式补全时,弹出菜单里项目的对齐和显示顺
序。支持的值为 "abbr"、"kind" 和 "menu"。这些值允许定制
complete-items 在弹出菜单里的显示方式。注意: 必须总是包含这三个值,
但顺序可变。
'completeopt' 'cot'
'completeopt' 'cot' 字符串 (缺省: "menu,preview")
全局或局部于缓冲区 global-local
逗号分隔的控制插入模式补全 ins-completion 的选项列表。支持的值有:
fuzzy 为补全候选打开 fuzzy-matching 。这能支持更灵活和直观的匹
配,可以跳过字符,即使键入序列不是完全准确,也能找到匹配。
longest
'autocomplete' 未激活时,只插入匹配的最长公共前缀。如果显
示弹出菜单,可用 CTRL-L 来插入更多的字符。是否忽略大小写取
决于补全的类型。缓冲区文本会使用 'ignorecase' 选项。
'autocomplete' 激活且未选中任何补全项目时,在光标后插入匹
配的最长公共前缀。该前缀可来自所有已显示项目,或者仅限当前
缓冲区里的项目。插入的文本使用 hl-PreInsert 高亮,不改变
光标位置 (和 "preinsert" 类似)。按 CTRL-Y 接受该前缀。另
见 preinserted() 。
menu 使用弹出菜单来显示可能的补全。只有匹配多于一个且有足够的颜
色数时才显示该菜单。 ins-completion-menu
menuone 即使只有一个匹配,也使用弹出菜单。可用于带附加信息的匹配,
例如指明匹配所属的文件。
nearest 匹配项按与光标的距离排序,而缺省顺序只考虑光标之后的匹配项
与光标的距离。只适用于当前缓冲区里的匹配。"fuzzy" 存在时没
有效果。
noinsert 不插入任何匹配文本,直到用户从菜单里选择一个匹配为止。只能
和 "menu" 和 "menuone" 搭配使用。"longest" 存在时没有效
果。
noselect 同 "noinsert",但不预选任何菜单项。如果同时给出 "noinsert"
和 "noselect","noselect" 优先级更高。打开 'autocomplete'
时,除非 "preinsert" 也打开,否则会自动打开本项。
nosort "fuzzy" 打开时,关闭基于模糊分数的补全候选排序。保留候选项
原有的顺序。
popup 在弹出窗口里显示当前选中补全的额外信息。只能和 "menu" 或
"menuone" 搭配使用。它会否决 "preview"。
相关属性见 'completepopup'。
{仅当编译时加入 +textprop 特性才有效}
popuphidden
同 "popup",但弹出会先被弹藏。使用 CompleteChanged 自动
命令获取 info,一旦弹出填充完毕,再调用 popup_show() 。
例见 complete-popuphidden 。
{仅当编译时加入 +textprop 特性才有效}
preinsert
插入首个补全候选里当前补全头部之外的文本,会使用
hl-PreInsert 高亮。光标不移动。
此功能要求 "fuzzy" 未打开,且本选项里的 "menuone" 或
'autocomplete' 选项至少有一项开启。不过,'autocomplete' 启
用时,如果 'ignorecase' 置位但 'infercase' 未置位,此功能
不可用。
另见 preinserted() 。
preview 在预览窗口里显示当前选中补全的额外信息。只能和 "menu" 或
"menuone" 搭配使用。
'autocomplete' 打开时,仅 "fuzzy"、"longest"、"popup"、"popuphidden"、
"preinsert" 和 "preview" 有效。
本选项不适用于 cmdline-completion 。命令行补全可见 'wildoptions'。
'completepopup' 'cpp'
'completepopup' 'cpp' 字符串 (缺省: 空)
全局
{仅当编译时加入 +textprop 或 +quickfix 特性才有效}
当 'completeopt' 包含 "popup" 时,本选项指定 info 弹出建立时使用的属
性。设置本选项时,如果 info 弹出窗口已存在,会先将其关闭,这样再次建立
弹出窗口时才能应用本选项值。
本选项是逗号分隔的值列表:
align "item" (缺省) 或 "menu"
border 边框风格:
"single" 窄方框绘制字符
"double" 双线
"round" 圆角
"ascii" ASCII 字符 (-、|、+)
"custom:X;X;X;X;X;X;X;X"
分号分隔的八个字符,依序为:
顶、右、底、左、左上、右上、
右下、左下
"on" 'encoding' 为 "utf-8" 且
'ambiwidth' 为 "single" 时等同
于 "double",否则等同于
"ascii" (缺省)
"off" 无边框
borderhighlight 用于弹出边框字符的高亮组
close 显示关闭按钮: "on" (缺省) 或 "off"
height 弹出的最大高度
highlight 弹出的高亮组 (缺省是 PmenuSel)
resize 显示缩放柄: "on" (缺省) 或 "off"
shadow 显示阴影: "off" (缺省) 或 "on",此时使用
hl-PmenuShadow 高亮组
width 弹出的最大宽度
例如:
:set completepopup=height:10,border:single,highlight:InfoPopup
:set completepopup=width:60,border:custom:─;│;─;│;┌;┐;┘;└
"align" 值为 "item" 时,弹出位置会靠近选中项目,选择改变时弹出位置也
会跟着移动。
为 "menu" 时,弹出会和 (菜单出现在文本下方时) 菜单顶部或者 (菜单出现
在文本上方时) 底部对齐。
仅当 'mouse' 打开时,弹出边框上才会显示关闭按钮和缩放柄。
info 弹出创建后,可用 popup_findinfo() 定位,用 popup_setoptions()
来修改属性。另见: complete-popup 。
'completeslash' 'csl'
'completeslash' 'csl' 字符串 (缺省: "")
局部于缓冲区
{仅适用于 MS-Windows}
设置本选项时,插入模式下的路径补全时会忽略 'shellslash' 的设置:
- 设为 "slash" 时,补全使用正斜杠。可用于对 HTML 标签或 Makefile 的编
辑,即使设置了 'noshellslash'。
- 设为 "backslash" 时,补全使用反斜杠。可用于对批处理文件的编辑,即使
设置了 'shellslash'。
- 本选项为空时,则使用 'shellslash' 指定的字符。
插入模式补全使用选项的缓冲区局部值。而命令行补全使用全局值。
'completetimeout' 'cto'
'completetimeout' 'cto' 数值型 (缺省为 0)
全局
和 'autocompletetimeout' 类同,但用于 i_CTRL-N 和 i_CTRL-P 补全。
0 值关闭超时;否则只接受正值。
'concealcursor' 'cocu'
'concealcursor' 'cocu' 字符串 (缺省: "")
局部于窗口
{仅当编译时加入 +conceal 特性才有效}
指定即使是光标行,也要和其他行一样隐藏文本的模式列表。
n 普通模式
v 可视模式
i 插入模式
c 命令行编辑模式,用于 'incsearch'
'v' 适用于可视区域的所有行,而不局限于光标所在行。
一个有用的值为 "nc"。可用于帮助文件。来回移动光标时,文本会保持隐藏。
但一旦开始插入文本或选择可视区域,隐藏文本就会被显示,以便看清要操作的
所有文本。
请注意 光标实际位置并不总与其显示位置一致 (译者注: 因为有文本被隐藏)。
例如,上下移动时,列位置可能会改变。
'conceallevel' 'cole'
'conceallevel' 'cole' 数值型 (缺省为 0)
局部于窗口
{仅当编译时加入 +conceal 特性才有效}
指定使用 "conceal" 语法属性 :syn-conceal 文本的显示方式:
值 效果
0 正常显示文本
1 每个隐藏文本块被一个字符替代。如果语法项目没有自定义替
代字符 (见 :syn-cchar ),默认使用 'listchars' 定义的
字符 (缺省是空格)。替代字符使用 "Conceal" 高亮组高亮
2 完全不显示隐藏文本,除非自定义了替代字符 (见
:syn-cchar )
3 完全不显示隐藏文本
注意: 缺省总是显示光标所在行的隐藏文本,以便编辑和复制文本。但可用
'concealcursor' 选项改变此行为。
'confirm' 'cf' 'noconfirm' 'nocf'
'confirm' 'cf' 布尔型 (缺省关闭)
全局
打开时,一些通常因为缓冲区有未保存改动而失败的操作,如 ":q" 和 ":e",
会弹出对话框 dialog ,询问是否想保存当前 (一个或多个) 文件。使用 ! 命
令后缀仍然可以无条件放弃 abandon 缓冲区。
关闭时,仍然可以通过 :confirm 命令为单个命令启动确认机制 (常用于映
射)。
另见 confirm() 函数和 'guioptions' 的 'v' 标志位。
'conskey' 'consk' 'noconskey' 'noconsk'
'conskey' 'consk' 布尔型 (缺省关闭)
全局
为 MS-DOS 设计,不再支持。
'copyindent' 'ci' 'nocopyindent' 'noci'
'copyindent' 'ci' 布尔型 (缺省关闭)
局部于缓冲区
自动缩进新行时,复制已有行的缩进结构。通常做法是使用一列制表符,必要时
后面再跟若干空格,以重新构造新缩进 (除非打开 'expandtab',此时只用空
格)。打开本选项会使得新行准确地复制已有行中用来缩进的所有字符。
'expandtab' 对此没有影响,制表还是制表。如果需要的新缩进量超过已有行的
缩进量,超出部分仍按常规方式填充。
注意: 'compatible' 置位时会复位本选项。
另见 'preserveindent'。
'cpoptions' 'cpo' cpo
'cpoptions' 'cpo' 字符串 (Vim 缺省: "aABceFsz",
Vi 缺省: 除了 "#{|&/\.~" 外的所有标志位
$VIM_POSIX : 所有的标志位)
全局
单字符标志位的序列。每个字符的存在指示一种 Vi 兼容行为。可用于改变常见
或被认为是更好但与 Vi 不兼容的行为。
'cpoptions' 代表兼容性选项 "(compatible-options)"。
为了可读性起见,可以加入逗号。
建议使用 ":set" 的 "+=" 和 "-=" 特性,这可以避免未来版本增加新的标志位
时出现的问题 add-option-flags 。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
注意: Vim9 脚本里遇到 vim9script 时,会保存本选项值,设置
'cpoptions' 为 Vim 缺省值,然后在脚本结束处恢复保存的值。脚本中对
'cpoptions' 值的修改会影响保存的值,但请记住,删除不存在的标志位是无效
修改。 .vimrc 文件不会恢复保存的值,因此在 .vimrc 文件中使用
vim9script 会导致本选项使用 Vim 缺省值。
注意: 系统启动时,如果本应使用 Vi 的缺省值但 $VIM_POSIX 环境变量存在,
本选项会改为 POSIX 缺省值 posix ,这样,Vim 就会尽量遵循 POSIX 规范的
要求来运行。
包含 行为
cpo-a
a 包含时,带文件名参数的 ":read" 命令会为当前窗口设置轮
换文件名。
cpo-A
A 包含时,带文件名参数的 ":write" 命令会为当前窗口设置轮
换文件名。
cpo-b
b ":map" 命令里的 "\|" 被识别为 map 命令的结束。'\' 被包
含在映射里,而 '|' 之后的文本被解释为下一个命令。用
CTRL-V 替代反斜杠,可使 '|' 继续包含在映射里。适用于所
有的映射、缩写、菜单和自动命令。另见 map_bar 。
cpo-B
B 映射、缩写、用户命令和菜单命令的 "to" 部分里反斜杠没有
特殊含义。删除本标志位会使反斜杠的效果类似于 CTRL-V。
例如,命令 ":map X \<Esc>" 会使 X 被映射为:
包含 'B' 时: "\^[" (^[ 是真正的 <Esc>)
排除 'B' 时: "<Esc>" (5 个字符)
(两种情况下都假定 '<' 标志位被排除)
cpo-c
c 搜索从任何光标所在的匹配的结束处继续,但不超过下一行的
开始处。无此标志位时,搜索会从光标位置之后的一个字符开
始。例如,在 "abababababab" 上反复用 "/abab" 模式搜索
时,包含 'c' 时只有三个匹配,而排除 'c' 时有五个。
cpo-C
C 执行时不串接反斜杠开始的行。见 line-continuation 。
cpo-d
d 'tags' 选项使用的 "./" 表示相对于当前目录的标签文件,
而不是相对于当前文件的标签文件。
cpo-D
D 带有字符参数的普通模式命令,如 r 、 f 和 t ,不能用
CTRL-K 来输入二合字母。
cpo-e
e 用 ":@r" 执行寄存器时,总是在最后一行自动追加 <CR>,即
使寄存器不是面向行的也是如此。无此标志位时、对于非面向
行的寄存器,如果末行不以 <CR> 结尾,该行会留在命令行
上,在按 <CR> 之前可以继续编辑。
cpo-E
E 在空区域上使用 "y"、"d"、"c"、"g~"、"gu" 或 "gU" 是个
错误。这些操作符需要至少一个字符才能操作。比如: 在第一
列上按 "y0" 会失败。
cpo-f
f 包含且当前缓冲区还没有文件名时,带文件名参数的 ":read"
命令会为当前缓冲区设置文件名。
cpo-F
F 包含且当前缓冲区还没有文件名时,带文件名参数的
":write" 命令会为当前缓冲区设置文件名。另见 cpo-P 。
cpo-g
g 没有参数的 ":edit" 会转到第一行。
cpo-H
H 在只有空白的行使用 "I" 时,在最后一个空白字符前插入。
没有此标志位时,则会在最后一个空白字符后插入。
cpo-i
i 包含时,中断读入的文件会被标记为已修改。
cpo-I
I 'autoindent' 插入缩进后,如果立即上下移动光标,缩进不
会被删除。
cpo-j
j 连接行时,只在 '.' 之后加入两个空格,'!' 或 '?' 之后只
加一个。另见 'joinspaces'。
cpo-J
J 必须在 '.','!' 或 '?' 有两个空格才算句子 sentence 。
<Tab> 不被识别为结束句子的空白。
cpo-k
k 映射、缩写和菜单命令的 "to" 部分不识别原始键盘代码。比
如,如果 <Key> 发送 ^[OA (其中的 ^[ 是 <Esc>),命令
":map X ^[OA" 会使得 X 被映射为:
包含 'k' 时: "^[OA" (3 个字符)
排除 'k' 时: "<Key>" (单个键码)
另见下面的 '<' 标志位。
cpo-K
K 映射只匹配键码的一部分时,不等待其完成。这会使
<F1><F1> 的映射在只读入第二个 <F1> 的部分键码时无法生
效。不过,此时用 <F1><Esc> 就可以中止该映射。
cpo-l
l 搜索模式里的 [] 范围内的反斜杠按本义出现,只有 "\]"、
"\^"、"\-" 和 "\\" 有特殊含义。见 /[]
包含 'l' 时: "/[ \t]" 会找到 <Space>、'\' 和 't'
排除 'l' 时: "/[ \t]" 会找到 <Space> 和 <Tab>
另见 cpo-\ 。
cpo-L
L 'list' 选项置位时,'wrapmargin'、'textwidth'、
'softtabstop' 和虚拟替换模式 (见 gR ) 会把 <Tab> 看作
两个字符,和 <Tab> 的普通行为不同。
cpo-m
m 包含时,showmatch 总会等到半秒。不包含时,showmatch 会
等待半秒或者到有字符输入为止。'showmatch'
cpo-M
M 排除时,"%" 匹配会考虑反斜杠。所以 "( \( )" 和
"\( ( \)" 里,外层的括号都会匹配。包含时,"%" 匹配忽略
反斜杠,这是 Vi 兼容行为。
cpo-n
n 包含时,文本的回绕行会占用 'number' 和
'relativenumber' 使用的列。
cpo-o
o 搜索命令的行偏移 {offset} 不会被记住,也不会用于下一
次搜索。
cpo-O
O 即使文件在开始编辑时还不存在,覆盖该文件也不会给出警
告。该保护机制可防止意外覆盖他人建立的文件。Vi 并不会
对此发出警告。
cpo-p
p Vi 兼容的 Lisp 缩进方法。排除时使用稍好一些的算法。
cpo-P
P 包含且当前缓冲区还没有文件名且同时包含 'F' 标志位
cpo-F 时,追加到文件的 ":write" 命令会为当前缓冲区设
置文件名。
cpo-q
q 连接多行时,光标会留在连接前两行时会在的位置,也就是原
来首行的行末位置,而不是原来末行的行首位置。
cpo-r
r 重复 ("." 命令) 会使用 quote/ 模式来重复搜索命令,而
不是实际使用的搜索字符串。
cpo-R
R 删除过滤行里的位置标记。排除时,标记会被保存,相当于使
用了 :keepmarks 。
cpo-s
s 缓冲区选项会在首次进入缓冲区时设置。这和 Vim 3.0 版本
的行为相同,现在这也是缺省。排除时,选项会在缓冲区建立
时设置。
cpo-S
S 每次进入缓冲区都设置缓冲区选项 ('readonly'、
'fileformat'、'filetype' 和 'syntax' 除外)。这是 (最)
符合 Vi 兼容性的设定。这些选项会被设为当前缓冲区的值。
在当前缓冲区改变了选项值并切换到其他缓冲区时,新值会被
复制过去。这意味着,缓冲区选项实际全局于所有缓冲区。
's' 'S' 缓冲区选项的复制时间点
否 否 建立缓冲区时
是 否 首次进入缓冲区时 (缺省)
均可 是 每次进入缓冲区时 (vi 兼容)
cpo-t
t "n" 命令会记住标签命令使用的搜索模式。否则,Vim 只把该
模式放到搜索模式的历史里,但不改变最近使用的搜索模式。
cpo-u
u 撤销使用 Vi 兼容模式。见 undo-two-ways 。
cpo-v
v 插入模式下,退格删除的字符在屏幕上保持可见。排除时,该
字符会从屏幕上立即删除。包含时,新输入的文本会覆盖屏幕
上退格经过的字符。
cpo-w
w 在空白字符上使用 "cw" 只改变一个字符,而不是到下一个单
词之前的所有空白。
cpo-W
W 不覆盖只读文件。排除时,":w!" 如有可能,会覆盖只读文
件。
cpo-x
x 命令行上输入 <Esc> 会执行该命令行。Vim 的缺省行为是放
弃命令行。因为 <Esc> 通常的含义是中止命令。 c_<Esc>
cpo-X
X 使用计数时,"R" 只删除一次替换的文本。带计数的 "." 来
重复 "R" 时也是如此。
cpo-y
y 抽出 (yank) 命令也可用 "." 重复。用此标志位要三思,因
为它违背了大多数人对 "." 只重复改动的预期,可能会导致
插件无法正常工作,
cpo-Z
Z 置位 'readonly' 选项时,使用 "w!" 不复位 'readonly'。
cpo-z
z "cw" 和 "d" 命令的特殊处理 (见 cw 和 d-special )。
cpo-!
! 重复过滤命令时,使用最近使用的外部命令,不管是不是过滤
命令。否则,使用最近使用的 -过滤- 命令。
cpo-$
$ 对一行进行修改 (change) 时,不重显该行 (译者注: 意思是
继续显示被删除的文本),但被修改文本的尾部会放上 '$'。
新输入的文本会覆盖被修改的文本。如果输入任何把光标移开
插入点的命令,该行就会被重显。
cpo-%
% "%" 命令使用 Vi 兼容的匹配行为。
不识别 "#if"、"#endif" 等。
不识别 "/*" 和 "*/"。
单引号和双引号里的括号也被计算在内,从而使包含括号的字
符串常数影响匹配。比如,在 "if (strcmp("foo(", s))" 这
样的行里,第一个括号不匹配最后一个。排除时,单引号和双
引号里的括号被特殊处理。在引号外匹配括号时,会忽略引号
之内的所有内容。在引号内匹配括号时,会找到任何位置的匹
配 (如有)。这对 C 程序很管用。
此标志位也用于其它特性,例如 C 缩进。
cpo--
- 包含时,越过首行或末行的垂直移动命令会失败。排除时,光
标会移到首行或末行,除非本来已经在该行上。
适用于命令 "-"、"k"、CTRL-P、"+"、"j"、CTRL-N、CTRL-J
和 ":1234"。
cpo-+
+ 包含时,":write file" 命令会复位缓冲区的 'modified' 标
志位,即使缓冲区仍然可能和它本身文件不同步。
cpo-star
* ":*" 和 ":@" 等价。排除时,":*" 是 ":'<,'>" 的别名,用
来选择可视区域。
cpo-<
< 映射、缩写和菜单命令的 "to" 部分不识别 <> 形式的特别
键码。比如,命令 ":map X <Tab>" 会使得 X 被映射为:
包含 '<' 时: "<Tab>" (5 个字符)
排除 '<' 时: "^I" (^I 是真正的 <Tab>)
另见上面的 'k' 标志位。
cpo->
> 追加到寄存器时,在追加文本前先加上换行符。
cpo-;
; 用 , 或 ; 重复上次 t 搜索时,如果光标正在搜索的
字符之上,光标不移动。排除时,光标会跳过此字符并跳到下
一个匹配之上。
cpo-~
~ 包含时,用 :cd 、 :lcd 或 :tcd 改变目录时不解析符
号链接。这样在显示当前目录时,可以保留缓冲区名的符号链
接路径。排除时 (缺省),符号链接会被解析为其目标路径。
POSIX 标志位。除非启动时设置了 $VIM_POSIX,否则不会在 Vi 缺省值里包含
里这些值。 posix
包含 行为
cpo-#
# "D"、"o" 和 "O" 之前的计数没有效果。
cpo-&
& 正常退出时,已加载并使用了 ":preserve" 的缓冲区会保留
其交换文件。本标志位在 Vim 退出时检测。
cpo-\
\ 搜索模式里 [] 范围内的反斜杠按本义出现,只有 "\]" 有特
别含义。见 /[]
包含 '\' 时: "/[ \-]" 找到 <Space>、'\' 和 '-'
排除 '\' 时: "/[ \-]" 找到 <Space> 和 '-'
另见 cpo-l 。
cpo-/
/ 使用 "%" 作为 :s 命令的替代字符串时,使用最近使用的
替代字符串。 :s%
cpo-{
{ { 和 } 命令也会在行首的 "{" 字符上停留。
cpo-.
. 如果当前缓冲区已修改,":chdir" 和 ":cd" 命令会失败,除
非指定了 !。Vim 并不需要这样,因为它会记住打开文件的完
整路径。
cpo-bar
| $LINES 和 $COLUMNS 环境变量值会覆盖通过系统特定函数计
算得到的终端大小。
'cryptmethod' 'cm'
'cryptmethod' 'cm' 字符串 (缺省为 "blowfish2")
全局或局部于缓冲区 global-local
把缓冲区写入文件时所用的加密方法:
pkzip
zip PkZip 兼容方法。加密强度较弱。和 Vim 7.2 及更早版本兼
容。只适合需要后向兼容的场合。
blowfish
blowfish Blowfish 方法。加密强度中等,但有实现漏洞。需要 Vim
7.3 或之后版本,Vim 7.2 或更早版本 无法 读取。
文件会包含加密用的 "种子",所以每次写入文件时加密后的
字节都会不相同。
已废弃,请勿使用。
blowfish2
blowfish2 Blowfish 方法。加密强度中等。需要 Vim 7.4.401 或之后版
本,Vim 7.3 或更早版本 无法 读取。文件会包含加密用的 "
种子",所以每次写入文件时加密后的字节都会不相同。整个
撤销文件都会被加密,而不只是文本片断。
E1193 E1194 E1195 E1196 E1230
E1197 E1198 E1199 E1200 E1201
xchacha20 XChaCha20 加密算法,使用 Poly1305 信息鉴别码 (Message
Authentication Code)。加密强度中等到高。
加密功能由 libsodium 库提供,Vim 编译时需要加上
+sodium 特性。
文件会包含种子和信息鉴别码 (MAC)。读取加密文件的最低要
求是 Vim 8.2.3022 版本。
不支持交换文件的加密,因此使用 xcharcha20 加密时,不使
用交换文件。
尚不支持撤销文件的加密。因此目前也不写入撤销文件。
小心 : 如果将来二进制格式改变,此方法写入的文件可能需
要相同版本的 Vim 才能读取。
已废弃,请勿使用。
xchacha20v2 与 "xchacha20" 相同的算法,已加密文件同时会正确地保存
密钥派生参数。这样就算 libsodium 库的参数将来发生了改
变,也不会有问题。
仍属实验性功能 : 如果将来二进制格式改变,此方法写入的
文件可能需要相同版本的 Vim 才能读取。
建议使用 "blowfish2",旧文件应用此方法重新加密。"xchacha20" 文法加密性
能更好,但不适用于较早的 Vim 版本。
读入加密文件时,'cryptmethod' 会自动设为检测到的加密方式。因此写回文件
时,除非手动改变 'cryptmethod',否则会保持相同的加密方法。改变
'cryptmethod' 并不会自动将文件标为已改动,需要显式写回文件才会生效。除
非有其它修改,不会得到警告。另见 :X 。
全局值设置为空串时,等同于 "blowfish2"。设置局部值为空串时,会使用全局
值。
新版本 Vim 加入其它加密方法而当前版本不支持的话,会报错 E821 。
需要使用更新的 Vim 版本来编辑该文件。
'cscopepathcomp' 'cspc'
'cscopepathcomp' 'cspc' 数值型 (缺省为 0)
全局
{仅当编译时加入 +cscope 特性才有效}
决定标签列表里路径部分的显示数量。例如,1 代表只显示文件名。
见 cscopepathcomp 。
注意: 'compatible' 置位时会设置本选项为 0。
'cscopeprg' 'csprg'
'cscopeprg' 'csprg' 字符串 (缺省为 "cscope")
全局
{仅当编译时加入 +cscope 特性才有效}
指定用来执行 cscope 的命令。见 cscopeprg 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'cscopequickfix' 'csqf'
'cscopequickfix' 'csqf' 字符串 (缺省为 "")
全局
{仅当编译时加入 +cscope 和 +quickfix 特性才有效}
设置是否使用快速修复窗口来显示 cscope 结果。
见 cscopequickfix 。
'cscoperelative' 'csre' 'nocscoperelative' 'nocsre'
'cscoperelative' 'csre' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +cscope 特性才有效}
cscope 没有提供前缀参数 (-P) 时,置位本选项会使用 cscope.out 所在位置
的目录名作为前缀。
见 cscoperelative 。
注意: 'compatible' 置位时会复位本选项。
'cscopetag' 'cst' 'nocscopetag' 'nocst'
'cscopetag' 'cst' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +cscope 特性才有效}
指示标签命令使用 cscope。见 cscope-options 。
注意: 'compatible' 置位时会复位本选项。
'cscopetagorder' 'csto'
'cscopetagorder' 'csto' 数值型 (缺省为 0)
全局
{仅当编译时加入 +cscope 特性才有效}
决定 ":cstag" 执行查找时采用的次序。见 cscopetagorder 。
注意: 'compatible' 置位时会设置本选项为 0。
'cscopeverbose' 'csverb'
'nocscopeverbose' 'nocsverb'
'cscopeverbose' 'csverb' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +cscope 特性才有效}
添加 cscope 数据库时,会给出消息。见 cscopeverbose 。
注意: 'compatible' 置位时会复位本选项。
'cursorbind' 'crb' 'nocursorbind' 'nocrb'
'cursorbind' 'crb' 布尔型 (缺省关闭)
局部于窗口
置位本选项时,光标在当前窗口移动的同时,其它光标绑定的窗口 (即置位本选
项的窗口) 也会相应移动其光标到对应的行和列。本选项可用于浏览文件不同版
本间的异同 (见 'diff');比较模式下会考虑新增和删除的行 (但不包括行内删
除的字符)。
'cursorcolumn' 'cuc' 'nocursorcolumn' 'nocuc'
'cursorcolumn' 'cuc' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +syntax 特性才有效}
用 CursorColumn hl-CursorColumn 高亮光标所在的屏幕列。用于对齐文本。
但会影响屏幕刷新性能。
如果只想为当前窗口高亮,可以使用这些自动命令:
au WinLeave * set nocursorline nocursorcolumn
au WinEnter * set cursorline cursorcolumn
'cursorline' 'cul' 'nocursorline' 'nocul'
'cursorline' 'cul' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +syntax 特性才有效}
用 CursorLine hl-CursorLine 高亮光标所在的文本行。用于方便定位光标。
但会影响屏幕刷新性能。
激活可视模式时,为了容易看到选择的文本,不使用此高亮。
'cursorlineopt' 'culopt'
'cursorlineopt' 'culopt' 字符串 (缺省: "number,line")
局部于窗口
{仅当编译时加入 +syntax 特性才有效}
控制 'cursorline' 显示方式的逗号分隔的设置列表。
合法值为:
"line" 用 CursorLine hl-CursorLine 高亮光标所在的文本行。
"screenline" 用 CursorLine hl-CursorLine 高亮光标所在的屏幕行。
"number" 用 CursorLineNr hl-CursorLineNr 高亮光标所在的行号。
特殊值:
"both" "line,number" 值的别名。
"line" 和 "screenline" 不能同时使用。
'debug'
'debug' 字符串 (缺省为 "")
全局
合法值为:
msg 给出其他情况下会忽略的错误信息。
throw 给出其他情况下会忽略的错误信息,同时抛出异常并设置
v:errmsg 。
beep 给出其他情况下会给出铃声的消息。
这些值可以合并,用逗号分隔。
"msg" 和 "throw" 可用于调试 'foldexpr'、'formatexpr' 或 'indentexpr'。
'define' 'def'
'define' 'def' 字符串 (缺省为 "^\s*#\s*define")
全局或局部于缓冲区 global-local
用以找到宏定义的模式。采用与 "/" 命令相同的搜索模式。本选项用于 "[i"
和 "[d" 等命令 include-search 。在匹配之后,使用 'isident' 选项来识别
定义名本身:
{'define' 的匹配}{若干非标识符字符}{定义名}{非标识符字符}
option-backslash 说明如何插入反斜杠以包含空格或反斜杠。
缺省值为 C 程序设计。C++ 也可用,但如果也要包含常量类型定义的话:
^\(#\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('
'delcombine' 'deco' 'nodelcombine' 'nodeco'
'delcombine' 'deco' 布尔型 (缺省关闭)
全局
编辑 Unicode 并打开本选项时,退格和普通模式的 "x" 仅删除单个组合字符
(如有多个,删除最后一个组合字符)。
关闭时 (缺省值),每个字符会连同其所有组合字符一并被删除。
注意: 置位 'delcombine' 时,"xx" 可能和 "2x" 不一样 (译者注: 后者删除
2 个完整字符,假定当前字符带一个组合字符,前者只会删除 1 个完整字符)!
这对阿拉伯语、希伯来语和许多其他语言有用,因为那些语言常在基础字符的上
方使用组合字符,而有时只需删除组合字符部分。
注意: 'compatible' 置位时会复位本选项。
'dictionary' 'dict'
'dictionary' 'dict' 字符串 (缺省为 "")
全局或局部于缓冲区 global-local
逗号分隔的文件名列表,用于为关键字补全命令查找单词 i_CTRL-X_CTRL-K 。
每个文件由单词列表构成,每行可有一个或多个单词,以非关键字字符分隔 (建
议使用空白)。最大的行长为 510 个字节。
本选项为空或者给出项目 "spell"、并且打开拼写检查时,使用当前激活的
'spelllang' 对应的单词列表中的单词。见 spell
要在文件名里包含逗号,在它之前加上反斜杠。忽略逗号之后的空格,其它情况
下空格视为文件的一部分。 option-backslash 说明如何使用反斜杠。
环境变量被扩展 :set_env 。
本选项和 Dictionary 变量类型完全无关。
可以找到单词列表的资源:
- FreeBSD 上,查看文件 "/usr/share/dict/words"。
- Simtel 归档里,可以查看 "msdos/linguist" 目录。
- GNU 工具集里,查看 "miscfiles"。
建议使用 :set+= 和 :set-= 来从列表里加减目录。这可以避免未来版本更
改缺省值而引发的问题。
为了安全原因,本选项里不能使用反引号。
'diff' 'nodiff'
'diff' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +diff 特性才有效}
将本窗口加入到显示文件差异的窗口组里。见 vimdiff 。
'dia' 'diffanchors' E1549
'diffanchors' 'dia' 字符串 (缺省为 "")
全局或局部于缓冲区 global-local
逗号分隔的在每个缓冲区里的 {address} 列表,比较时用作锚点。本选项可用
"$+1" 指定末行之后的一行,但不能用 "%"。每个缓冲区最多可有 20 个锚点。
每个锚点都会分割缓冲区 (分割位置在锚点上方),每个分割部分被分别进行比
较,最后结果再进行合并。提供了多个 {address} 时,在内部锚点会按行号排
序。用作缓冲区局部选项时,每个缓冲区必须有相同数目的锚点 (额外的锚点会
被忽略)。仅当 'diffopt' 设置了 "anchor" 才会使用本选项。详情和示例见
diff-anchors 。
E1550
如果有任何 {address} 在某些缓冲区里无法解析为行号 (如模式搜索无匹配),
将不使用任何锚点。
E1562
仅当所有比较缓冲区都未被隐藏时,才会使用比较锚点。
'dex' 'diffexpr'
'diffexpr' 'dex' 字符串 (缺省为 "")
全局
{仅当编译时加入 +diff 特性才有效}
用于计算文件的两个不同版本间的差异文件 (ed 风格或合并风格) 的表达式。
见 diff-diffexpr 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'dip' 'diffopt'
'diffopt' 'dip' 字符串 (缺省为 "internal,filler,closeoff,
indent-heuristic,inline:char")
全局
{仅当编译时加入 +diff 特性才有效}
比较模式的相关设置。由以下几个项目组成。所有项目均可选。项目之间由逗号
分隔。
algorithm:{text} 内部比较引擎使用指定的比较算法。目前支持的算
法是:
myers 缺省算法
minimal 花费额外时间来生成最小的可能差异
patience patience 比较算法
histogram histogram 比较算法
anchor 如果设置了 'diffanchors',使用每个缓冲区的特定
行作为锚点,并使这些锚点彼此对齐。见
diff-anchors 。
closeoff 关闭置位 'diff' 的窗口而所在的标签页中只剩下最
后一个置位 'diff' 的窗口时,那个窗口会执行
:diffoff 。这会撤销 :diffsplit 命令的效果。
context:{n} 在更改和包含未更改行的折叠之间保留 {n} 行上下
文 (译者注: 即差异文周围不被折叠的行数)。省略
时,使用六行上下文。为零时,实际会使用一行上下
文,因为折叠和折叠之间需要至少一行,也适用于删
除行。设为一个较大值 (999999) 可以完全关闭折
叠。见 fold-diff 。
filler 显示填充行,使得文本和在相同位置多出文本的其它
窗口同步。多用于并排并且置位 'scrollbind' 的窗
口。
foldcolumn:{n} 启动比较模式时设置 'foldcolumn' 选项为 {n}。
省略时使用 2。
followwrap 跟随 'wrap' 选项,比较时保持其值不变。
horizontal 以水平分割启动比较模式 (除非显式指定不要如
此)。
hiddenoff 不对隐藏缓冲区使用比较模式。
iblank 忽略全空白行的改动。如果 'diffexpr' 为空,会给
"diff" 命令加上 "-B" 标志位。查阅 "diff" 文档
了解该标志位的具体行为。
注意: 因为忽略空白行间的差异,窗口可能会失去同
步。
icase 忽略文本大小写的更改。"a" 和 "A" 视为等同。如
果 'diffexpr' 为空,会给 "diff" 命令加上 "-i"
标志位。
indent-heuristic
内部比较库使用缩进启发。
inline:{text} 高亮改动的行内差异。见 view-diffs 。支持的值
是:
none 不进行行内高亮。
simple 从第一个不同字符开始,高亮到每行的最后
一个不同字符。这是没有设置 inline:
值时的缺省。
char 使用内部 diff,逐字符进行比较,高亮差
异文本。
word 使用内部 diff,逐 word 进行比较,高
亮差异文本。非字母数位的多字节字符,如
表情符号、CJK 字符等,被视作单独的单
词。
internal 使用内部比较库。设置 'diffexpr' 时忽略此项
目。 E960
如果写入缓冲区时内存溢出,或者差异文超过 1GB,
在涉及该缓冲区的比较中会忽略此项目。要了解这些
情况何时发生,可见 'verbose' 选项。
iwhite 忽略空白字符数目的更改。如果 'diffexpr' 为空,
会给 "diff" 命令加上 "-b" 标志位。查阅 "diff"
文档了解该标志位的具体行为。比如,它应该忽略行
尾的空白,但不忽略行首的。
iwhiteall 忽略所有空白字符的更改。如果 'diffexpr' 为空,
会给 "diff" 命令加上 "-w" 标志位。查阅 "diff"
文档了解该标志位的具体行为。
iwhiteeol 忽略行尾空白字符的更改。如果 'diffexpr' 为空,
会给 "diff" 命令加上 "-Z" 标志位。查阅 "diff"
文档了解该标志位的具体行为。
linematch:{n} 在缓冲区之间,对最相近的行进行对齐并标记差异。
如果差异块的总行数超过 {n},不对齐行,因为过大
的差异块会有明显的延迟。合理的设定值是
"linematch:60",这适用于 2 个缓冲区间 30 行左
右的差异块,或者 3 个缓冲区间 20 行左右的差异
块。设置此值时会隐含同时设置 "filler"。
vertical 以垂直分割启动比较模式 (除非显式指定不要如
此)。
示例:
:set diffopt=internal,filler,context:4
:set diffopt=
:set diffopt=internal,filler,foldcolumn:3
:set diffopt-=internal " _不_使用内部比较解析器
'digraph' 'dg' 'nodigraph' 'nodg'
'digraph' 'dg' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +digraphs 特性才有效}
插入模式下,可用 {char1} <BS> {char2} 输入二合字母。见 digraphs 。
注意: 'compatible' 置位时会复位本选项。
'directory' 'dir'
'directory' 'dir' 字符串 (缺省值:
Amiga: ".,t:"
Win32: ".,$TEMP,c:\tmp,c:\temp"
Unix: ".,~/tmp,/var/tmp,/tmp")
全局
用于保存交换文件的目录名列表,以逗号分隔。
推荐使用: ".,~/vimswap//" - 也就是,如有可能,将交换文件放在被编辑文
件的同一目录下,否则就放在个人交换目录下。请确保 "~/vimswap//" 只对用
户本人可读。
可能的项目:
- 交换文件会在第一个可能的目录里建立。
- 空值表示不建立交换文件 (文件此时无法恢复!) 且不给出 E303 错误。
- 目录 "." 表示把交换文件放在和被编辑文件相同的目录里。Unix 上,文件
名字前面会添加句号,使得该文件在目录列表里被隐藏。MS-Windows 上,会
置位 "hidden" 属性,在可能的情况下也在前面添加句号。
- 目录以 "./" (或 MS-Windows 环境的 ".\") 开头时,交换文件会放在被编辑
文件的相对路径下。其中开头的 "." 会被替换为文件路径。
- Unix 和 Win32 上,目录以两个路径分隔符 "//" 结尾时,交换文件名会使用
文件的完整路径来构造,具体方法是把其中所有的路径分隔符 (包含 Win32
驱动器字母之后的冒号) 替换为百分号 '%'。此方法保证了备份目录中文件名
的唯一性。
Win32 上也可用 "\\" 结尾。但当其后接逗号时必须使用 "//",否则 "\\"
会把逗号当做文件名的一部分。所以,建议统一使用 '//'。
- 忽略逗号之后的空格,其它位置的空格会被视为目录名的一部分。目录名以空
格开头时,需要在空格前加反斜杠。
- 目录名中包含逗号时,需要在逗号前加反斜杠。
- 目录名可用 ':' 或 '/' 结尾。
- 环境变量被扩展 :set_env 。
- 注意 '\' 字符的用法,空格前用一个反斜杠,反斜杠本身则需输入两个 (见
option-backslash )。例如:
:set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
- 为了和 Vim 3.0 版本后向兼容,本选项会删除开头的 '>'。
建议列表里第一个项目放上 "."。这意味着编辑同一文件两次时会得到警告。
Unix 上不鼓励使用 "/tmp": 系统崩溃时交换文件会丢失。
"/var/tmp" 在重启时通常不会清除,比 "/tmp" 更安全些,但同一机器上的其
它用户有机会看到这些文件,而且那里文件可能太多,导致交换文件难以找到。
所以,建议先尝试用户主目录下面的 "tmp" 目录。
建议使用 :set+= 和 :set-= 来从列表里加减目录。这可以避免未来版本更
改缺省值而引发的问题。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'display' 'dy'
'display' 'dy' 字符串 (缺省为 "", defaults.vim 里设为 "truncate")
全局
改变文件显示的方式。这是逗号分隔的标志位列表:
lastline 包含时,显示窗口末行尽量多的内容。最后几列会放上
"@@@",指示该行的其余部分不再显示。
truncate 和 "lastline" 类同,但 "@@@" 会显示在屏幕末行的首列。
优先于 "lastline"。
uhex 用 <xx> 形式来显示不可显示字符的十六进制值,而非 ^C 和
~C 等形式。
未设置 "lastline" 或 "truncate" 时,无法完全显示的末行会以一行 "@" 代
替。
填充字符 "@" 可通过设置 'fillchars' 里的 "lastline" 项目定制。该字符使
用 hl-NonText 高亮。
'eadirection' 'ead'
'eadirection' 'ead' 字符串 (缺省为 "both")
全局
指示应用 'equalalways' 选项的方向:
ver 仅垂直方向,窗口宽度不受影响
hor 仅水平方向,窗口高度不受影响
both 窗口宽度和高度都受影响
'ed' 'edcompatible' 'noed' 'noedcompatible'
'edcompatible' 'ed' 布尔型 (缺省关闭)
全局
使 ":substitute" 命令的 'g' 和 'c' 标志位在每次使用时交替切换。见
complex-change 。另见 'gdefault' 选项。
打开本选项可能会导致插件无法正常工作!
Vim9 脚本不使用本选项。
'emoji' 'emo' 'noemoji' 'noemo'
'emoji' 'emo' 布尔型 (缺省: 打开)
全局
打开时,所有的 Unicode 表情字符都被视作全宽字符。这里排除 "文本表情"
字符,因为它们通常只占用单字符宽度。可惜的是对此没有好的规范,只能通过
试错的方式去决定。用 setcellwidths() 函数可改变此行为。
'encoding' 'enc' E543
'encoding' 'enc' 字符串 (MS-Windows 缺省: "utf-8",
其它: $LANG 的值或者 "latin1")
全局
设置 Vim 内部使用的字符编码。它应用于缓冲区、寄存器、表达式所用的字符
串、viminfo 保存信息等等各种文本。并决定 Vim 可处理的字符类型。可用取
值见 encoding-names 。
注意: 改变本选项不会改变 Vim 已有文本的编码。但可能会使非 ASCII 文本变
成非法。通常应保持其为缺省值,或仅在 Vim 启动时设置。见 multibyte 。
要重新载入菜单,见 :menutrans 。
不能从 modeline 设置本选项。否则很有可能破坏文本。
注意: GTK+ 2 或更新版本上,强烈建议将 'encoding' 设置为 "utf-8"。尽管
已尽力支持其他 'encoding' 值,"utf-8" 是该环境下的自然选择,并可避免不
必要的编码转换开销。"utf-8" 之所以没有成为缺省,是为了避免 GUI 和终端
的行为不同步,也避免在不知情的情况下改变新建文件的编码 (当
'fileencodings' 为空时)。
文件的字符编码由 'fileencoding' 指定,可与 'encoding' 不同。通过
iconv() 或者 'charconvert' 指定的方法完成相应转换。
如果需要知道 'encoding' 指定的是否为多字节编码,可用:
if has("multi_byte_encoding")
通常,'encoding' 应该等同于当前 locale。相应环境变量能被 Vim 识别时,
会成为本选项的缺省值。如果 'encoding' 未设为当前 locale,必须设定
'termencoding' 来对输入文本和显示文本进行转换。见 encoding-table 。
设置本选项时,会激活 EncodingChanged 自动命令事件,可用此事件在必要
时设置相应的字体。
本选项设置时,其值会被转成小写。所以,用大写值来设置也无不可。'_' 会被
转换为 '-'。
可识别的编码会被转换为其标准名。比如 "Latin-1" 会变为 "latin1",
"ISO_88592" 会变为 "iso-8859-2",而 "utf8" 会变 "utf-8"。
注意: 无法识别的编码会默认同时使用 "latin1"。仅当编辑的文件实际使用该
编码才不会有问题!实际的字符集不是 latin1 时,需确保 'fileencoding' 和
'fileencodings' 为空。需要进行转换时,应改为使用 utf-8 编码。
使用 "unicode"、"ucs-2" 或 "ucs-4" 时,Vim 内部总是使用 utf-8。编辑时
不会注意到这一点,但 viminfo-file 会受影响。另外,Vim 也假定终端使用
utf-8。所以,设置 'encoding' 为某个非 utf-8 的 Unicode 编码值的唯一效
果是在 'fileencoding' 为空时,指定文件所使用的编码。
设置 'encoding' 为某个 Unicode 编码且 'fileencodings' 尚未有设置时,会
相应改变 'fileencodings' 的缺省值。
'endoffile' 'eof' 'noendoffile' 'noeof'
'endoffile' 'eof' 布尔型 (缺省关闭)
局部于缓冲区
指示在读取文件时在文件尾发现了 CTRL-Z 字符。通常只在 'fileformat' 为
"dos" 时发生。写入文件时,如果本选项关闭且 'binary' 选项打开,或关闭了
'fixeol' 选项,文件尾不写入 CTRL-Z。
示例设置见 eol-and-eof 。
'endofline' 'eol' 'noendofline' 'noeol'
'endofline' 'eol' 布尔型 (缺省打开)
局部于缓冲区
写入文件时,如果本选项关闭且 'binary' 选项打开,或关闭了 'fixeol' 选
项,文件的末行不写入 <EOL>。编辑新文件时,取决于该文件的末行原本有没有
<EOL>,会自动置位或复位本选项。通常不需要自行置位或者复位本选项。
'binary' 关闭且 'fixeol' 打开时,写入文件时不考虑本值。'binary' 打开或
'fixeol' 关闭时,本值被用于记住文件末行是否存在过 <EOL>,这样在写回文
件时,就不会改变文件原来的状态。但如有需要,也可自行修改。
示例设置见 eol-and-eof 。
'equalalways' 'ea' 'noequalalways' 'noea'
'equalalways' 'ea' 布尔型 (缺省打开)
全局
打开时,分割或关闭某窗口后,所有窗口会自动使用相同的尺寸。打开本选项时
会立即调整窗口尺寸。关闭时,分割窗口会减少当前窗口的尺寸,而保持其他窗
口的尺寸不变。而关闭窗口会将额外的空间分配给紧邻 (取决于 'splitbelow'
和 'splitright') 的窗口。
混合垂直和水平分割的窗口时,会先计算最小的尺寸,如果有空间的话,再适当
增加某些窗口的大小。'eadirection' 选项设定在哪个方向上调整尺寸。个别窗
口要防止高度和宽度被改变,可分别置位 'winfixheight' 和 'winfixwidth'。
创建新窗口时如果指定了该窗口的尺寸,目前不试图使尺寸相同 (比较复杂,将
来也许会实现)。
'equalprg' 'ep'
'equalprg' 'ep' 字符串 (缺省为 "")
全局或局部于缓冲区 global-local
"=" 命令使用的外部程序。本选项为空时,使用内部的排版函数: 'lisp'、
'cindent' 或 'indentexpr'。Vim 编译时未加入内部的排版功能时,会使用外
部的 "indent" 程序。
环境变量被扩展 :set_env 。 option-backslash 说明如何包含空格和反斜
杠。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'errorbells' 'eb' 'noerrorbells' 'noeb'
'errorbells' 'eb' 布尔型 (缺省关闭)
全局
错误信息会响铃 (鸣叫或屏幕闪烁)。只用于有信息的错误。很多没有消息的错
误总会使用响铃 (比如,普通模式下按 <Esc>)。'visualbell' 说明如何设置响
铃的不同表现方式: 鸣叫、屏幕闪烁或什么都不做。'belloff' 可以则细调响铃
行为。
'errorfile' 'ef'
'errorfile' 'ef' 字符串 (缺省值:
Amiga: "AztecC.Err"
其他: "errors.err")
全局
{仅当编译时加入 +quickfix 特性才有效}
快速修复模式使用的错误文件名 (见 :cf )。
使用 "-q" 命令行参数时,'errorfile' 会设为其后的参数。见 -q 。
不 用于 ":make" 命令。为此目的,见 'makeef'。
环境变量被扩展 :set_env 。
option-backslash 说明如何包含空格和反斜杠。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'errorformat' 'efm'
'errorformat' 'efm' 字符串 (缺省很长)
全局或局部于缓冲区 global-local
{仅当编译时加入 +quickfix 特性才有效}
类似于 scanf 风格的错误文件行的格式描述 (见 errorformat )。
'esckeys' 'ek' 'noesckeys' 'noek'
'esckeys' 'ek' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
打开时,插入模式下会识别 <Esc> 开始的功能键。关闭时,键码以 <Esc> 开头
的光标和功能键,不能用于插入模式。其优点是单个 <Esc> 可以被马上识别,
而不用等待一秒。除了复位本选项以外,也可以考虑修改 'timeoutlen' 和
'ttimeoutlen' 的值。注意 'esckeys' 关闭时仍可映射任何键,但光标键在缺
省情况下无法使用。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
备注: 本选项关闭时,在插入模式下会屏蔽 modifyOtherKeys 和
xterm-bracketed-paste 功能,以免每个带修饰符的键都导致插入模式退出。
'eventignore' 'ei'
'eventignore' 'ei' 字符串 (缺省为 "")
全局
要忽略的自动命令事件名的列表。
设为 "all" 或者其中一个项目是 "all" 时,会忽略所有的自动命令事件,不执
行任何自动命令。
否则,本选项为逗号分隔的事件名列表。例如:
:set ei=WinEnter,WinLeave
要忽略除了特定事件以外的所有事件,可用 "-" 前缀:
:set ei=all,-WinLeave
'eventignorewin' 'eiw'
'eventignorewin' 'eiw' 字符串 (缺省为 "")
局部于窗口
和 'eventignore' 类似,但只应用于特定窗口及其缓冲区,无限期忽略其中和
窗口和缓冲区相关的自动命令,而无需改动全局的 'eventignore'。
注意: 以下事件发生在窗口上下文之外,因而无法被 'eventignorewin' 忽略:
CmdlineChanged 、
CmdlineEnter 、
CmdlineLeave 、
CmdlineLeavePre 、
CmdUndefined 、
CmdwinEnter 、
CmdwinLeave 、
ColorScheme 、
ColorSchemePre 、
CompleteChanged 、
CompleteDone 、
CompleteDonePre 、
DiffUpdated 、
DirChanged 、
DirChangedPre 、
EncodingChanged 、
ExitPre 、
FocusGained 、
FocusLost 、
FuncUndefined 、
GUIEnter 、
GUIFailed 、
KeyInputPre 、
MenuPopup 、
ModeChanged 、
OptionSet 、
QuickFixCmdPost 、
QuickFixCmdPre 、
QuitPre 、
RemoteReply 、
SafeState 、
SafeStateAgain 、
SessionLoadPost 、
SessionWritePost 、
ShellCmdPost 、
SigUSR1 、
SourceCmd 、
SourcePost 、
SourcePre 、
SpellFileMissing 、
StdinReadPost 、
StdinReadPre 、
SwapExists 、
Syntax 、
TabClosed 、
TabClosedPre 、
TabEnter 、
TabLeave 、
TabNew 、
TermChanged 、
TerminalOpen 、
TerminalWinOpen 、
TermResponse 、
TermResponseAll 、
User 、
VimEnter 、
VimLeave 、
VimLeavePre 、
VimResized 、
VimResume 、
VimSuspend 、
WinNew 、
WinNewPre
'expandtab' 'et' 'noexpandtab' 'noet'
'expandtab' 'et' 布尔型 (缺省关闭)
局部于缓冲区
插入模式下: 插入 <Tab> 时会使用合适数量的空格代替。'autoindent' 打开
时,'>' 和 '<' 命令也会使用空格来缩进。'expandtab' 打开时,要插入实际
的制表,可用 CTRL-V<Tab>。另见 :retab 和 ins-expandtab 。
'paste' 选项置位时会临时复位本选项。'paste' 复位时会恢复本选项。
注意: 'compatible' 置位时会复位本选项。
'exrc' 'ex' 'noexrc' 'noex'
'exrc' 'ex' 布尔型 (缺省关闭)
全局
允许读入在当前目录里的 .vimrc,.exrc 和 .gvimrc。
设置本选项存在潜在安全风险。例如,在解压文件包或从 github 获取文件时,
如果其中包含 .vimrc,可能被用作特洛伊木马。 最好不要用本选项 !
一个替代方案是,在 .vimrc 里定义自动命令,为匹配的目录设置特定选项。
如果打开本选项,建议同时置位 'secure' 选项 (见 initialization )。
另见 .vimrc 和 gui-init 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'fileencoding' 'fenc' E213
'fileencoding' 'fenc' 字符串 (缺省: "")
局部于缓冲区
设置此缓冲区文件使用的字符编码。
'fileencoding' 不同于 'encoding' 时,写文件时需要进行转换。读文件时见
下。
'fileencoding' 为空时,使用 'encoding' 值 (此时文件读写无需转换)。
设置此值时不会立即报错,仅当使用此值 (包括写文件操作) 时才会。
'encoding' 和 'fileencoding' 都是同一种 Unicode 编码且 'fileencoding'
不是 utf-8 时,仍会进行转换。这是因为内部总是使用 utf-8 存储 Unicode。
警告: 转换可能导致信息丢失!'encoding' 为 "utf-8" 或其他
Unicode 编码时,转换结果通常可以通过逆向转换还原为相同的文本。
否则可能会丢失部分字符!
'encoding' 说明本选项的可用值。转换器也可能支持更多取值,见
mbyte-conversion 。
读文件时,'fileencoding' 会根据 'fileencodings' 进行设置。要用特定编码
读入文件,不能通过设置 'fileencoding' 而要用 ++enc 参数。但有一个例
外: 'fileencodings' 为空时会使用 'fileencoding'。新文件使用
'fileencoding' 的全局值。
这里 "8bit-" 和 "2byte-" 前缀没有意义,会被忽略。本选项设置时,其值会
被转成小写。所以,用大写值来设置也无不可。'_' 会被转换为 '-'。可被
'encoding' 识别的编码会被转换为其标准名。比如 "ISO8859-2" 会变为
"iso-8859-2"。
开始编辑文件后再设置本选项时,'modified' 选项会被置位,因为文件被认为
已和当初写入时不同。
记住从模式行设置 'fenc' 会在文本读入 之后 发生,所以只会影响文件的写
入。如果确实要在模式行上设置 'fenc',可能还需要设置 'nomodified',否则
无法执行 ":q" 退出。
本选项在 'modifiable' 关闭时不能改变。
'fe'
注意: 在 6.0 版本之前,本选项用于设定整个 Vim 所用的编码,这是一个设计
错误。现在用 'encoding' 代替。旧的简称是 'fe',现已不再使用。
'fileencodings' 'fencs'
'fileencodings' 'fencs' 字符串 (缺省: "ucs-bom",
'encoding' 为某种 Unicode 编码时的缺省:
"ucs-bom,utf-8,default,latin1")
全局
用于在开始编辑已有文件时参考的字符编码列表。读文件时,Vim 会尝试使用本
列表中首个不出错的字符编码。找到可用的编码时,设置 'fileencoding' 为该
值。如果全都失败,'fileencoding' 会设为空串,这意味着会使用 'encoding'
值。
警告: 转换可能导致信息丢失!'encoding' 为 "utf-8" 或其他
Unicode 编码时,转换结果通常可以通过逆向转换还原为相同的文本。
否则可能会丢失部分非 ASCII 字符!可用 ++bad 参数来指定转换失
败时的行为。
对于空文件或者只含 ASCII 字符的文件,多数编码都可以工作,因而应该会使
用 'fileencodings' 的第一项 (但会跳过 "ucs-bom",因为它需要 BOM)。如果
希望采用其他编码,可用 BufReadPost 自动命令事件来测试首选编码是否被采
用。比如:
au BufReadPost * if search('\S', 'w') == 0 |
\ set fenc=iso-2022-jp | endif
如果文件不包含任何非空白字符,该代码会设置 'fileencoding' 为
"iso-2022-jp"。
使用 ++enc 参数时,不考虑 'fileencodings'。
注意 'fileencodings' 不用于新文件。这种情况下采用 'fileencoding' 的全
局值。可以这样设置:
:setglobal fenc=iso-8859-2
这意味着不存在的文件可能和空文件采用不同的编码。
特殊值 "ucs-bom" 用于检查文件开头的 Unicode BOM (Byte Order Mark 字节
顺序标记)。为了使其生效,"utf-8" 或其他 Unicode 编码不能在它之前出现。
8 位编码 (如 "latin1") 必须放在最后,因为 Vim 检测该编码时不会出错,所
以该编码会被无条件接受。
特殊值 "default" 用于指定来自环境的编码。MS-Windows 上使用系统编码,而
其它系统上使用 'encoding' 缺省值。当希望将 'encoding' 设为 "utf-8",而
环境使用非 latin1 编码 (例如俄语) 时,可用此值。
当 'encoding' 为 "utf-8" 但文件包含非法的字节序列时,文件编码不会被识
别为 UTF-8。可用 8g8 命令来寻找非法的字节序列。
错 误 的 值: 错 在 哪 里:
latin1,utf-8 总会使用 "latin1"
utf-8,ucs-bom,latin1 utf-8 文件里的 BOM 不会被识别
cp1250,latin1 总会使用 "cp1250" (译者注: 8-位编码)
如果 'fileencodings' 为空,'fileencoding' 不会被修改。
'fileencoding' 说明本选项的可能值。
本选项的设置只有在下一次读入文件时才会生效。
'fileformat' 'ff'
'fileformat' 'ff' 字符串 (MS-Windows 的缺省: "dos",
Unix 的缺省: "unix")
局部于缓冲区
给出当前缓冲区的 <EOL> 格式,用于从文件读入缓冲区和把缓冲区写回文件:
dos <CR><NL>
unix <NL>
mac <CR>
使用 "dos" 时,同时忽略文件尾的 CTRL-Z。
见 file-formats 和 file-read 。
文件使用的字符编码见 'fileencoding'。
置位 'binary' 时,会忽略 'fileformat' 的值。文件输入/输出如同它被设为
"unix" 那样进行。
文件开始编辑时,如果 'fileformats' 非空而 'binary' 关闭,本选项被自动
设置。
开始编辑文件后再设置本选项时,'modified' 选项会被置位,因为文件被认为
已和当初写入时不同。
本选项在 'modifiable' 关闭时不能改变。
为了后向兼容: 把本选项设为 "dos" 时,会置位 'textmode',设为其他值时,
则会复位 'textmode'。
'fileformats' 'ffs'
'fileformats' 'ffs' 字符串 (缺省值:
Vim+Vi MS-Windows: "dos,unix",
Vim Unix: "unix,dos",
Vi Cygwin: "unix,dos",
Vi 其它: "")
全局
给出换行符 (<EOL>) 格式,开始编辑新缓冲区或者读入文件到已有的缓冲区
时,会尝试这些格式:
- 为空时,总是使用 'fileformat' 定义的格式。不自动设置该选项。
- 设为一个名字时,该格式总是用于新打开的缓冲区,并相应地为该缓冲区设置
'fileformat'。将文件读入已有的缓冲区时,使用 'fileformats' 给出的名
字,忽略该缓冲区原有的 'fileformat' 值。
- 给出多于一个名字时 (以逗号分隔),读入文件时会自动进行 <EOL> 检测。开
始编辑文件时,会用下列方式检查 <EOL>:
1. 如果所有行都以 <CR><NL> 结尾,且 'fileformats' 包含 "dos" 的话,
'fileformat' 会设为 "dos"。
2. 如果找到一个 <NL>,且 'fileformats' 包含 "unix" 的话,
'fileformat' 会设为 "unix"。注意 当找到的 <NL> 没有前导 <CR> 时,
"unix" 优先于 "dos"。
3. 如果 'fileformat' 此时还没有被设置,找到一个 <CR>,且
'fileformats' 包含 "mac" 的话,'fileformat' 会设为 "mac"。
这意味着 "mac" 只有在:
"unix" 未给出、或者在文件里没有找到 <NL>,并且
"dos" 未给出、或者在文件里没有找到 <CR><NL> 时
才会被选中。
例外: 如果先选中 "unix",但在第一个出现的 <NL> 之前出现过 <CR>,
而文件的头几行里 <CR> 比 <NL> 看起来多的话,也使用 "mac"。
4. 如果此时 'fileformat' 还没有被设置,则使用 'fileformats' 里的首个
名字。
读入文件到已有的缓冲区时,会使用相同的检测步骤,对该文件采用计算得到
的格式,但不会相应地修改 'fileformat' 选项值。
置位 'binary' 时,会忽略 'fileformats' 的值。
Vim 启动时创建的空缓冲区会使用本选项的首个名字。要覆盖该值,可在
.vimrc 中设置 'fileformat'。
对于使用 DOS 类型的 <EOL> (<CR><NL>) 的系统来说,读入待执行的脚本
(":source") 或者 vimrc 文件时,可能会进行自动 <EOL> 检测:
- 'fileformats' 为空时,不会自动检测。使用 DOS 格式。
- 'fileformats' 为一到多个名字时,会进行自动检测。它基于文件中的第一个
出现的 <NL>: 如果它有前导的 <CR>,会使用 DOS 格式,否则使用 Unix 格
式。
另见 file-formats 。
为了后向兼容: 把本选项设为空字符串或者单一格式 (没有包含逗号) 时,会复
位 'textauto',设为其他值时,则会置位 'textauto'。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'fileignorecase' 'fic' 'nofileignorecase' 'nofic'
'fileignorecase' 'fic' 布尔型 (在通常忽略文件名大小写的系统上,缺省打开)
全局
置位时,使用文件名和目录名时忽略大小写。
传统上大小写不敏感的文件系统上,本选项缺省打开 (如 MS-Windows 和
macOS)。不过,Vim 在运行时无法判断特定的文件系统究竟是大小写敏感还是不
敏感。
如果只希望在补全时忽略大小写,参见 'wildignorecase'。
'filetype' 'ft'
'filetype' 'ft' 字符串 (缺省: "")
局部于缓冲区 local-noglobal
设置本选项时,会激活 FileType 自动命令事件。执行所有匹配本选项值的自动
命令。这时,匹配使用的是 'filetype' 值而不是文件名。
除此以外,本选项不总是反映当前的文件类型。
通常在检测到文件类型时设置本选项。要打开这一功能,可用 ":filetype on"
命令。 :filetype
将本选项设为非自动检测的值,最常用于文件类型无法自动识别时,通过模式行
进行手动设置。例如对于 IDL 文件:
/* vim: set filetype=idl : */
FileType filetypes
选项值出现的句号用于分隔不同的文件类型名。所以文件类型里不能使用句号。
例如:
/* vim: set filetype=c.doxygen : */
会先使用 "c" 文件类型,再使用 "doxygen" 文件类型。这既适用于文件类型插
件,也适用于语法文件。句号可以多于一个。
本选项不会被复制到其他缓冲区,这不受 'cpoptions' 里是否包含 's' 或 'S'
标志位的影响。
只能使用字母数位字符、'-' 和 '_' (组合不同文件类型时,也可用作为分隔符
的 '.')。
'fillchars' 'fcs'
'fillchars' 'fcs' 字符串 (缺省为 "vert:|,fold:-,eob:~,lastline:@")
全局或局部于窗口 global-local
用作状态行、垂直分割线、窗口特殊行和 ins-completion-menu 里的截断文
本的填充字符。
这是逗号分隔的项目列表。每个项目由名字,冒号和值组成: E1511
项目名 缺省 用于
stl ' ' 当前窗口的状态行
stlnc ' ' 非当前窗口的状态行
vert '|' 垂直分割线 :vsplit
fold '-' 填充 'foldtext'
foldopen '-' 标记折叠开始处
foldclose '+' 显示关闭的折叠
foldsep '|' 已打开折叠的中间字符
foldinner 无 当窄 'foldcolumn' 容不下所有折叠时,用
于重复显示以代替数值嵌套级别的字符
diff '-' 'diff' 选项里的已删除行
eob '~' 缓冲区结束下方的空行
lastline '@' 'display' 包含 lastline/truncate
trunc '>' ins-completion-menu 里的截断文本
truncrl '<' 同 "trunc",用于 'rightleft' 模式
tpl_vert '|' 'tabpanel' 的垂直分割符
任何未给出的项目都使用其缺省值 (见上)。
例如:
:set fillchars=stl:\ ,stlnc:\ ,vert:\|,fold:-,diff:-,tpl_vert:\|
所有项目都支持单字节和多字节字符。但不支持双宽字符。 E1512
这些项目使用的高亮:
项目名 高亮组
stl StatusLine hl-StatusLine
stlnc StatusLineNC hl-StatusLineNC
vert VertSplit hl-VertSplit
fold Folded hl-Folded
foldopen FoldColumn hl-FoldColumn
foldclose FoldColumn hl-FoldColumn
foldsep FoldColumn hl-FoldColumn
diff DiffDelete hl-DiffDelete
eob EndOfBuffer hl-EndOfBuffer
lastline NonText hl-NonText
trunc 众多弹出菜单高亮组之一,如 hl-PmenuSel
truncrl 同 "trunc"
'findfunc' 'ffu' E1514
'findfunc' 'ffu' 字符串 (缺省为空)
全局或局部于缓冲区 global-local
{仅当编译时加入 +eval 特性才有效}
:find 命令用于获取文件名的函数。本选项为空时,使用内部
file-searching 机制。
值可为函数名、 lambda 或 Funcref 。详见 option-value-function 。
函数调用时带两个参数。第一个 String 参数对应 :find 命令的参数。第
二个 Boolean 参数当函数用于获取命令行补全的匹配列表时为 v:true 。
函数应返回字符串列表。
每次 :find 命令执行只调用此函数一次。此函数需要处理 'path' 里指定的
所有目录。
如果找到匹配,函数应返回包含一或多个文件名的 List 。如果没找到匹配,
函数应返回空列表。
函数调用时如果出现错误,也应返回空列表。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
示例:
" 用 glob()
func FindFuncGlob(cmdarg, cmdcomplete)
let pat = a:cmdcomplete ? $'{a:cmdarg}*' : a:cmdarg
return glob(pat, v:false, v:true)
endfunc
set findfunc=FindFuncGlob
" 用 'git ls-files' 的输出
func FindGitFiles(cmdarg, cmdcomplete)
let fnames = systemlist('git ls-files')
return fnames->filter('v:val =~? a:cmdarg')
endfunc
set findfunc=FindGitFiles
'fixendofline' 'fixeol' 'nofixendofline' 'nofixeol'
'fixendofline' 'fixeol' 布尔型 (缺省打开)
局部于缓冲区
写入文件且本选项打开时,恢复文件尾缺失的 <EOL>。如果希望保留文件原始格
式,应关闭本选项。
置位 'binary' 选项时,会忽略本选项。
见 'endofline' 选项。
示例设置见 eol-and-eof 。
'fkmap' 'fk' 'nofkmap' 'nofk'
'fkmap' 'fk' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +rightleft 特性才有效}
本选项曾用于支持波斯语,此支持已删除。见 farsi.txt 。
'foldclose' 'fcl'
'foldclose' 'fcl' 字符串 (缺省为 "")
全局
{仅当编译时加入 +folding 特性才有效}
设为 "all" 时,不包含光标且级别高于 'foldlevel' 的折叠被自动关闭。用于
光标移出后,自动关闭折叠。
'foldcolumn' 'fdc'
'foldcolumn' 'fdc' 数值型 (缺省为 0)
局部于窗口
{仅当编译时加入 +folding 特性才有效}
非零时,在窗口的一侧显示指定宽度的列,用于指示折叠的打开和关闭。最大值
为 12。
见 folding 。
'foldenable' 'fen' 'nofoldenable' 'nofen'
'foldenable' 'fen' 布尔型 (缺省打开)
局部于窗口
{仅当编译时加入 +folding 特性才有效}
关闭时,展开所有的折叠。本选项用于在完全展开所有折叠和保留当前折叠状态
(包括手动打开或关闭的折叠) 之间快速切换。 zi 命令切换本选项。
关闭本选项时,'foldcolumn' 会保持空白。
建立新折叠或者关闭折叠的命令会置位本选项。见 folding 。
'foldexpr' 'fde'
'foldexpr' 'fde' 字符串 (缺省: "0")
局部于窗口
{仅当编译时加入 +folding 和 +eval 特性才有效}
'foldmethod' 为 "expr" 时使用的表达式。用于为每一行计算折叠级别。上下
文设为设置 'foldexpr' 的脚本,这样就能使用局部于脚本的项目。
用法见 fold-expr 。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'diff' 打开或 'modelineexpr' 关闭时,不能在 modeline 中设置本选项。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
'foldignore' 'fdi'
'foldignore' 'fdi' 字符串 (缺省: "#")
局部于窗口
{仅当编译时加入 +folding 特性才有效}
仅在 'foldmethod' 为 "indent" 时生效。以 'foldignore' 中字符开头的行会
从其前后相邻的行继承折叠级别。检查这些字符时会跳过前导空白。缺省的 "#"
对 C 程序非常适用。见 fold-indent 。
'foldlevel' 'fdl'
'foldlevel' 'fdl' 数值型 (缺省: 0)
局部于窗口
{仅当编译时加入 +folding 特性才有效}
设置折叠级别: 高于此级别的折叠会被关闭。
将本选项设为零会关闭所有的折叠。数字设得越大,关闭的折叠越少。
zm 、 zM 和 zR 等命令会设置本选项。
见 fold-foldlevel 。
'foldlevelstart' 'fdls'
'foldlevelstart' 'fdls' 数值型 (缺省: -1)
全局
{仅当编译时加入 +folding 特性才有效}
设置在窗口里开始编辑缓冲区时的 'foldlevel'。用于控制开始编辑时折叠的状
态: 为零时关闭所有折叠,为 1 时关闭部分折叠,为 99 时不关闭任何折叠。
此操作在读入任何模式行前完成,因此模式行的设置可以覆盖本选项的设定。
开始编辑 diff-mode 的文件时,也会忽略本选项,此时总是关闭所有折叠。
此操作也在 BufReadPre 自动命令前完成,因此自动命令也可以为特定文件重新
设定 'foldlevel' 的值。
本值为负时,不应用本选项。
'foldmarker' 'fmr' E536
'foldmarker' 'fmr' 字符串 (缺省: "{{{,}}}")
局部于窗口
{仅当编译时加入 +folding 特性才有效}
'foldmethod' 为 "marker" 时使用的开始和结束标志。开始和结束标志必须由
一个逗号分隔。标志是一个按本义出现的字符串 (正则表达式太慢了)。
见 fold-marker 。
'foldmethod' 'fdm'
'foldmethod' 'fdm' 字符串 (缺省: "manual")
局部于窗口
{仅当编译时加入 +folding 特性才有效}
当前窗口使用的折叠方式。可选值为:
fold-manual manual 手动建立折叠。
fold-indent indent 相同缩进量的行构成折叠。
fold-expr expr 'foldexpr' 给出每行的折叠级别。
fold-marker marker 使用标志来指定折叠。
fold-syntax syntax 使用语法高亮项目来指定折叠。
fold-diff diff 比较模式下没有改动的文本构成折叠。
'foldminlines' 'fml'
'foldminlines' 'fml' 数值型 (缺省: 1)
局部于窗口
{仅当编译时加入 +folding 特性才有效}
设置屏幕行数,超过该值的折叠将被显示为关闭。也适用于手动关闭的折叠。
缺省值 1 代表只关闭占据两行或更多的折叠。
设为零时,即使折叠只占一屏幕行也会被关闭。
注意 这只影响显示效果。使用 "zc" 关闭少于 'foldminlines' 行的折叠时,
会被显示为打开。但后续的 "zc" 可能会进一步关闭包含该折叠的折叠。
'foldnestmax' 'fdn'
'foldnestmax' 'fdn' 数值型 (缺省: 20)
局部于窗口
{仅当编译时加入 +folding 特性才有效}
设置限制使用 "indent" 和 "syntax" 方法构造的最大折叠嵌套层数。以防止折
叠层级过多。本值不能超过 20,因为内部的限制就是 20 层。
'foldopen' 'fdo'
'foldopen' 'fdo' 字符串 (缺省: "block,hor,mark,percent,quickfix,
search,tag,undo")
全局
{仅当编译时加入 +folding 特性才有效}
指定命令类型,这些命令在移动光标到已关闭折叠时,会自动打开该折叠。这是
一个逗号分隔的项目列表。
备注: 当命令是映射一部分时,不使用本选项。但在映射中加入 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%") 的一部分时,不使用本选项。这意
味着操作符会包含整个关闭折叠。
注意 这里不包括垂直移动命令,否则移过已关闭的折叠会非常不便。
插入模式下,插入文本时总会打开光标所在的折叠。
要关闭折叠,可用 zx 命令来重新应用 'foldlevel',或者把 'foldclose'
选项设为 "all"。
'foldtext' 'fdt'
'foldtext' 'fdt' 字符串 (缺省: "foldtext()")
局部于窗口
{仅当编译时加入 +folding 特性才有效}
计算用来替代已关闭折叠的显示文本的表达式。上下文设为设置 'foldexpr'
(译者注: 原文如此,应为 'foldtext') 的脚本,这样就能使用局部于脚本的项
目。用法见 fold-foldtext 。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
'formatexpr' 'fex'
'formatexpr' 'fex' 字符串 (缺省 "")
局部于缓冲区
{仅当编译时加入 +eval 特性才有效}
使用 gq 操作符或自动排版时 (见 'formatoptions'),计算本表达式,对指
定的行范围进行排版。本选项为空时,会使用 'formatprg'。
v:lnum 变量保存要排版范围的第一行。
v:count 变量保存要排版范围的总行数。
v:char 变量保存当因自动排版而计算表达式时,即将插入的字符。也可能为
空。表达式里不要插入该字符!
例如:
:set formatexpr=mylang#Format()
会调用在 'runtimepath' 里 autoload/mylang.vim 文件里定义的
mylang#Format() 函数。 autoload
使用不带参数的函数调用更有效率,见 expr-option-function 。
设置了 'textwidth' 且新增文本超过此宽度时,也会计算本表达式。触发条件
和内部排版机制一致。需要确保排版完成后,光标相对于文本的位置保持不变!
mode() 函数此时应返回 "i" 或 "R"。
函数返回非零时,Vim 会回到使用内部的排版机制。
表达式以 s: 或 <SID> 开始时,会用脚本 ID ( local-function ) 替代这些
前缀。例如:
set formatexpr=s:MyFormatExpr()
set formatexpr=<SID>SomeFormatExpr()
否则,表达式会在设置本选项的脚本上下文里计算,这样就可访问该脚本的局部
项目。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
不过那里本选项无法达到需要的效果,因为缓冲区文本被禁止修改。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
注意: 'compatible' 置位时会设置本选项为 ""。
'formatlistpat' 'flp'
'formatlistpat' 'flp' 字符串 (缺省: "^\s*\d\+[\]:.)}\t ]\s*")
局部于缓冲区
用于识别列表项的引导模式。供 'formatoptions' 里的 'n' 标志位使用。
该模式匹配到的长度必须和后续回绕行的缩进量一致。可用 /\ze 来标记匹配
结束位置,即使后面还有更多的字符要检查。模式之后必须至少包含一个字符,
如果匹配了整行,则视为未匹配。
缺省模式为数值,后跟一个可选的标点符号和空白。
'formatoptions' 'fo'
'formatoptions' 'fo' 字符串 (Vim 缺省: "tcq",Vi 缺省: "vt")
局部于缓冲区
描述自动排版的工作方式的字母序列。
可选值见 fo-table 。如何排版文本见 gq 。
'paste' 选项置位时不进行排版 (相当于 'formatoptions' 为空)。字母间可以
插入逗号,以提高可读性。
建议使用 ":set" 的 "+=" 和 "-=" 功能,这可以避免未来版本增加新的标志位
时出现的问题 add-option-flags 。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'formatprg' 'fp'
'formatprg' 'fp' 字符串 (缺省为 "")
全局或局部于缓冲区 global-local
用 gq 操作符在选中的行上排版所使用的外部程序名。该程序必须能读取标准
输入并在标准输出上返回结果。Unix 程序 "fmt" 就是这样的一个程序。
'formatexpr' 选项非空时,会优先使用该选项而非本选项。这两个选项都为空
时,会使用内部的排版函数 C-indenting 。
环境变量被扩展 :set_env 。 option-backslash 说明如何包含空格和反斜
杠。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'fsync' 'fs' 'nofsync' 'nofs'
'fsync' 'fs' 布尔型 (缺省打开)
全局或局部于缓冲区 global-local
打开时,写入文件后会调用库函数 fsync()。立即将文件同步到磁盘,确保文件
即使在只做元数据 (metadata) 日志 (journaling) 的文件系统上也会被安全写
入。Linux 系统的笔记本模式下,它会强迫硬盘转上一会儿,部分用户未必希望
如此。但要警告的是,关闭本选项会增加崩溃时数据丢失的机率。没有 fsync()
实现的系统上,本选项总为关闭状态。
这是 global-local 选项,可为每个缓冲区独立设置,例如在写入位于慢速文
件系统的缓冲区时使用。
要控制交换文件写入时是否调用 fsync(),另见 'swapsync'。
'fsync' 也适用于 writefile() (除非使用的相关标志位覆盖此行为) 和撤销
文件的写入 (见 undo-persistence )。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'gdefault' 'gd' 'nogdefault' 'nogd'
'gdefault' 'gd' 布尔型 (缺省关闭)
全局
打开时,":substitute" 的 'g' 标志位缺省打开。这意味着会替代一行内的所
有匹配,而不是只替代一个。":substitute" 命令里使用一个 'g' 标志位会切
换一次替代使用的所有/单个匹配方式。见 complex-change 。
命令 'gdefault' 打开 'gdefault' 关闭
:s/// 替代所有 替代单个
:s///g 替代单个 替代所有
:s///gg 替代所有 替代单个
注意: 'compatible' 置位时会复位本选项。
置位本选项可能会破坏依赖 'g' 标志位缺省行为的插件。这也使得 'g' 标志位
和 :s_g 文档描述的行为相反。
Vim9 脚本不使用本选项。
'grepformat' 'gfm'
'grepformat' 'gfm' 字符串 (缺省为 "%f:%l:%m,%f:%l%m,%f %l%m")
全局或局部于缓冲区 global-local
用于识别 ":grep" 命令输出的格式。
这是类似于 scanf 格式的字符串,和 'errorformat' 选项使用的格式相同:
errorformat 。
'grepprg' 'gp'
'grepprg' 'gp' 字符串 (缺省值:
Unix: "grep -n $* /dev/null"
Win32: "findstr /n" 或 "grep -n"
VMS: "SEARCH/NUMBERS "
其他: "grep -n ")
全局或局部于缓冲区 global-local
:grep 命令调用的程序。本选项可以包含 '%' 和 '#' 字符,会像在命令行上
一样被扩展。占位符 "$*" 用于指定参数插入的位置。环境变量被扩展
:set_env 。 option-backslash 说明如何包含空格和反斜杠。
"grep" 接受 "-H" 参数时,下列设置会使 ":grep" 也能正确用于单个文件:
:set grepprg=grep\ -nH
特殊值: 'grepprg' 设为 "internal" 时, :grep 命令相当于 :vimgrep ,
:lgrep 相当于 :lvimgrep , :grepadd 相当于 :vimgrepadd 而
:lgrepadd 相当于 :lvimgrepadd 。
另见 :make_makeprg 一节,因为那里的多数说明也同样适用于 'grepprg'。
Win32 上,如果能找到 "findstr.exe" 的话,缺省值为 "findstr /n"。否则,
缺省值为 "grep -n"。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'guicursor' 'gcr' E545 E546 E548 E549
'guicursor' 'gcr' 字符串 (缺省值:
Win32 终端:
"n-v-c:block,o:hor50,i-ci:hor15,
r-cr:hor30,sm:block"
其他:
"n-v-c:block-Cursor/lCursor,
ve:ver35-Cursor,
o:hor50-Cursor,
i-ci:ver25-Cursor/lCursor,
r-cr:hor20-Cursor/lCursor,
sm:block-Cursor
-blinkwait175-blinkoff150-blinkon175")
全局
{仅适用于 GUI 和 Win32 控制台}
本选项用于指定 Vim 在不同模式下光标的外观。GUI 完全支持所有特性。Win32
控制台只能改变光标高度。可指定块光标或带百分比的垂直和水平光标。控制台
上使用 't_SI'、't_SR' 和 't_EI' 转义序列。
本选项是逗号分隔的部分列表。每个部分由模式列表和参数列表组成:
模式列表:参数列表,模式列表:参数列表,..
"模式列表" 是由连字符分隔的下列模式的列表:
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} cursor-blinking
blinkon{N}
blinkoff{N}
光标的闪烁时间: blinkwait 指定光标开始闪烁前的延迟,
blinkon 指定光标显示的时间,而 blinkoff 指定光标停止显
示的时间。这些时间均以毫秒为单位。任何一个数值为零时,
就不会有闪烁的效果。
缺省为: "blinkwait700-blinkon400-blinkoff250"。省略一
项时,使用该项的缺省数值。这表示缺省打开光标闪烁。要关
闭闪烁,可用 "blinkon0"。
光标只在 Vim 等待输入时才会闪烁,执行命令时不会。
要使光标在 xterm 上闪烁,见 xterm-blink 。
{group-name}
单个高亮组名,设置光标的颜色和字体
{group-name}/{group-name}
一对高亮组名。未使用语言映射时采用第一个,使用语言映射
时采用另一个。 language-mapping
"部分" 的例子:
n-c-v:block-nCursor 在普通、命令行和可视模式下,使用块光标和
"nCursor" 高亮组的颜色
i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150
在插入和命令行插入模式下,使用 30% 的垂直线光
标和 "iCursor" 高亮组的颜色。闪烁也加快一点。
'a' 模式有所不同。它会为所有的模式设置相同的参数列表。没有出现的参数并
不复位为缺省值。可用于为所有模式增加若干通用设置。例如,关闭闪烁:
"a:blinkon0"
光标高亮的例子:
:highlight Cursor gui=reverse guifg=NONE guibg=NONE
:highlight Cursor gui=NONE guifg=bg guibg=fg
'guifont' 'gfn'
E235 E596
'guifont' 'gfn' 字符串 (缺省为 "")
全局
{仅当编译时加入 GUI 的支持才有效}
这是 Vim 的 GUI 版本使用的字体列表。最简单的形式是单个字体名。
详见 gui-font 。
'guifontset' 'gfs'
E250 E252 E234 E597 E598
'guifontset' 'gfs' 字符串 (缺省为 "")
全局
{仅当编译时打开 GUI 支持并加入 +xfontset 特性才有效}
{没有 GTK+ GUI 的支持}
非空时,指定两个 (或更多) 的字体。第一个字体用于普通英语,第二个用于特
定语言。见 xfontset 。
'guifontwide' 'gfw' E231 E533 E534
'guifontwide' 'gfw' 字符串 (缺省为 "")
全局
{仅当编译时加入 GUI 的支持才有效}
非空时,指定用于双宽字符的字体列表,以逗号分隔。使用首个能成功载入的字
体。见 gui-fontwide 。
'guiheadroom' 'ghr'
'guiheadroom' 'ghr' 数值型 (缺省为 50)
全局
{仅有 GTK 和 X11 GUI 支持}
用于在屏幕上调整 GUI 窗口大小以适应显示时,从屏幕高度中减去的像素点
数。可在 GUI 启动前 (例如在 gvimrc 文件里) 设置。为零时,窗口使用整
个屏幕高度。为正值时,从屏幕高度中减去指定数目的像素行,用于窗口的装饰
和屏幕的其他项目。为负值时,窗口会超过屏幕高度。
'guiligatures' 'gli' E1243
'guiligatures' 'gli' 字符串 (缺省为 "")
全局
{仅有 GTK 和 Win32 GUI 支持}
合并时可生成复杂字形的 ASCII 字符列表。每个字符必须是取值在 32-127 范
围的可显示 ASCII 字符。
例如:
:set guiligatures=!\"#$%&()*+-./:<=>?@[]^_{\|~
修改本选项会立即刷新屏幕输出。设为空串可以关闭合字功能。
'guioptions' 'go'
'guioptions' 'go' 字符串 (缺省值:
GTK 和 Motif: "aegimrLtT"
其他: "egmrLtT"
(MS-Windows 上在 defaults.vim 中移除了 "t")
)
全局
{仅当编译时加入 GUI 的支持才有效}
本选项仅在 Vim 的 GUI 版本中生效。这是一组字母序列,描述 GUI 应使用的
界面组件和相关选项。
建议使用 ":set" 的 "+=" 和 "-=" 特性,这可以避免未来版本增加新的标志位
时出现的问题 add-option-flags 。
下面列出合法的标志位字符:
'go-!'
'!' 在终端窗口中执行外部命令。排除时,MS-Windows GUI 会打开一个控
制台窗口来执行命令。而 Unix GUI 则会模拟一个哑终端来显示命令的
输出。
终端窗口位于底部,必要时会向上扩展。
'go-a'
'a' 自动选择: 包含时,每当启动可视模式或扩展可视区域时,Vim 都会试
图取得窗口系统全局选择区的所有权。这代表高亮的可视文本可粘贴到
其他应用程序,包括 Vim 自身。可视区域被终止时 (因为在文本上进
行的一些操作或者应用程序需要粘贴选择区等原因),高亮文本会被自
动抽出到 "* 选择寄存器中。这样,即使退出可视模式,选择区仍然可
用,以便粘贴到其他应用程序。
排除时,Vim 不会取得窗口系统的全局选择区的所有权,除非显式
使用 "* 寄存器进行抽出和删除操作。
同样适用于无模式选择。
'go-P'
'P' 和自动选择类同,但复制到 "+ 寄存器而不是 "* 寄存器。
'go-A'
'A' 无模式选择的自动选择。和 'a' 类似,但仅限于无模式选择。
'guioptions' 可视的自动选择 无模式的自动选择
"" -- --
"a" 是 是
"A" -- 是
"aA" 是 是
使用终端时,请见 'clipboard' 选项。
'go-c'
'c' 简单选择使用控制台对话框而不是弹出对话框。
'go-C'
'C' 如果可用,使用 hl-TitleBar 和 hl-TitleBarNC 。
目前 {仅可用于 MS-Windows GUI}。
详见 gui-w32-title-bar 。
'go-d'
'd' 如果可能,使用深色主题变体。
目前 {仅可用于 MS-Windows 和 GTK+ GUI}。
'go-e'
'e' 根据 'showtabline' 的要求加入标签页。可用 'guitablabel' 来改变
标签文本。排除时,仍可能使用非 GUI 的标签页行。
{仅有部分系统支持 GUI 标签页,目前包括 GTK、Motif、Mac OS/X、
Haiku 和 MS-Windows}
'go-f'
'f' 前台: 不通过外壳调用 fork() 分叉来启动 GUI 进程。用于需要等待
编辑器完成的程序 (例如,e-mail 程序)。也可用 "gvim -f" 或
":gui -f" 来从前台启动 GUI。 gui-fork
注意: 必须在 vimrc 文件里设置本选项。读入 gvimrc 文件时,分
叉操作可能已经发生。
'go-i'
'i' 使用 Vim 图标。GTK 和 KDE 上,它出现在窗口左上角。在非 GTK 环
境上,因为 X11 的限制,只能显示为黑白。要得到彩色图标,见
X11-icon 。
'go-m'
'm' 启用菜单栏。
'go-M'
'M' 不执行系统菜单脚本 "$VIMRUNTIME/menu.vim"。注意 本标志位必须在
.vimrc 文件里加入,且在打开语法或文件类型识别之前设置 (执行
gvimrc 文件时,系统菜单已经载入;而 `:syntax on` 和
`:filetype on` 命令同样会载入菜单)。
'go-g'
'g' 灰化菜单项: 使得非激活的菜单项变灰。排除时,非激活的菜单项完全
不显示。
'go-t'
't' 启用可撕菜单项。目前 {仅可用于 Win32、GTK+ 和 Motif 1.2 GUI}。
'go-T'
'T' 启用工具栏。目前 {仅可用于 Win32、GTK+、Motif 和 Photon GUI}。
'go-s'
's' 启动全屏模式。目前 {仅支持 MS-Windows GUI 版本}。窗口会占据整
个屏幕并去除窗口装饰元素。要方便地切换全屏模式,可自定义映射,
详细的用法说明可见 gui-w32-fullscreen 。
'go-r'
'r' 始终启用右侧滚动条。
'go-R'
'R' 有垂直分割窗口时,始终启用右侧滚动条。
'go-l'
'l' 始终启用左侧滚动条。
'go-L'
'L' 有垂直分割窗口时,始终启用左侧滚动条。
'go-b'
'b' 始终启用底部 (水平) 滚动条。其长度取决于最长的可见行,或在包含
'h' 标志位时取决于光标所在行。 gui-horiz-scroll
'go-h'
'h' 将水平滚动条的长度限制为光标所在行的长度,以减少计算量。
gui-horiz-scroll
是的,如果真的想要,左右两侧都可以显示滚动条。:-)。详情可见
gui-scrollbars 。
'go-v'
'v' 对话框选择垂直按钮布局。排除时,会倾向选择水平布局,但空间不够
时,还是会用垂直的布局。{没有 GTK 3 的支持}
'go-p'
'p' 启用 X11 GUI 的指针回调。有些窗口管理器需要如此。如果光标不闪
烁或者在某些场合下变空心,考虑包含此标志位。必须在启动 GUI 之
前完成。可在 gvimrc 里设置。GUI 启动后,包含或排除不会有任何
效果。
'go-F'
'F' 启用信息页脚。{仅适用于 Motif}。见 gui-footer 。
'go-k'
'k' 增删滚动条、工具条、标签页条等时,保持 GUI 窗口大小不变。其行
为类似于最大化窗口时的效果,会自动调整 'lines' 和 'columns' 来
适应窗口的大小。排除时,Vim 在增删 GUI 组件时会试图保持
'lines' 和 'columns' 不变。
'guipty' 'noguipty'
'guipty' 布尔型 (缺省打开)
全局
{仅当编译时加入 GUI 的支持才有效}
仅适用于 GUI: 打开时,会尝试打开伪终端 (psuedo-tty) 来处理到/从外壳命
令的输入/输出。见 gui-pty 。
'guitablabel' 'gtl'
'guitablabel' 'gtl' 字符串 (缺省为空)
全局
{仅当编译时加入 GUI 的支持才有效}
非空时,指定用于 GUI 标签页行的标签文本。为空或计算结果为空时,Vim 会
使用缺省标签。详见 setting-guitablabel 。
本选项的格式类似于 'statusline'。
'guitabtooltip' 用于工具提示,见下。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
仅在显示 GUI 标签页时才用到。为此,'guioptions' 必须包含 'e'。非 GUI
的标签页行文本会使用 'tabline' 而非本选项。
'guitabtooltip' 'gtt'
'guitabtooltip' 'gtt' 字符串 (缺省为空)
全局
{仅当编译时加入 GUI 的支持才有效}
非空时,指定用于 GUI 标签页行的工具提示文本。为空时,Vim 会使用缺省工
具提示。
本选项的其它方面都和上述的 'guitablabel' 类似。
可以包含换行符。为此,最简单的方法是用 :let :
:let &guitabtooltip = "line one\nline two"
'helpfile' 'hf'
'helpfile' 'hf' 字符串 (缺省值:
MS-Windows: "$VIMRUNTIME\doc\help.txt"
其他: "$VIMRUNTIME/doc/help.txt")
全局
主帮助文件名。所有发布帮助文件应放在同一个目录下。同时也会使用
'runtimepath' 里的所有 "doc" 目录。
环境变量被扩展 :set_env 。示例: "$VIMRUNTIME/doc/help.txt"。如果没有
设置 $VIMRUNTIME,也会尝试使用 $VIM。另见 $VIMRUNTIME 。
option-backslash 说明如何包含空格和反斜杠。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'helpheight' 'hh'
'helpheight' 'hh' 数值型 (缺省为 20)
全局
用 ":help" 命令打开帮助文件时最小的初始高度。帮助文件的默认初始高度为
当前窗口的一半,打开 'ea' 选项时,则和其它窗口保持一致。但有必要时,会
调整该高度,以确保不小于本选项。设为零则关闭此功能。
'helplang' 'hlg'
'helplang' 'hlg' 字符串 (缺省: 消息语言或为空)
全局
{仅当编译时加入 +multi_lang 特性才有效}
逗号分隔的语言列表。Vim 会为指定的帮助项目找到并使用列表中首个可用语
言。英语帮助总是作为最后的备用选项。即使 "en" 出现在其他语言之前,也不
会影响优先使用其他语言里已有的帮助标签。
例如:
:set helplang=de,it
会先寻找德语版本,然后是意大利语版本,最后才是英语版本。
在非英语帮助文件里使用 CTRL-] 和 ":help!" 时,Vim 会先寻找该语言版本
的对应标签,不成功时再考虑使用本选项。见 help-translated 。
'hidden' 'hid' 'nohidden' 'nohid'
'hidden' 'hid' 布尔型 (缺省关闭)
全局
关闭时, abandon 放弃时会卸载缓冲区。打开时, abandon 放弃时则会隐藏
缓冲区。当然,仍在其他窗口里显示的缓冲区不会被隐藏。
在缓冲区列表间切换的命令,在满足以下三个条件时,即使关闭了本选项,也会
隐藏缓冲区:
- 缓冲区被修改过
- 'autowrite' 关闭,或虽已打开但由于某种原因写入失败
- 使用了 '!' 标志位
另见 windows.txt 。
如果只想隐藏一个缓冲区,可用 'bufhidden' 选项。
":hide {command}" 会为单个命令临时关闭本选项 :hide 。
警告: 对隐藏缓冲区的修改容易被忽略。使用 ":q!" 或 ":qa!" 时务必三思!
'highlight' 'hl'
'highlight' 'hl' 字符串 (缺省 (单个字符串):
"8:SpecialKey,~:EndOfBuffer,@:NonText,
d:Directory,e:ErrorMsg,i:IncSearch,
l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,
a:LineNrAbove,b:LineNrBelow,
N:CursorLineNr,r:Question,s:StatusLine,
S:StatusLineNC,c:VertSplit,t:Title,
v:Visual,V:VisualNOS,w:WarningMsg,
W:WildMenu,f:Folded,F:FoldColumn,
A:DiffAdd,C:DiffChange,D:DiffDelete,
T:DiffText,E:DiffTextAdd,>:SignColumn,
-:Conceal,B:SpellBad,P:SpellCap,
R:SpellRare, L:SpellLocal,+:Pmenu,
=:PmenuSel, k:PmenuMatch,<:PmenuMatchSel,
[:PmenuKind,]:PmenuKindSel,
{:PmenuExtra,}:PmenuExtraSel,
x:PmenuSbar,X:PmenuThumb,j:PmenuBorder,
H:PmenuShadow,*:TabLine,
#:TabLineSel,_:TabLineFill,!:CursorColumn,
.:CursorLine,o:ColorColumn,q:QuickFixLine,
z:StatusLineTerm,Z:StatusLineTermNC,
g:MsgArea,h:ComplMatchIns,I:PreInsert")
全局
本选项可以用来为若干场合设置高亮模式。这是逗号分隔的字符对列表 (译者注:
原文如此,注意第二个字符为 ':" 时后面还要跟高亮组名,见下)。在每对字符
中,第一个字符给出适用的场合,第二个字符设定该场合应采用的显示模式。这
些场合分别是 (译者注: 下表也列出缺省高亮组,见下面的 ':' 显示模式):
hl-SpecialKey 8 ":map" 列出的 Meta 和特殊键
hl-EndOfBuffer ~ 缓冲区末行之后的行
hl-NonText @ 窗口末尾的 '@' 和 'showbreak' 指定的字符
hl-Directory d CTRL-D 列出的目录和列表里其它特殊的东西
hl-ErrorMsg e 错误信息
hl-IncSearch i 'incsearch' 高亮
hl-CurSearch y 最近搜索模式的当前实例
hl-Search l 最近搜索模式高亮 (见 'hlsearch')
hl-MoreMsg m more-prompt
hl-ModeMsg M Vim 模式 (例如,"-- INSERT --")
hl-MsgArea g Command-line 和消息区域
hl-ComplMatchIns h 当前插入补全的匹配文本
hl-LineNr n ":number" 和 ":#" 命令显示的行号,也用于 'number'
和 'relativenumber' 选项置位时显示的行号。
hl-LineNrAbove a 'relativenumber' 选项置位时,光标上方的行号
hl-LineNrBelow b 'relativenumber' 选项置位时,光标下方的行号
hl-CursorLineNr N 和 n 类似,但用于 'cursorline' 选项置位时的光标行
hl-Question r hit-enter 提示和 yes/no 问题
hl-StatusLine s 当前窗口的状态行 status-line
hl-StatusLineNC S 非当前窗口的状态行
hl-Title t ":set all"、":autocmd" 等命令的输出标题
hl-VertSplit c 用来分隔垂直分割窗口的列
hl-Visual v 可视模式
hl-VisualNOS V Vim "不是选择区拥有者" (Not Owning the Selection)
时的可视模式。{仅用于 X11 GUI 的 gui-x11 、
xterm-clipboard 和 wayland-selections }
hl-WarningMsg w 警告消息
hl-WildMenu W 'wildmenu' 显示的通配符匹配
hl-Folded f 已关闭折叠的显示行
hl-FoldColumn F 'foldcolumn'
hl-DiffAdd A 比较模式新增的行
hl-DiffChange C 比较模式改变的行
hl-DiffDelete D 比较模式删除的行
hl-DiffText T 比较模式改变的文本
hl-DiffTextAdd E 比较模式插入的文本
hl-SignColumn > signs 所用的列
hl-Conceal - 用于隐藏字符的填充字符 (见 'conceallevel')
hl-SpellBad B 有拼写错误 (拼写检查器不能识别) 的单词 spell
hl-SpellCap P 应该大写开头的单词 spell
hl-SpellRare R 偏僻词 spell
hl-SpellLocal L 能识别但只在其它区域使用的单词 spell
hl-Pmenu + 弹出菜单普通项目
hl-PmenuSel = 弹出菜单选中项目
hl-PmenuKind [ 弹出菜单普通项目的 "kind" (补全类型)
hl-PmenuKindSel ] 弹出菜的选中项目的 "kind" (补全类型)
hl-PmenuExtra { 弹出菜单普通项目的 "extra" (补充内容)
hl-PmenuExtraSel } 弹出菜单选中项目的 "extra" (补充内容)
hl-PmenuSbar x 弹出菜单滚动条
hl-PmenuThumb X 弹出菜单滚动条拇指 (thumb)
hl-PmenuMatch k 弹出菜单普通项目的匹配文本
hl-PmenuMatchSel < 弹出菜单选中项目的匹配文本
hl-PmenuBorder j 弹出菜单边框字符
hl-PmenuShadow H 弹出菜单阴影
hl-PreInsert I 'completeopt' 里包含 "preinsert" 时的预插入文本
显示模式是:
r 反转 (termcap 项目 "mr" 和 "me")
i 斜体 (termcap 项目 "ZH" 和 "ZR")
b 粗体 (termcap 项目 "md" 和 "me")
s 突出 (termcap 项目 "so" 和 "se")
u 下划线 (termcap 项目 "us" 和 "ue")
c 下曲线 (termcap 项目 "Us" 和 "Ce")
2 双下划线 (termcap 项目 "Ds" and "Ce")
d 点状下划线 (termcap 项目 "ds" and "Ce")
= 虚线下划线 (termcap 项目 "Ds" and "Ce")
t 删除线 (termcap 项目 "Ts" 和 "Te")
n 没有高亮
- 没有高亮
: 使用高亮组
未列出的场合会使用其缺省值。
如果想改变显示模式的实际效果, dos-colors 里给出一例。
使用 ':' 显示模式时,后面必须跟一个高亮组名。高亮组可用于定义任何类型
的高亮效果,包括颜色设置。高亮组的定义方法可见 :highlight 。缺省为每
个场合定义一个不同的高亮组 (译者注: 建议只使用 ':',也就是通过高亮组来
指定显示模式,更好的方式是不改动本选项,而定制相应的缺省高亮组)。
缺省高亮组可见 highlight-default 。
'history' 'hi'
'history' 'hi' 数值型 (Vim 缺省: 200,Vi 缺省: 0)
全局
":" 命令历史和最近搜索模式历史保存的项目数量 (见 cmdline-editing 和
用于消息历史保存数量的 'messagesopt')。最大值为 10000。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'hkmap' 'hk' 'nohkmap' 'nohk'
'hkmap' 'hk' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +rightleft 特性才有效}
打开时,键盘输入会被映射为希伯来字符集。通常通过置位 'allowrevins' 并
在插入模式下用 CTRL-_ 来切换本选项。见 rileft.txt 。
注意: 'compatible' 置位时会复位本选项 (译者注: 另据 'paste' 文档,
'paste' 选项置位时会临时复位本选项。'paste' 复位时会恢复本选项)。
'hkmapp' 'hkp' 'nohkmapp' 'nohkp'
'hkmapp' 'hkp' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +rightleft 特性才有效}
打开时,键盘输入会被映射为 '根据读音的希伯来语' (phonetic)。同时必须打
开 'hkmap'。可用于非希伯来语键盘。
见 rileft.txt 。
注意: 'compatible' 置位时会复位本选项。
'hlsearch' 'hls' 'nohlsearch' 'nohls'
'hlsearch' 'hls' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +extra_search 特性才有效}
存在上次搜索模式时,会高亮其所有匹配项。使用的高亮类型可用 'highlight'
选项的 'l' 标志位设置。缺省使用 "Search" 高亮组。注意只高亮匹配的文
本,不考虑模式指定的位移。如果设置了 "CurSearch" 高亮组,则当前匹配会
使用此高亮。
另见: 'incsearch' 和 :match 。
厌倦一直看到匹配高亮时,可用 :nohlsearch 暂时关闭此效果。这并不会改
变本选项的值。一旦再次使用搜索命令,高亮会重新出现。
'redrawtime' 指定寻找匹配会花费的最大时间。
当搜索模式可以匹配换行符时,Vim 仍会试图高亮所有的匹配文本。不过,能否
完整高亮取决于搜索起始位置,如果是窗口首行或已关闭折叠的下一行这种上一
行未显示的情况,上一行开始的匹配可能不会在新显示行上继续高亮。
'viminfo' 中的 'h' 标志位 viminfo-h 可以指定启动时是否恢复高亮状态。
注意: 'compatible' 置位时会复位本选项。
'icon' 'noicon'
'icon' 布尔型 (缺省关闭,标题可以恢复则打开)
全局
打开时,窗口的图标文本会被设为 'iconstring' 的值 (如果非空),否则使用
当前编辑中的文件名的最后一部分。该默认值可被 'iconstring' 选项覆盖。
{仅支持能设置窗口图标的终端 (目前,只有 X11 GUI 版本和带有非空
't_ts' 选项的终端 - 缺省包括 Unix xterm 和 iris-ansi,其中 't_ts' 会从
内建的 termcap 读取)}
如果 Vim 编译时定义了 HAVE_X11,在可能的情况下会恢复原来的图标 X11 。
要改变 X11 的图标,见 X11-icon 。
MS-Windows 也可以改变图标,见 windows-icon 。
'iconstring'
'iconstring' 字符串 (缺省为 "")
全局
本选项非空且 'icon' 选项打开时,其内容将用作窗口的图标文本。
{仅支持能设置窗口图标的终端 (目前,只有 X11 GUI 版本和带有非空 't_ts'
选项的终端),不支持 MS-Windows}
如果 Vim 编译时定义了 HAVE_X11,在可能的情况下会恢复原来的图标 X11 。
本选项包含 printf 风格的 '%' 项目时,会根据 'statusline' 说明的规则进
行扩展。'titlestring' 给出示例设置。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
{仅当编译时加入 +statusline 特性才有效}
'ignorecase' 'ic' 'noignorecase' 'noic'
'ignorecase' 'ic' 布尔型 (缺省关闭)
全局
在以下情形下忽略大小写: 搜索模式、 cmdline-completion 、从标签文件中查
找、非 Vim9 的 expr-== 运算,以及插入模式补全 ins-completion 。
另见 'smartcase' 和 'tagcase'。
搜索模式里可用 "\c" 或 "\C" 来覆盖本设置。见 /ignorecase 。
'imactivatefunc' 'imaf'
'imactivatefunc' 'imaf' 字符串 (缺省 "")
全局
本选项指定在激活或关闭输入法时调用的函数。值可为函数名、 lambda 或
Funcref 。详见 option-value-function 。
{没有 MS-Windows GUI 版本支持}
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
示例:
function ImActivateFunc(active)
if a:active
... 做点什么
else
... 做点什么
endif
" 返回值被忽略
endfunction
set imactivatefunc=ImActivateFunc
'imactivatekey' 'imak'
'imactivatekey' 'imak' 字符串 (缺省为 "")
全局
{仅当编译时加入 +xim 和 +GUI_GTK 特性才有效}
E599
指定激活 X-Window 窗口输入方法 (Input Method) 的热键。正确指定时,
vim 可以用 'imcmdline'、'iminsert' 和 'imsearch' 来完整控制 IM。
不能用本选项来改变激活键。它只是用来告知 Vim 该键是什么。
格式:
[MODIFIER_FLAG-]KEY_STRING
MODIFIER_FLAG 可用以下字符 (忽略大小写):
S Shift 键
L Lock 键
C Control 键
1 Mod1 键
2 Mod2 键
3 Mod3 键
4 Mod4 键
5 Mod5 键
接受组合,比如 "S-C-space" 或 "SC-space" 都代表 Shift+Ctrl+空格。
KEY_STRING 的格式见 <X11/keysymdef.h> 和 XStringToKeysym。
例如:
:set imactivatekey=S-space
"S-space" 代表 Shift+空格。这是 kinput2+canna (日语),ami (韩语) (译者
注: 还有 scim) 的激活键。
'imcmdline' 'imc' 'noimcmdline' 'noimc'
'imcmdline' 'imc' 布尔型 (缺省关闭)
全局
打开时,开始编辑命令行时总是打开输入方法 (IM),但输入搜索模式时除外
(此时适用 'imsearch')。
输入方法允许直接输入英语字符时,可以打开本选项。比如用死键 (dead key)
可输入带重音的字符。
'imdisable' 'imd' 'noimdisable' 'noimd'
'imdisable' 'imd' 布尔型 (缺省关闭,若干系统打开 (SGI))
全局
打开时,总是关闭输入方法。如果 IM 工作异常,可考虑本选项。
目前,SGI/IRIX 机器上缺省打开本选项。将来的版本也许会有变化。
'iminsert' 'imi'
'iminsert' 'imi' 数值型 (缺省为 0)
局部于缓冲区
指定在插入模式下使用的是 :lmap 还是输入方法 (IM)。合法值为:
0 :lmap 关闭且 IM 关闭
1 :lmap 打开而 IM 关闭
2 :lmap 关闭而 IM 打开
如果希望在用 <Esc> 退出插入模式时总是把本选项重置为 0,可用:
:inoremap <ESC> <ESC>:set iminsert=0<CR>
这使得 :lmap 和 IM 在离开插入模式时都会自动关闭。
注意 插入模式下使用 CTRL-^ 时会自动切换本选项 i_CTRL-^ 。
设置 'keymap' 为合法的键盘映射表名时,也会自动设置本值为 1。
也用于像 "r" 和 "f" 这样的命令的参数输入。
在 Motif 上,一些 XIM 方法可能使导致值 0 无法正常工作。此时可用
'imdisable' 来关闭 XIM。
即使 Vim 编译时没有加入 +xim 、 +multi_byte_ime 或 global-ime 特
性,也可用 'imactivatefunc' 和 'imstatusfunc' 通过外部命令来处理
IME/XIM。
'imsearch' 'ims'
'imsearch' 'ims' 数值型 (缺省为 -1)
局部于缓冲区
指定在输入搜索模式时使用的是 :lmap 还是输入方法 (IM)。合法值为:
-1 使用 'iminsert' 的值,就像 'iminsert' 同时用于搜索模式
的输入一样
0 :lmap 关闭且 IM 关闭
1 :lmap 打开而 IM 关闭
2 :lmap 关闭而 IM 打开
注意 命令行模式下使用 CTRL-^ 时会自动切换本选项。 i_CTRL-^ 。
此值不等于 -1 且 'keymap' 被设置为合法的键盘映射表名时,也会自动将其设
为 1。
在 Motif 上,一些 XIM 方法可能导致值 0 无法正常工作。这时可用
'imdisable' 来关闭 XIM。
'imstatusfunc' 'imsf'
'imstatusfunc' 'imsf' 字符串 (缺省 "")
全局
本选项指定用来得到输入法状态的函数。IME 激活则返回正数。值可为函数名、
lambda 或 Funcref 。详见 option-value-function 。
{没有 MS-Windows GUI 版本支持}
示例:
function ImStatusFunc()
let is_active = ...做点什么
return is_active ? 1 : 0
endfunction
set imstatusfunc=ImStatusFunc
备注: 此函数会被频繁调用。所以必须保持高效。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'imstyle' 'imst'
'imstyle' 'imst' 数值型 (缺省 1)
全局
{仅当编译时加入 +xim 和 +GUI_GTK 特性才有效}
本选项指定输入法的输入方式:
0 使用 on-the-spot 输入方式 (原地输入)
1 使用 over-the-spot 输入方式 (浮动输入)
见: xim-input-style
很长一段时间里,vim 的 GTK 版本都使用 on-the-spot 方式。已知这会给映射
single-repeat 等造成麻烦。所以现在 over-the-spot 风格成为缺省。对多
数人这应该没问题,如果造成不便,可以考虑切换回 on-the-spot 风格。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'include' 'inc'
'include' 'inc' 字符串 (缺省为 "^\s*#\s*include")
全局或局部于缓冲区 global-local
{仅当编译时加入 +find_in_path 特性才有效}
用来查找包含命令的模式。这是一个搜索模式,采用与 "/" 相同的搜索模式
(见 pattern )。缺省值是为 C 程序设计的。 "[i"、"]I"、"[d" 等命令会使
用本选项。
通常,使用 'isfname' 选项来识别跟随在此匹配模式之后的文件。但如果模式
中出现了 "\zs",那么从 "\zs" 到模式最后或 "\ze" (如有) 间的匹配文本会
用作文件名。这样就可以包含像空格这样不属于 'isfname' 的字符。然后可用
'includeexpr' 来处理匹配文本。
option-backslash 说明如何包含空格和反斜杠。
'includeexpr' 'inex'
'includeexpr' 'inex' 字符串 (缺省为 "")
局部于缓冲区
{仅当编译时加入 +find_in_path 和 +eval 特性才有效}
将 'include' 选项找到的字符串转换为文件名的表达式。Java 里,多用此选项
将 "." 换成 "/":
:setlocal includeexpr=substitute(v:fname,'\\.','/','g')
"v:fname" 变量会被设为检测到的文件。
注意 这里的双倍反斜杠: :set 命令先对其减半,这样实际值里只有一个反斜
杠,而 "\." 匹配按本义出现的句号。像这样简单的字符替换,也可用 tr()
来避免使用转义:
:setlocal includeexpr=tr(v:fname,'.','/')
如果 gf 命令找不到文件名,也会应用本选项进行转换再尝试一次。这样就可
以在 'include' 语句之后的名字上直接执行 "gf"。
备注: 不用于 <cfile> 。
表达式以 s: 或 <SID> 开始时,会用脚本 ID ( local-function ) 替代这些
前缀。例如:
setlocal includeexpr=s:MyIncludeExpr()
setlocal includeexpr=<SID>SomeIncludeExpr()
否则,表达式会在设置本选项的脚本上下文里计算,这样就可访问该脚本的局部
项目。
使用不带参数的函数调用更有效率,见 expr-option-function 。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
'incsearch' 'is' 'noincsearch' 'nois'
'incsearch' 'is' 布尔型 (缺省关闭,如果支持 +reltime 特性,则会在
defaults.vim 中打开)
全局
{仅当编译时加入 +extra_search 特性才有效}
输入搜索命令期间,实时显示目前已输入模式的匹配位置。高亮匹配的字符串。
如果该模式不合法或者没有匹配,则不会有任何显示。屏幕会频繁刷新,所以本
功能只适用于快速终端。
也应用于以下命令的模式输入过程:
:global
:lvimgrep
:lvimgrepadd
:smagic
:snomagic
:sort
:substitute
:vglobal
:vimgrep
:vimgrepadd
注意 虽然会显示匹配,但在找不到匹配和按 <Esc> 时,光标仍会回到原始位
置。只有按下 <Enter> 完成搜索命令后,光标才会移动到匹配位置。
用 CTRL-G 和 CTRL-T 键可以移到下个和上个匹配处。 c_CTRL-G c_CTRL-T
编译时加入 +reltime 特性时,搜索时只会花费大概半秒。如果模式太过复杂
和/或文本量太大,可能无法找到匹配结果。这种限制可以防止 Vim 在输入模式
时挂起。
要设置此时使用的高亮模式,可用 'highlight' 的 'i' 标志位。
如果同时打开了 '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 可在当前匹配的末尾插入光标下的单词,并排除已经输入的
部分。
注意: 'compatible' 置位时会复位本选项。
'indentexpr' 'inde'
'indentexpr' 'inde' 字符串 (缺省为 "")
局部于缓冲区
{仅当编译时加入 +cindent 和 +eval 特性才有效}
计算一行所需缩进量的表达式。在开启新行、使用 = 操作符和插入模式下输
入 'indentkeys' 选项指定的热键时都会使用该表达式。
本选项非空时,会覆盖 'cindent' 和 'smartindent' 的缩进计算方式。
置位 'lisp' 时,仅当 'lispoptions' 包含 "expr:1" 时才使用本选项。
'paste' 置位时,不使用本选项来计算缩进。
计算此表达式时, v:lnum 会被设为需要计算缩进量的行号。光标也会临时移
动到该行 (但表达式内部可以随意移动光标)。
表达式以 s: 或 <SID> 开始时,会用脚本 ID ( local-function ) 替代这些
前缀。例如:
set indentexpr=s:MyIndentExpr()
set indentexpr=<SID>SomeIndentExpr()
否则,表达式会在设置本选项的脚本上下文里计算,这样就可访问该脚本的局部
项目。
使用不带参数的函数调用更有效率,见 expr-option-function 。
表达式必须返回缩进所需的空格数量。也可返回 "-1",表示保持当前缩进 (也
就是使用 'autoindent' 相同的计算方式)。
计算缩进时,有用的函数包括 indent() 、 cindent() 和 lispindent() 。
该表达式的计算不能有副作用!它不能改变文本,跳到别的窗口,等等。不过,
因为计算结束后光标的位置总是会被复原,移动光标是没有问题的。
通常会将本选项设置为一个函数调用:
:set indentexpr=GetMyIndent()
除非 'debug' 选项包含了 "msg",否则这里可能产生的错误信息会被抑制。
见 indent-expression 。
注意: 'compatible' 置位时会设置本选项为 ""。
模式行中设置时会在沙盘 sandbox 里计算此表达式。见 sandbox-option 。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
'indentkeys' 'indk'
'indentkeys' 'indk' 字符串 (缺省为 "0{,0},0),0],:,0#,!^F,o,O,e")
局部于缓冲区
在插入模式下键入时会重新缩进当前行的热键列表。仅在 'indentexpr' 非空时
才会起作用。
格式和 'cinkeys' 一致。见 indentkeys-format 。
见 C-indenting 和 indent-expression 。
'infercase' 'inf' 'noinfercase' 'noinf'
'infercase' 'inf' 布尔型 (缺省关闭)
局部于缓冲区
插入模式下进行关键字补全 ins-completion 且同时打开 'ignorecase' 时,
会根据输入文本来调整匹配的大小写。如果输入文本包含小写字母,而匹配文本
在对应位置是大写字母,补全部分会被调整为小写。如果输入文本没有任何小写
字母,那么在输入文本首个字母之后出现的大写字母,当匹配文本对应位置是小
写字母时,补全部分会被调整成大写。
当 'noinfercase' 时,会照原样给出匹配文本。
'insertmode' 'im' 'noinsertmode' 'noim'
'insertmode' 'im' 布尔型 (缺省关闭)
全局
改变 Vim 的工作方式,此时插入模式是缺省模式。Vim 因而可以用作无模式的
编辑器, evim 使用此模式。
下面的插入模式命令会有用:
- 使用光标键移动。
- 使用 CTRL-O 执行一个普通模式命令 i_CTRL-O 。该命令是映射时,执行时
假设 'insertmode' 关闭。普通模式会一直保持激活状态,直到映射结束。
- 使用 CTRL-L 执行一系列普通模式,然后用 <Esc> 返回插入模式。注意
CTRL-L 会左移光标,和 'insertmode' 未置位时 <Esc> 的行为类似。
i_CTRL-L
置位 'insertmode' 时,以下项目的效果会发生改变:
- 开始编辑文件时,Vim 会进入插入模式。
- 插入模式下的 <Esc> 会是空操作并响铃。
- 普通模式下的 <Esc> 会使得 Vim 退回到插入模式。
- 插入模式下的 CTRL-L 是一个命令,不会按本义被插入。
- 插入模式下的 CTRL-Z 会暂停 Vim,见 CTRL-Z 。 i_CTRL-Z
不过,在映射里使用 <Esc> 时,会按 'insertmode' 未置位时的行为执行。这
样,无论 'insertmode' 置位与否,都可以使用行为保持一致的同一套映射。
使用 :normal 执行命令时,忽略 'insertmode' 选项。
注意: 'compatible' 置位时会复位本选项。
'isfname' 'isf'
'isfname' 'isf' 字符串 (缺省值:
Win32:
"@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,="
AMIGA: "@,48-57,/,.,-,_,+,,,$,:"
VMS: "@,48-57,/,.,-,_,+,,,#,$,%,<,>,[,],:,;,~"
OS/390: "@,240-249,/,.,-,_,+,,,#,$,%,~,="
其他: "@,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() 为真的字符。通常这会包括 a 到 z
和 A 到 Z,以及其带重音的变体。要包含 '@' 自身,可用 "@-@"。例如:
"@,^a-z" 所有除了小写 ASCII 字母以外的字母字符。
"a-z,A-Z,@-@" 所有字母加上 '@' 字符。
如果需要包含逗号,应在期待填写字符数值的地方使用它。例如:
"48-57,,,_" 数字、逗号和下划线。
如果要排除逗号,可在它之前加上 '^'。比如:
" -~,^,,9" 从空格到 '~' 除了逗号以外的所有字符,以及
<Tab>。
option-backslash 说明如何包含空格和反斜杠。
'isident' 'isi'
'isident' 'isi' 字符串 (缺省值:
Win32: "@,48-57,_,128-167,224-235"
其他: "@,48-57,_,192-255")
全局
本选项决定组成标识符的字符。标识符用于识别环境变量和 'define' 选项匹
配之后的名字,也用于 pattern 里的 "\i" 字符类。本选项的格式描述可见
'isfname'。区别是 '@' 只局限在取值在 255 以内的字符。
小心: 如果改变本选项,环境变量扩展可能会失效。例如,如果包含了 '/',
Vim 会试图将 "$HOME/.viminfo" 整体作为环境变量来扩展。真正要修改的可能
是 'iskeyword' 选项。
'iskeyword' 'isk'
'iskeyword' 'isk' 字符串 (缺省值:
Vim:
Win32: "@,48-57,_,128-167,224-235"
其它: "@,48-57,_,192-255"
Vi: "@,48-57,_")
局部于缓冲区
本选项决定组成关键字的字符,关键字用于如 "w"、"*"、"[i" 等许多命令的搜
索及识别。也用于 pattern 里的 "\k" 字符类。本选项的格式描述可见
'isfname'。区别是 '@' 对于取值大于 255 的字符,会用 "单词" 字符类 (即
根据 Unicode 通用分类,所有类别为字母、数值或表情符号的字符) 来进行判
断。
注意 "\k" 字符类和 word 动作的行为有差别。前者匹配所有属于单词字符类
的字符,而后者会在字符类发生变化时结束现有单词。
对于 C 程序,可用 "a-z,A-Z,48-57,_,.,-,>"。
对于帮助文件,会被设置为除了 '*'、'"' 和 '|' 以外的所有非空白可显示字
符 (这样就可以在命令上使用 CTRL-] 跳转到相应的帮助)。
打开 'lisp' 选项时,总是会包含 '-' 字符。
本选项也会影响语法高亮,除非使用 :syn-iskeyword 来定义语法专用的关键
字。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'isprint' 'isp'
'isprint' 'isp' 字符串 (缺省值:
Win32 和 VMS: "@,~-255"
其他: "@,161-255")
全局
本选项决定可在屏幕上直接显示的字符。也用于 pattern 里的 "\p" 字符
类。从空格 (ASCII 32) 到 '~' (ASCII 126) 的字符总是可以直接显示,即使
它们未包含在 'isprint' 里,甚至被排除也是如此。本选项的格式描述可见
'isfname'。
不可显示字符会使用两个字符显示:
0 - 31 "^@" - "^_"
32 - 126 总是单个字符
127 "^?"
128 - 159 "~@" - "~_"
160 - 254 "| " - "|~"
255 "~?"
'encoding' 为某种 Unicode 编码时,取值为 128 到 255 的非法字符会显示为
<xx> 形式,给出该字节的十六进制值。
'display' 包含 "uhex" 时,所有的不可显示字符都会显示为 <xx> 形式。
不可显示字符会使用 SpecialKey 高亮。 hl-SpecialKey
多字节字符,即取值为 256 或更高的字符,总被视为可显示字符,因此本选项
只需指定取值在 255 以内的字符。当字符本身可显示但当前字体不包含该字符
时,会显示为一个替代字符。
不可显示并且零宽度的 Unicode 字符都会显示为 <xxxx>。没有特别指定这些字
符的选项。
'joinspaces' 'js' 'nojoinspaces' 'nojs'
'joinspaces' 'js' 布尔型 (缺省打开)
全局
打开时,连接命令会在 '.'、'?' 和 '!' 之后插入两个空格。'cpoptions' 包
含 'j' 标志位时,只会在 '.' 之后插入空格。
关闭时,只插入一个空格。
注意: 'compatible' 置位时也会置位本选项。
'jumpoptions' 'jop'
'jumpoptions' 'jop' 字符串 (缺省为 "")
全局
改变 jumplist 行为的单词列表。
stack 使跳转列表的行为和标签栈类同。保持跳转列表里各项的相对
位置不变,但代价是当沿着跳转列表原路返回并跳转到新位置
时,会丢弃原有的后续项目。 jumplist-stack
'key'
'key' 字符串 (缺省为 "")
局部于缓冲区
{仅当编译时加入 +cryptv 特性才有效}
用于加密和解密当前缓冲区的密钥。见 encryption 和 'cryptmethod'。
小心: 不要手动设置 key 的值,别人也许会看到输入密钥的明文。应该用 :X
命令。不过手动清空 'key' 没有问题:
:set key=
无法通过 ":set key" 或 "echo &key" 获取本选项的值。以防不该知道的人看
到密钥。这也意味着一旦设置以后,用户本人也无法查看,因此务必小心,不要
输错!
同样不能对本选项使用 :set= 、 :set+= 、 :set^= ,以防攻击者通过这些方
式猜测出密钥的部分内容。
在表达式中可用 "&key" 来判断加密是否已打开。'key' 已设置时,该值会返回
"*****" (五颗星)。
'keymap' 'kmp' E544
'keymap' 'kmp' 字符串 (缺省为 "")
局部于缓冲区
{仅当编译时加入 +keymap 特性才有效}
键盘映射表的名字。见 mbyte-keymap 。
设置本选项为合法的键盘映射表名时,会自动设置 'iminsert' 为 1,使该键盘
映射表生效。除非 'imsearch' 原本为 -1,否则也会自动将其设为 1。
只能使用字母数位字符、'.'、'-' 和 '_'。
'keymodel' 'km'
'keymodel' 'km' 字符串 (缺省为 "")
全局
逗号分隔的单词列表,打开一些特殊的键功能。可选值如下:
startsel 使用 Shift + 特殊键会开始选择 (是开启选择模式还是可视
模式,取决于 'selectmode' 里有没有 "key")。
stopsel 使用不带 Shift 的特殊键会停止选择。
这里,特殊键指光标键、<End>、<Home>、<PageUp> 和 <PageDown>。
:behave 命令会设置 'keymodel' 选项。
'keyprotocol' 'kpc'
'keyprotocol' 'kpc' 字符串 (缺省: 见下)
全局
指定不同 'term' 值对应的键盘协议。支持的键盘协议名是:
none 任何终端当前正在使用的协议
mok2 xterm 支持的 modifyOtherKeys 2 级模式
kitty Kitty 支持的 Kitty 键盘协议
选项值是逗号分隔的项目列表。每个项目由一个匹配 'term' 选项的模式,一个
冒号和协议名组成。下面列出系统设置的缺省值,用于展示该选项的格式:
set keyprotocol=kitty:kitty,foot:kitty,ghostty:kitty,wezterm:kitty
set keyprotocol+=xterm:mok2
这代表 'term' 名包含 "kitty"、"foot"、"ghostty" 或 "wezterm" 时,会使
用 "kitty" 协议。而 'term' 名包含 "xterm" 时,会使用 "mok2" 协议。
有多个匹配时使用首个匹配,所以如果希望 "kitty" 使用 kitty 协议、而
"badkitty" 不使用,应先匹配 "badkitty" 并指定其协议为 "none":
set keyprotocol=badkitty:none,kitty:kitty
'term' 发生改变时会考虑本选项。如有可能,首先使用内建列表,见
builtin-terms ,来设置 termcap 项目。然后不行,再检视本选项,如果找到
匹配且指定了协议,会进行以下操作:
none 无,保留常规的 t_TE 和 t_TI 值不变
mok2 t_TE 值修改为:
CSI >4;m 关闭 modifyOtherKeys 协议
t_TI 值修改为:
CSI >4;2m 打开 modifyOtherKeys 协议
CSI ?4m 请求 modifyOtherKeys 状态
kitty t_TE 值修改为:
CSI >4;m 关闭 modifyOtherKeys 协议
CSI =0;1u 关闭 kitty 键盘协议
t_TI 值修改为:
CSI =1;1u 打开 kitty 键盘协议
CSI ?u 请求 kitty 键盘协议状态
CSI >c 请求 termresponse
如果出现诸如显示字符在 `CTRL-L` 后消失的情况,可能需要把本选项清空。然
后重新设置 'term' 选项,这样就可以恢复正常显示的效果:
set keyprotocol=
let &term = &term
'keywordprg' 'kp'
'keywordprg' 'kp' 字符串 (缺省值:
DOS: ":help"
VMS: "help"
其他: "man" 或 "man -s")
全局或局部于缓冲区 global-local
K 命令使用的程序。其中的环境变量被扩展 :set_env 。设为 ":help" 可以
访问 Vim 的内部帮助。(注意 过去只需将本选项的全局值设置为空值就可以做
到这一点,但现在这种方法已过时,不再推荐。)
首个字符为 ":" 时,该命令会作为 Vim Ex 命令执行,并带上 [count] (如果
非零) 作为参数。
使用 "man"、"man -s" 或 Ex 命令时,Vim 会自动将 "K" 命令的计数翻译为传
给命令的首个参数。"man -s" 没有给出计数时会删掉 "-s"。
(译者注: 编译时会检测系统的 "man" 是否支持 "-s" 来决定本选项的缺省值)
option-backslash 说明如何包含空格和反斜杠。
示例:
:set keywordprg=man\ -s
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'langmap' 'lmap' E357 E358
'langmap' 'lmap' 字符串 (缺省为 "")
全局
{仅当编译时加入 +langmap 特性才有效}
本选项允许切换键盘到一种特殊的语言模式。在插入模式下输入文本时,会直接
插入原始字符。但在普通模式下,本选项则会把这些特殊字符翻译成本键的原始
含义。也就是说,不需要切换键盘模式,就可以如常执行普通模式命令。
本选项和 'keymap' 选项相反,那里映射的是插入模式下的字符。
也可以考虑复位 'langremap',以避免 'langmap' 对映射生成的字符产生影
响。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
示例 (希腊文,UTF-8): greek
:set 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 操作。在下述情况下,语言字
符会 (根据本 langmap 的映射) 被翻译为普通的 vim 英语字符:
o 普通/可视模式 (命令,缓冲区/寄存器名,用户映射)
o 插入/替换模式: CTRL-R 之后的寄存器名
o 插入/替换模式: 映射
命令行模式下输入的字符 不 受本选项影响。注意 任何时刻都可以改变本选项
在不同语言/编码的映射间切换。为免每次都手动修改,建议使用映射来修改本
选项!
(译者注: 本选项和 :lmap 的语言映射 ('keymap' 属于后者) 是两码事。前
者假定外语键盘布局,在普通模式下自动切换为英语,后者假定英语键盘布局,
在插入/命令行模式下通过 CTRL-^ 切换英语/外语输入模式)
'langmenu' 'lm'
'langmenu' 'lm' 字符串 (缺省为 "")
全局
{仅当编译时加入 +menu 和 +multi_lang 特性才有效}
用于菜单翻译的语言。在 'runtimepath' 下 "lang" 目录里载入的文件是:
"lang/menu_" .. &langmenu .. ".vim"
(不包含空格)。例如,要忽略 $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
警告: 此法也会删除所有的自定义菜单!
'langnoremap' 'lnr' 'nolangnoremap' 'nolnr'
'langnoremap' 'lnr' 布尔型 (缺省关闭, defaults.vim 里置位)
全局
{仅当编译时加入 +langmap 特性才有效}
和 'langremap' 类似,但取值相反。本选项仅为后向兼容而保留。设置
'langremap' 时,'langnoremap' 会设为其相反值,反之亦然。
'langremap' 'lrm' 'nolangremap' 'nolrm'
'langremap' 'lrm' 布尔型 (缺省打开, defaults.vim 里关闭)
全局
{仅当编译时加入 +langmap 特性才有效}
关闭时,'langmap' 设置不影响映射生成的字符。基本用法是如果用户注意到设
置 'langmap' 时会使部分自定义映射失效,可以尝试复位本选项。
出于后向兼容的考虑,本选项缺省打开。如果可行,建议关闭本选项,以避免破
坏映射。
'laststatus' 'ls'
'laststatus' 'ls' 数值型 (缺省为 1)
全局
本选项的取值会影响最后一个窗口何时显示状态行:
0: 永不
1: 仅当有至少两个窗口时
2: 总是
有多个窗口时,显示状态行会使界面看起来更清晰,但它会占用一个屏幕行。
status-line
'lazyredraw' 'lz' 'nolazyredraw' 'nolz'
'lazyredraw' 'lz' 布尔型 (缺省关闭)
全局
打开时,执行宏、寄存器和其它不通过输入的命令时,不会重画屏幕。窗口标题
的刷新也会被推迟。要强制刷新,可用 :redraw 。
这会导致显示偶尔出错。本选项仅用于在执行可能导致重绘闪烁或速度变慢的操
作时作为临时设置。
'lhistory' 'lhi'
'lhistory' 'lhi' 数值型 (缺省为 10)
局部于窗口
{仅当编译时加入 +quickfix 特性才有效}
和 'chistory' 类同,但用于和窗口相关联的位置列表栈。无论是在位置列表窗
口自身、或是在与该位置列表栈关联的窗口里改变本选项,新值都会同步应用于
另一个窗口。这意味着位置列表窗口和其对应的文本窗口共享同一份本选项值。
更多信息可见 quickfix-stack 。
'linebreak' 'lbr' 'nolinebreak' 'nolbr'
'linebreak' 'lbr' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +linebreak 特性才有效}
打开时,Vim 会在 'breakat' 指定的字符处,而非屏幕显示的最后一个字符处
回绕长行。和 'wrapmargin' 和 'textwidth' 不同,此处不会真正在文件里插
入 <EOL>,它只影响文件的显示方式,而不影响其内容。
如果置位 'breakindent',回绕行在视觉上会进行缩进。并且 'showbreak' 值
会显示在回绕行的前面。'wrap' 选项关闭时,不使用本选项。
注意 <EOL> (屏幕上的) 之后 (译者注: 也就是回绕行中) 的 <Tab> 字符显示
的空格数量很有可能不正确。
'lines' E593
'lines' 数值型 (缺省为 24 或者终端高度)
全局
Vim 窗口使用的行数。
通常,不需要直接设置本选项。终端初始化代码会自动完成设置。另见
posix-screen-size 。
Vim 在 GUI 或可调整大小的窗口里运行时,设置本选项会直接改变窗口大小。
只想设置 GUI 的大小时,在 gvimrc 文件里放入命令。
Vim 会限制可在屏幕上显示的行数。可用此命令获取可用的最大窗口高度:
:set lines=999
最小值为 2,最大值为 1000。
如果返回的行数少于预期,检查一下 'guiheadroom' 选项。
设置本选项时,如果 Vim 无法成功调整物理显示的行数,可能会导致界面显示
混乱。
'linespace' 'lsp'
'linespace' 'lsp' 数值型 (缺省值:
Win32 GUI: 1
其他: 0)
全局
{仅支持 GUI}
用于在字符之间插入的像素行数。当所用字体占据字符单元的全部高度,使行与
行之间紧密接触时,本选项会很有用。非零时,每行下方会预留下划线的空间。
有些字体的行间距可能又过大 (为了给 ascent 和 descent 留出空间)。这时将
'linespace' 设置为负值可能会更合理。不过这样可能会导致显示问题!
'lisp' 'nolisp'
'lisp' 布尔型 (缺省关闭)
局部于缓冲区
Lisp 模式: 在插入模式下输入 <Enter> 时,会根据 Lisp 标准 (大致上) 设置
下一行的缩进量。也用于 "cc" 或 "S" 命令。必须打开 'autoindent' 才能使
本选项工作。'cpoptions' 里的 'p' 标志位改变缩进的方法: Vi 兼容或者更好
的 lisp 缩进算法。另见 'lispwords'。
在组成关键字的字符里 ('iskeyword') 自动加入 '-' 字符。也会重定义 =
操作符,如果 'equalprg' 为空,会使用相同的 lisp 缩进算法,而非调用外部
程序。
'paste' 置位时不使用本选项。
'lispoptions' 'lop'
'lispoptions' 'lop' 字符串 (缺省 "")
局部于缓冲区
影响 'lisp' 选项打开的 Lisp 缩进算法的逗号分隔的项目列表。目前只支持一
个项目:
expr:1 设置 'indentexpr' 时,Lisp 缩进会使用该表达式进行计算
expr:0 Lisp 缩进不使用 'indentexpr' (缺省)
注意 使用 'indentexpr' 时, = 操作符会缩进所有行,否则首行不缩进 (这
是 Vi 兼容行为)。
'lispwords' 'lw'
'lispwords' 'lw' 字符串 (缺省很长)
全局或局部于缓冲区 global-local
影响 'lisp' 选项打开的 Lisp 缩进算法的逗号分隔的单词列表。
'list' 'nolist'
'list' 布尔型 (缺省关闭)
局部于窗口
列出方式: 缺省情况下,制表符会显示为 CTRL-I,行尾后会显示 $。这样可以
清楚区分制表符和空格,并看到拖尾的空白。'listchars' 选项可以进一步调整
显示方式。
在普通模式下,光标会显示在制表符占据的空白开始位置,而不是像通常那样显
示在其末尾位置。如果希望制表符用空格正常显示,但光标放在空白开始位置,
可用:
:set list lcs=tab:\ \
注意 'cpoptions' 里包含 'L' 时,本选项也会影响 (用 'textwidth' 或
'wrapmargin' 方法设置的) 排版。'listchars' 说明如何改变制表符的显示方
式。
'listchars' 'lcs'
'listchars' 'lcs' 字符串 (缺省为 "eol:$")
全局或局部于窗口 global-local
'list' 模式和 :list 命令使用的字符串。这是逗号分隔的字符串设置的列
表。 E1511
lcs-eol
eol:c 每行显示在行尾的字符。省略时,行尾不显示额外字符。
lcs-tab
tab:xy[z] 用于显示制表符的两或三个字符。第三个字符可选。
tab:xy 总是使用 'x',然后多次使用 'y' 进行填充。所以 "tab:>-"
会显示:
>
>-
>--
等等
tab:xyz 总是使用 'z',然后在开头使用 'x',然后在中间多次使用
'y' 进行填充。所以 "tab:<->" 会显示:
<>
<->
<-->
等等
"tab:" 省略时,制表符会显示为 ^I。
*lcs-space*
space:c 用于显示空格的字符。省略时,空格会显示为空白。
*lcs-multispace*
multispace:c...
用于显示多个连续空格的一到多个字符,该串字符会循环显
示。除了单个空格的显示外,本设置优先于 "space" 设置。
省略时,使用 "space" 设置。例如,
`:set listchars=multispace:---+` 将十个连续空格显示为:
---+---+-- ~
*lcs-lead*
lead:c 用于显示前导空白的字符。省略时,前导空白显示为空格。对
前导的空白,本设置优先于 "space" 和 "multispace" 设
置。可与 "tab:" 混用,例如:
:set listchars+=tab:>-,lead:.
lcs-leadmultispace
leadmultispace:c...
和 lcs-multispace 值类似,但只用于前导空白。对前导多
个空白,本设置优先于 lcs-lead 。
`:set listchars=leadmultispace:---+` 将前导的十个连续
空格显示为:
---+---+--XXX
其中 "XXX" 代表该行上前几个非空白字符。
lcs-trail
trail:c 用于显示拖尾空白的字符。省略时,拖尾空白显示为空格。对
拖尾的空白,本设置优先于 "space" 和 "multispace" 设
置。
lcs-extends
extends:c 'wrap' 关闭而行在屏幕右边界之后还要继续时,用于显示最
后一列的字符。
lcs-precedes
precedes:c 物理行在可视范围第一列之前还有内容时,用于显示首个可见
列的字符。
lcs-conceal
conceal:c 'conceallevel' 为 1 时,用于显示替代隐藏文本的字符。
lcs-nbsp
nbsp:c 用于显示不可间断空格的字符 (字符 0xA0 (十进制 160) 和
U+202F)。省略时,留出一个空格。
不应使用字符 ':' 和 ','。'encoding' 为 "utf-8" 时,可以使用 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:<
"NonText" 高亮会用于 "eol"、"extends" 和 "precedes"。而 "SpecialKey"
高亮会用于 "tab"、"nbsp"、"space"、"multispace"、"lead" 和 "trail"。
hl-NonText hl-SpecialKey
'lpl' 'nolpl' 'loadplugins' 'noloadplugins'
'loadplugins' 'lpl' 布尔型 (缺省打开)
全局
打开时,启动时会加载插件脚本 load-plugins 。
可在 vimrc 文件里复位本选项,以禁止加载插件。
注意 "-u NONE"、"-u DEFAULTS" 和 "--noplugin" 命令行参数都会复位本选
项。见 -u 和 --noplugin 。
'luadll'
'luadll' 字符串 (缺省取决于编译设置)
全局
{仅当编译时加入 +lua/dyn 特性才有效}
指定 Lua 共享库的名字。缺省是编译时指定的 DYNAMIC_LUA_DLL。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'macatsui' 'nomacatsui'
'macatsui' 布尔型 (缺省打开)
全局
{没有可用的支持}
不再支持,已删除 Mac OS X GUI 的代码。
'magic' 'nomagic'
'magic' 布尔型 (缺省打开)
全局
改变搜索模式使用的特殊字符。见 pattern 。
警告: 关闭本选项很有可能会导致插件无法正常工作!这是因为很多模式假定本
选项打开,关闭时这些模式会失效。只有在旧 Vi 脚本里才需要关闭本选项。在
其他任何情况下,要编写适用于 'magic' 打开状态下的模式。必要时可用 "\M"
/\M 。
Vim9 脚本中忽略 'magic' 的值,模式匹配行为会假定它永远打开。
'makeef' 'mef'
'makeef' 'mef' 字符串 (缺省: "")
全局
{仅当编译时加入 +quickfix 特性才有效}
:make (见 :make_makeprg ) 和 :grep 命令使用的错误文件名。
为空时,使用内部生成的临时文件。
包含 "##" 时,它被一个唯一的数值替换,使生成的完整文件名保持唯一。这确
保 ":make" 命令不会覆盖已有的文件。
不 用于 ":cf" 命令。那里用到的是 'errorfile'。
环境变量被扩展 :set_env 。
option-backslash 说明如何包含空格和反斜杠。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'makeencoding' 'menc'
'makeencoding' 'menc' 字符串 (缺省为 "")
全局或局部于缓冲区 global-local
读入部分外部命令输出时所使用的编码。为空时,不进行编码转换。具体来说,
用于 :make 、 :lmake 、 :grep 、 :lgrep 、 :grepadd 、 :lgrepadd 、
:cfile 、 :cgetfile 、 :caddfile 、 :lfile 、 :lgetfile 和
:laddfile 命令。
这最常用于 MS-Windows 上设置 'encoding' 为 "utf-8" 时的情况。如果编译
时加入 +iconv 特性且使用了 GNU libiconv,设置 'makeencoding' 为
"char" 就相当于使用系统语言编码。例如:
:set encoding=utf-8
:set makeencoding=char " 使用系统语言
'makeprg' 'mp'
'makeprg' 'mp' 字符串 (缺省为 "make",VMS: "MMS")
全局或局部于缓冲区 global-local
指定 ":make" 命令使用的程序。见 :make_makeprg 。
本选项可包含 '%' 和 '#' 字符 (见 :_% 和 :_# ),分别被扩展为当前和轮
换文件名。如果这些文件名里包含特殊字符,可用 ::S 来转义文件名。
环境变量被扩展 :set_env 。 option-backslash 说明如何包含空格和反斜
杠。
注意 '|' 必须转义两次: 一次为了 ":set",一次为了命令行的解析 (译者注:
见 :make_makeprg 构造 ":make" 命令行的方法,如果只转义一次,'|' 后的
部分会被解析为另一 Ex 命令)。使用名为 "myfilter" 的过滤程序时,可用:
:set makeprg=gmake\ \\\|\ myfilter
占位符 "$*" (可多次使用) 用于指示参数序列应该被插入的位置。例如:
:set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'matchpairs' 'mps'
'matchpairs' 'mps' 字符串 (缺省为 "(:),{:},[:]")
局部于缓冲区
用于形成配对的字符。 % 命令会从其中一个字符与其对应的配对字符间跳转。
形成配对的字符必须不同,例如,不能在两个双引号间跳转。
配对字符间使用冒号分隔。
配对与配对之间使用逗号分隔。包含 '<' 和 '>' 配对的示例 (用于 HTML):
:set mps+=<:>
一个更奇特的示例是在赋值语句中的 '=' 和 ';' 之间来回跳转,可用于 C 和
Java 这样的语言:
:au FileType c,cpp,java set mps+==:;
"%" 更高级的用法可见 $VIMRUNTIME/pack/dist/opt/matchit 目录下的
matchit.vim 插件。 add-local-help
'matchtime' 'mat'
'matchtime' 'mat' 数值型 (缺省为 5)
全局
'showmatch' 置位时,用于显示配对括号的时长,以十分之一秒为单位。注意
和其它设置时长的选项不同,这里不以毫秒为单位。这是为了和 Nvi 兼容。
'maxcombine' 'mco'
'maxcombine' 'mco' 数值型 (缺省为 2)
全局
支持的用于显示的用组合字符的最大数量。仅当 'encoding' 为 "utf-8" 时适
用。
对多数语言缺省值已经足够。对希伯来语,可能需要 4 个。最大值为 6。
即使本选项设为 2,仍然可以正确编辑有更多组合字符的文本,只不过看不到额
外的组合字符而已。为此,可用 g8 或 ga 。
设为 0 时,不会显示任何组合字符。
见 mbyte-combining 。
'maxfuncdepth' 'mfd'
'maxfuncdepth' 'mfd' 数值型 (缺省为 100)
全局
{仅当编译时加入 +eval 特性才有效}
用户函数调用的最大嵌套层数。通常用于防止无限递归。使用需要更深层次的递
归函数时,可将 'maxfuncdepth' 设置得更大。但这也意味着会占用更多内存,
从而增加内存不足的风险。
如果本限制超过 200,还会改变 Ex 命令的最大嵌套层数。见 E169 。
另见 :function 。
也用于回调函数的最大嵌套层数。
'maxmapdepth' 'mmd' E223
'maxmapdepth' 'mmd' 数值型 (缺省为 1000)
全局
不生成可用字符的映射最大嵌套层数。通常用于防止无限映射。比如
":map x y" 又 ":map y x"。此限制仍然不能防止 ":map g wg",因为在下一层
映射完成之前,已经生成了可用字符 'w'。另见 key-mapping 。
'maxmem' 'mm'
'maxmem' 'mm' 数值型 (缺省在 256 和 5120 之间 (依赖于系统) 或可用内
存的一半 (译者注: 有些系统支持检测可用内存,
而有些不支持,所以这一点也取决具体的系统))
全局
单个缓冲区可用的内存上限 (以千字节计)。到达此限额后,再分配给缓冲区额
外的内存会导致其它内存被释放。
最大可用值大约为 2000000 (译者注: 对应 2GB),使用此值时实际上已不再有
限制。
'swapfile' 关闭时忽略此值。
另见 'maxmemtot'。
'maxmempattern' 'mmp'
'maxmempattern' 'mmp' 数值型 (缺省为 1000)
全局
用于模式搜索的内存上限 (以千字节计)。最大值大约为 2000000 (译者注: 对
应 2GB),使用此值时实际上已不再有限制。
E363
如果 Vim 到达此限额,会给出错误信息,其行为和按 CTRL-C 基本类同。
到达此限额通常意味着该模式效率非常低或者太过复杂。例如,在很长的行上使
用模式 "\(.\)*" 就可能会触发这种情况。而使用 ".*" 的效率就要好很多。
在重绘时,语法规则可能会试图匹配复杂的文本结构,也可能因此触发该限制。
在达到 'maxmempattern' 限制之前,Vim 也可能已经耗尽内存,此时会收到
"Out of memory" 错误。
'maxmemtot' 'mmt'
'maxmemtot' 'mmt' 数值型 (缺省在 2048 和 10240 之间 (依赖于系统) 或可用
内存的一半)
全局
所有缓冲区可用的内存上限 (以千字节计)。最大可用值大约为 2000000 (译者
注: 对应 2GB),使用此值时实际已不再有限制。
在 64 位机器里,或许可以使用更高的值。不过,文本编辑真的需要超过 2GB
内存吗?请记住,文本内容在交换文件里保存,所以 Vim 确实可以编辑超过 2
GB 的文件。真正需要足够内存的是撤销信息的保存。
关闭了 'swapfile' 的缓冲区的文本内容仍然计入总内容用量。
另见 'maxmem'。
'maxsearchcount' 'msc'
'maxsearchcount' 'msc' 数值型 (缺省为 99)
全局
搜索计数状态 ( shm-S 不给出时) 所显示的最大匹配数。如果匹配数量超过此
值,Vim 会显示 ">" 加上本选项值,而不显示准确数目,使搜索保持快速。
注意: 设置为更大值可能会影响性能。
此值必须在 1 到 9999 之间。另见 searchcount() 函数。
'menuitems' 'mis'
'menuitems' 'mis' 数值型 (缺省为 25)
全局
{仅当编译时加入 +menu 特性才有效}
从项目列表生成菜单 (例如 Buffers 菜单) 时,会使用的最大项目数。修改本
选项后不会立即生效,需要刷新菜单后才会应用。
'messagesopt' 'mopt'
'messagesopt' 'mopt' 字符串 (缺省为 "hit-enter,history:500")
全局
用于控制消息输出的选项设定。包含逗号分隔的下述项目的列表。
hit-enter 消息长于 'cmdheight' 指定的长度时,给出 hit-enter 提
示。
wait:{n} 不用 hit-enter 提示,而简单等待 {n} 毫秒,使用户有机
会读完消息。{n} 最大为 10000。0 可用来关闭等待 (但用户
因此可能会丢失重要的消息)。
"hit-enter" 给出时忽略本项目,但 "hit-enter" 省略时必
须提供本项目。
history:{n} 决定 :messages 历史保存的项目数量。最大值是 10000。
设为零会清除消息历史。
本项目必须给出。
'mkspellmem' 'msm'
'mkspellmem' 'msm' 字符串 (缺省 "460000,2000,500")
全局
{仅当编译时加入 +syntax 特性才有效}
:mkspell 使用的参数。用于调节何时开始压缩单词树。当单词数量很多时,
压缩过程可能很慢,但为了避免耗尽内存,这是有必要的。每个单词需要的内存
取决于单词间的相似程度,这也就是为什么此调节非常复杂的原因。
需要给出三个以逗号分隔的数值:
{start},{inc},{added}
对于多数语言,不经压缩的单词树可以放进内存。{start} 给出进行任何压缩前
可用的内存量,以千字节为单位。此值应比 Vim 可用的内存量要略小一些。
超出 {start} 限制后,{inc} 参数指定在下次压缩进行之前可分配的内存量,
同样以千字节为单位。此值越小代表越少的单词加入后就要进行压缩,从而耗时
更长,反之,此值越大则代表需要分配更多内存。
完成一次压缩后,在忽略 {inc} 限制之前可加入最多 {added} 乘以 1024 个单
词,此后需要额外的内存时,立即进行压缩。此值越小代表达到 {inc} 限制的
机率越低,使用更少的内存,但速度也更慢。
对意大利语和匈牙利语,选用合适的数值很重要,缺省值比较适合有 512 兆字
节内存的环境。如果有 1G 字节内存,可用:
:set mkspellmem=900000,3000,800
如果内存不足 512 兆字节,不管 'mkspellmem' 如何设置,对某些语言
:mkspell 都可能会失败,
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'modeline' 'ml' 'nomodeline' 'noml'
'modeline' 'ml' 布尔型 (Vim 缺省: 打开 (root 用户缺省关闭)
Vi 缺省: 关闭)
局部于缓冲区
'modeline' 打开时,'modelines' 用于指定检查 set 等命令的行数。
'modeline' 关闭或者 'modelines' 为零时,不检查任何行。见 modeline 。
'modelineexpr' 'mle' 'nomodelineexpr' 'nomle'
'modelineexpr' 'mle' 布尔型 (缺省关闭)
全局
打开时,模式行上允许设置若干表达式选项。要了解哪些选项受
'modelineexpr' 控制,可查看相关选项的文档。另见 modeline 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'modelines' 'mls'
'modelines' 'mls' 数值型 (缺省为 5)
全局
'modeline' 打开时,'modelines' 用于指定检查 set 等命令的行数。
'modeline' 关闭或者 'modelines' 为零时,不检查任何行。见 modeline 。
注意: 'compatible' 置位时 'modeline' 会设为 Vi 缺省值,而 'compatible'
复位时会设为 Vim 缺省值。
'modifiable' 'ma' 'nomodifiable' 'noma'
E21
'modifiable' 'ma' 布尔型 (缺省打开)
局部于缓冲区
关闭时,缓冲区的内容不可修改。同时 'fileformat' 和 'fileencoding' 选项
也无法更改。
Vim 启动时,可用 -M 命令行参数来复位本选项。
'modified' 'mod' 'nomodified' 'nomod'
'modified' 'mod' 布尔型 (缺省关闭)
局部于缓冲区 local-noglobal
打开时,缓冲区被认为已修改。本选项在以下情形下被置位:
1. 在上次写入后对文本进行了修改。使用 undo 命令恢复到原始文本内容会
复位本选项。但如果撤销写回缓冲区之前所作的修改,又会置位本选项,因
为此时文本已经和写入时不同。
2. 'fileformat' 和 'fileencoding' 不同于原始值。这里的 "原始值" 指缓冲
区在读入或写回时所设置的值。":set nomodified" 命令在复位 'modified'
选项的同时,也会将这些 "原始值" 更新为当前值。
'eol' 和 'bomb' 的情况类同。
由 BufNewFile、BufRead/BufReadPost、BufWritePost、FileAppendPost 或
VimLeave 自动命令事件引起的缓冲区更改不会置位本选项。相关解释见
gzip-example 。
'buftype' 为 "nowrite" 或 "nofile" 时,本选项也可能会被置位,但会被忽
略,不会产生实际影响。
注意 此选项置位时,文本内容可能实际上并未发生变化,例如在 "A" 上执行
"rA" 时,'modified' 仍会被置位。
'more' 'nomore'
'more' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
打开时,当输出填满整个屏幕时,列表显示会暂停,并给出 more-prompt 提
示。关闭时则不会有暂停,列表会继续进行直到结束。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'mouse'
'mouse' 字符串 (缺省值:
GUI 和 Win32: "a"
其他: ""
( defaults.vim 里设为 "a" 或 "nvi"))
全局
允许使用鼠标。可用于大多数终端 (xterm、Win32 win32-mouse 、QNX
pterm、带 sysmouse 的 *BSD 控制台和带 gpm 的 Linux 控制台)。GUI 里使用
鼠标的说明可见 gui-mouse 。可以针对不同的模式分别打开鼠标支持:
n 普通模式和终端模式
v 可视模式
i 插入模式
c 命令行模式
h 编辑帮助文件时,使用前面列出的所有模式
a 前面列出的所有模式
r hit-enter 和 more-prompt 提示
通常会这样打开所有五个模式的鼠标支持:
:set mouse=a
如果终端无法阻止鼠标事件被直接发送给应用程序,可用:
:set mouse=nvi
此时可按 ":",终端会暂时接管命令行上的鼠标事件,使用系统鼠标行为,包括
选择文本,复制/粘贴等等,按 Esc 回到 Vim 后,Vim 会重新接管鼠标事件的
处理。
defaults.vim 中,当 'term' 选项匹配 "xterm" 时,鼠标模式设为 "a",否
则使用 "nvi"。
鼠标未打开时,GUI 仍然可用鼠标进行无模式选择。此行为不会移动文本光标。
见 mouse-using 。另见 'clipboard'。
注意: 在终端里打开鼠标时,如果能连接到 X 服务器,复制/粘贴会使用 * 寄
存器。按住 Shift 键时,会改用 xterm 对鼠标按钮的处理方式。
另见 'clipboard' 选项。
'mousefocus' 'mousef' 'nomousefocus' 'nomousef'
'mousefocus' 'mousef' 布尔型 (缺省关闭)
全局
{仅适用于 GUI}
自动激活鼠标指针移动到的窗口。通过其他方式改变窗口布局或窗口焦点时,鼠
标指针会移动到带键盘焦点的那个窗口。缺省关闭本选项,因为它会使下拉菜单
操作不太顺手,稍不小心移动鼠标就可能意外激活窗口。
MS-Windows: 鼠标滚轮会滚动哪个窗口,可另见 'scrollfocus'。
'mousehide' 'mh' 'nomousehide' 'nomh'
'mousehide' 'mh' 布尔型 (缺省打开)
全局
{仅适用于 GUI}
打开时,输入字符时会隐藏鼠标指针。鼠标移动时则会恢复鼠标指针。
'mousemodel' 'mousem'
'mousemodel' 'mousem' 字符串 (缺省值:
Win32: "popup"
其他: "extend")
全局
设置鼠标使用的模型。以下名字主要用于设定鼠标右键的用途:
extend 鼠标右键会扩展选择区。这种工作方式和 xterm 类似。
popup 鼠标右键会弹出菜单。Shift + 鼠标左键则会扩展选择区。这
是 Microsoft Windows 的工作方式。
popup_setpos 和 "popup" 类似,但光标会移动到鼠标点击的位置,因而菜
单选择的操作会根据点击的对象而定。在选择区内点击时,会
使用选择区进行操作,而不移动光标。当然这也意味着,在选
择区之外点击右键会结束可视模式。
在不同模型下,按钮工作方式的总览:
鼠标 extend popup(_setpos)
左键点击 放置光标 放置光标
左键拖动 开始选择 开始选择
Shift + 左键 搜索单词 扩展选择
右键点击 扩展选择 弹出菜单 (放置光标)
右键拖动 扩展选择 -
中键点击 粘贴 粘贴
在 "popup" 模型下,鼠标右键会弹出菜单。为此,需要先定义此菜单,见
popup-menu 。
注意 可以进一步用映射重定义按钮的含义。见 gui-mouse-mapping 。但映射
不 会用于无模式选择 (因为这是由 GUI 代码直接处理的)。
:behave 命令会设置 'mousemodel' 选项。
'mousemoveevent' 'mousemev' 'nomousemoveevent' 'nomousemev'
'mousemoveevent' 'mousemev' 布尔型 (缺省关闭)
全局
{仅适用于 GUI}
打开时,鼠标移动事件会发送到输入队列,并可用于映射。缺省关闭,以避免在
非必要时因处理鼠标移动而带来的额外开销。见 gui-mouse-mapping 。
警告: 置位本选项后,鼠标移动可能会中断正在等待中的映射。
目前仅可用于 GUI,将来可能会支持终端。
'mouseshape' 'mouses' E547
'mouseshape' 'mouses' 字符串 (缺省为 "i-r:beam,s:updown,sd:udsizing,
vs:leftright,vd:lrsizing,m:no,
ml:up-arrow,v:rightup-arrow")
全局
{仅当编译时加入 +mouseshape 特性才有效}
本选项指示 Vim 鼠标指针在不同的模式里应有的外观。这是逗号分隔的部分列
表,和 'guicursor' 使用的格式类似。每个部分由模式/位置列表和参数列表组
成:
模式列表:外型,模式列表:外型,..
"模式列表" 是指连字符分隔的下面这些模式/位置的列表:
普通窗口里:
n 普通模式
v 可视模式
ve 可视模式,仅限于 'selection' 为 "exclusive" 时 (不然相
当于 'v')
o 操作符等待模式
i 插入模式
r 替换模式
其它位置:
c 在命令行上附加
ci 在命令行上插入
cr 在命令行上替换
m 在 'Hit ENTER' 或 'More' 等提示上
ml 同上,但光标在最后一行上
e 任何模式,指针在最后一个窗口之下
s 任何模式,指针在状态行上
sd 任何模式,拖动状态行时
vs 任何模式,指针在垂直分割线上
vd 任何模式,拖动垂直分割线时
a 所有地方
外型可从下表中选一:
可用 名字 看起来像
w x g arrow 普通鼠标指针
w x blank 没有指针 (小心使用!)
w x g beam I 型横梁
w x g updown 用于上下调整大小的箭头
w x g leftright 用于左右调整大小的箭头
w x g busy 系统标准忙碌指针
w x g no 系统标准 '无输入' 指针
x g udsizing 用于指示正在进行上下方向的大小调整
x g lrsizing 用于指示正在进行左右方向的大小调整
x g crosshair 大且细的 + 号
x g hand1 黑色的手
x g hand2 白色的手
x pencil 用来书写的工具
x g question 大的 ?
x rightup-arrow 指向右上方的箭头
w x up-arrow 指向上方的箭头
x <number> X11 指针号 (见 X11/cursorfont.h)
"可用" 列包含 'w' 意味该外型可用于 Win32,x 代表可用于 X11 (含 GTK+
2),而 g 代表可用于 GTK+ 3。
对于任何未指定的模式或外型不可用的情况,都会缺省使用普通鼠标指针。
例如:
:set mouseshape=s:udsizing,m:no
会使得鼠标在状态行上更改为正在大小调整的箭头,而在显示 hit-enter 提示
时指示没有输入 (因为此状态下,点击鼠标没有作用)。
'mousetime' 'mouset'
'mousetime' 'mouset' 数值型 (缺省为 500)
全局
{仅限于 GUI、Win32 和使用 xterm 的 Unix}。定义两次鼠标点击之间允许的最
大时间间隔 (以毫秒为单位),在此时长内发生的第二次点击会被识别为一次多
击操作 (如双击)。
'mzquantum' 'mzq'
'mzquantum' 'mzq' 数值型 (缺省为 100)
全局
{仅当编译时加入 +mzscheme 特性才有效}
轮询 MzScheme 线程的时间间隔,以毫秒为单位。负数或零意味着不进行线程调
度。
注意: 'compatible' 复位时会设置本选项为 Vim 缺省值。
'mzschemedll'
'mzschemedll' 字符串 (缺省取决于编译选项)
全局
{仅当编译时加入 +mzscheme/dyn 特性才有效}
指定 MzScheme 共享库名。缺省是编译时指定的 DYNAMIC_MZSCH_DLL。
环境变量被扩展 :set_env 。
本值必须在 vimrc 脚本或更早阶段进行设定。也就是在启动过程的
load-plugins 这一步之前完成。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'mzschemegcdll'
'mzschemegcdll' 字符串 (缺省取决于编译选项)
全局
{仅当编译时加入 +mzscheme/dyn 特性才有效}
指定 MzScheme GC 共享库名。缺省是编译时指定的 DYNAMIC_MZGC_DLL。
如果 'mzschemedll' 包含 GC 代码,两者可以使用相同的库。
环境变量被扩展 :set_env 。
本值必须在 vimrc 脚本或更早阶段进行设定。也就是在启动过程的
load-plugins 这一步之前完成。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'nrformats' 'nf'
'nrformats' 'nf' 字符串 (缺省为 "bin,octal,hex",
defaults.vim 里设为 "bin,hex")
局部于缓冲区
本选项定义 Vim 使用 CTRL-A 和 CTRL-X 命令进行递增或递减时所采用的数值
进制 (基底);关于这些命令的更多的信息,见 CTRL-A 。
alpha 包含时,可以递增和递减单个字母。可用于使用字母索引的列表 a)、
b) 等等。 octal-nrformats
octal 包含时,零开始的数值被认为是八进制。例如: 在 "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 数位开头的简单数值总被认为是十进制。这也包括那些无法被识别为八
进制或十六进制的数值。
'number' 'nu' 'nonumber' 'nonu'
'number' 'nu' 布尔型 (缺省关闭)
局部于窗口
在每行前面显示行号。'cpoptions' 里排除 'n' 项目时,回绕行不使用行号占
据的列 ('compatible' 未置位时,这是缺省行为)。
要设置行号占据的列宽,可用 'numberwidth' 选项。
被回绕的长行不从第一个字符开始时,行号前会用 '-' 字符填充 (译者注: 回
绕行只会在首个屏幕行上显示行号,但 skipcol 只在非首个屏幕行才会非零,
所以似乎无法重现此特性)。
高亮可见 hl-LineNr 、 hl-CursorLineNr 和 :sign-define 的 "numhl"
参数。
number_relativenumber
'relativenumber' 选项改变显示的数值为相对光标的相对行号。和 'number'
合用,有以下四个不同组合 (假定光标在第三行):
'nonu' 'nu' 'nonu' 'nu'
'nornu' 'nornu' 'rnu' 'rnu'
|apple | 1 apple | 2 apple | 2 apple
|pear | 2 pear | 1 pear | 1 pear
|nobody | 3 nobody | 0 nobody |3 nobody
|there | 4 there | 1 there | 1 there
'numberwidth' 'nuw'
'numberwidth' 'nuw' 数值型 (Vim 缺省: 4 Vi 缺省: 8)
局部于窗口
{仅当编译时加入 +linebreak 特性才有效}
行号占用的最少列数。仅当置位 'number' 或 'relativenumber' 选项或者带行
号打印时才有意义。因为行号和文本之间总有一个空格,行号实际可用的列数会
比该数值小一。
该值用于指定最小宽度。如果要显示的行号需要更宽的空间,会自动扩展宽度。
根据使用的是 'number' 还是 'relativenumber',缓冲区中的最大行号或窗口
行数会决定最大的可能宽度。
Vim 缺省值 4 应该可以容纳多达 999 行。缓冲区有 1000 行时,还是会使用五
列。最小值为 1,最大值为 20。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'omnifunc' 'ofu'
'omnifunc' 'ofu' 字符串 (缺省: 空)
局部于缓冲区
{仅当编译时加入 +eval 特性才有效}
指定插入模式下用 CTRL-X CTRL-O 进行全能 (omni) 补全时,使用的函数
i_CTRL-X_CTRL-O 。
complete-functions 解释该函数的调用方式以及返回值的含义。本值可以是
函数名、 lambda 或 Funcref 。详见 option-value-function 。
本选项通常在文件类型插件里设置: :filetype-plugin-on
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'opendevice' 'odev' 'noopendevice' 'noodev'
'opendevice' 'odev' 布尔型 (缺省关闭)
全局
{仅限于 MS-Windows} E796
允许对设备进行读写操作。这可能会使 Vim 在某些可以打开但实际上无法完成
I/O 的设备上发生死机。因此本选项缺省是关闭的。
注意 在 MS-Windows 上,编辑诸如 "aux.h"、"lpt1.txt" 这样的文件名,实际
上等同于在对相应的设备进行编辑。
'operatorfunc' 'opfunc'
'operatorfunc' 'opfunc' 字符串 (缺省: 空)
全局
指定 g@ 操作符调用的函数。详情和示例见 :map-operator 。值可以是函数
名、 lambda 或 Funcref 。详见 option-value-function 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'osctimeoutlen' 'ost' E1568
'osctimeoutlen' 'ost' 数值型 (缺省为 1000)
全局
本选项指定 Vim 在接收到 OSC 命令响应的开始部分后,等待 OSC 终止符出现
的超时,以毫秒为单位。更多信息可见 TermResponseAll 自动命令事件和
v:termosc 。
'osfiletype' 'oft'
'osfiletype' 'oft' 字符串 (缺省: "")
局部于缓冲区
本选项曾用于现已删除的 RISC OS 支持。
'packpath' 'pp'
'packpath' 'pp' 字符串 (缺省: 见 'runtimepath')
用于寻找软件包的目录列表。见 packages 。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'paragraphs' 'para'
'paragraphs' 'para' 字符串 (缺省为 "IPLPPPQPP TPHPLIPpLpItpplpipbp")
全局
指定用于分隔段落的 nroff 宏列表,每个宏是两个字符构成的组对 (见
object-motions )。
'paste' 'nopaste'
'paste' 布尔型 (缺省关闭)
全局
将 Vim 切换到粘贴模式。可用于从一个窗口剪切或复制文本并粘贴到 Vim。此
模式可避免一些意想不到的效果。
打开本选项对在终端上运行的 Vim 有用,因为那里 Vim 无法区分是输入的文本
还是粘贴进来的文本。在 GUI 里,Vim 知道何者来自粘贴,所以即使不打开
'paste' 也基本上不会出错。对 Vim 能自己处理鼠标点击的终端,也是如此。
启动 GUI 时会复位本选项。所以如果在 .vimrc 里置位本选项,在终端里可以
工作,但在 GUI 里不会。在 GUI 里置位 'paste' 有副作用: 例如,Paste 工
具栏按钮在插入模式下不能工作,因为它使用了映射。
打开 'paste' 选项时 (包括它本来就是打开的情况):
- 屏蔽插入模式和命令行模式下的所有映射
- 屏蔽所有缩写
- 'autoindent' 被复位
- 'expandtab' 被复位
- 'hkmap' 被复位
- 'revins' 被复位
- 'ruler' 被复位
- 'showmatch' 被复位
- 'softtabstop' 被设为 0
- 'textwidth' 被设为 0
- 'wrapmargin' 被设为 0
- 'varsofttabstop' 被设为空
以下选项会保持其值不变,但实际效果会被屏蔽:
- 'cindent'
- 'formatoptions' 的行为会如同它被设为空值一样
- 'indentexpr'
- 'lisp'
- 'smartindent'
注意: 打开 'paste' 选项且开始编辑其他文件时,模式行或者自动命令里的设
置可能会修改上述选项,从而给文本粘贴造成麻烦。此时,可能需要再次置位
'paste' 选项。
'paste' 选项复位时,上述选项会被复原为上次 'paste' 从关切换到开时的取
值。如果从未置位过 'paste',复位 'paste' 不会有任何效果。因为 'paste'
激活时不能使用映射,可通过 'pastetoggle' 选项来指定切换 'paste' 选项的
热键。
'pastetoggle' 'pt'
'pastetoggle' 'pt' 字符串 (缺省为 "")
全局
非空时,指定切换 'paste' 选项的键序列。其效果类似于定义如下映射:
:map {keys} :set invpaste<CR>
其中 {keys} 为 'pastetoggle' 的值。
区别是,'paste' 置位后,本选项仍然有效 (而部分模式下的映射会被屏蔽)。
'pastetoggle' 可用于插入模式和普通模式,但不能用于命令行模式。
先检查映射,它可能会覆盖 'pastetoggle'。不过,打开 'paste' 时,插入模
式下的映射会被忽略,所以可以如此操作:
:map <F10> :set paste<CR>
:map <F11> :set nopaste<CR>
:imap <F10> <C-O>:set paste<CR>
:imap <F11> <nop>
:set pastetoggle=<F11>
这会使 <F10> 启动粘贴模式而使 <F11> 终止粘贴模式。
注意 在粘贴模式里输入 <F10> 会插入 "<F10>"。因为在粘贴模式里,除了
'pastetoggle' 键序列以外,一切都是按本义插入的。
该值需要若干字节时,适用 'ttimeoutlen' 超时。
'pex' 'patchexpr'
'patchexpr' 'pex' 字符串 (缺省为 "")
全局
{仅当编译时加入 +diff 特性才有效}
用来给文件打补丁并生成文件新版本的表达式。见 diff-patchexpr 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'patchmode' 'pm' E205 E206
'patchmode' 'pm' 字符串 (缺省为 "")
全局
非空时,保存文件的最旧版本。在源代码发布中,可用来修改文件并保留文件的
原始版本。仅当首次写入文件时,才保存原始文件的备份。备份的名字是原始文
件的名字加上 'patchmode' 选项值作为后缀。本选项必须是以句号开始的字符
串,形如 ".orig" 或 ".org"。要使其正常工作,'backupdir' 不能为空 (细
节: 新文件成功写入后,其备份文件会被重命名为 patchmode 文件。这就是为
什么必须可以写备份文件的原因)。如果没有需要备份的文件 (也就是说原文件
不存在),则会创建一个空 patchmode 文件。
匹配 'backupskip' 模式时,不会建立 patchmode 文件。
在压缩文件上使用 'patchmode' 时,后缀会被附加到压缩文件名之后 (例如
"file.gz.orig"),因此生成的文件名可能无法再被识别为压缩文件。
只能使用普通的文件名字符。"/\*?[|<>" 不合法。
'path' 'pa' E343 E345 E347 E854
'path' 'pa' 字符串 (缺省值:
Unix: ".,/usr/include,,"
其他: ".,,")
全局或局部于缓冲区 global-local
这是一个目录列表, gf 、 [f 、 ]f 、 ^Wf 、 :find 、 :sfind 、
:tabfind 和其它命令进行文件搜索时,只要使用的是相对路径 (不以 "/"、
"./" 或 "../" 开始),会从此目录列表中搜索文件。'path' 选项里的目录可以
是相对路径,也可以是绝对路径。
- 使用逗号分隔目录名:
:set path=.,/usr/local/include,/usr/include
- 目录名也可用空格分隔 (为了和 3.0 版本后向兼容)。如果目录名本身包含空
格,需要在空格前加一个额外的反斜杠进行转义:
:set path=.,/dir/with\\\ space
- 类似地,如果目录名本身包含逗号,在逗号前加一个额外的反斜杠:
:set path=.,/dir/with\\,comma
- 要在当前文件所在的目录下进行搜索,可用:
:set path=.
- 要在当前目录下搜索,可在两个逗号间使用一个空串:
:set path=,,
- 目录名可以用 ':' 或 '/' 结尾。
- 环境变量被扩展 :set_env 。
- 使用 netrw.vim 时,可用 URL。例如,加入 "http://www.vim.org" 后,
":find index.html" 就可以工作。
- 使用 "*"、"**" 和 ";" 可在目录树中向上和向下搜索。相关信息和语法见
file-searching 。
- 谨慎使用 '\' 字符,在选项值里使用时,输入两个会得到一个:
:set path=.,c:\\include
更简单地,也可用 '/' 代替:
:set path=.,c:/include
不要忘记包含 ".",否则连当前文件所在的目录都不会搜索!
选项长度有上限。具体多少由系统决定,一般是 256 或 1024 个字符。
要检查当前的 'path' 设置能否找到所有的头文件,见 :checkpath 。
建议使用 :set+= 和 :set-= 来从列表里加减目录。这可以避免未来版本更
改缺省值而引发的问题。要删除当前目录,可用:
:set path-=
要添加当前目录,可用:
:set path+=
要使用环境变量,可能需要替换其中的分隔符。以下是一个将 $INCL 添加到路
径的示例,假定该环境变量里的路径名以分号分隔:
:let &path = &path .. "," .. substitute($INCL, ';', ',', 'g')
把 ';' 换成 ':' 或者任何实际使用的分隔符。注意 如果 $INCL 里包含逗号或
者空格,此示例将无法正常工作。
'perldll'
'perldll' 字符串 (缺省取决于编译设置)
全局
{仅当编译时加入 +perl/dyn 特性才有效}
指定 Perl 共享库的名字。缺省是编译时指定的 DYNAMIC_PERL_DLL。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'preserveindent' 'pi' 'nopreserveindent' 'nopi'
'preserveindent' 'pi' 布尔型 (缺省关闭)
局部于缓冲区
改变当前行的缩进时,尽量保持缩进结构。缩进通常使用连续的制表符,必要时
再在后面追加若干空格进行补齐 (除非打开 'expandtab',此时只使用空格)。
打开此选项时,缩进会尽量保留已有的字符,只有在必要时才会添加额外的制表
符或空格。
保留的空白不会应用 'expandtab',制表符仍然保持为制表符。
注意: 多次使用 ">>" 产生的缩进会是制表和空格的混合。这可能不是用户乐见
的结果。
注意: 'compatible' 置位时会复位本选项。
另见 'copyindent'。
可用 :retab 来清理和规范缩进中的空白。
'previewheight' 'pvh'
'previewheight' 'pvh' 数值型 (缺省为 12)
全局
{仅当编译时加入 +quickfix 特性才有效}
预览窗口的缺省高度。用于 :ptag 和相关的命令,也用于不带计数的
CTRL-W_} 。'previewpopup' 非空时,不使用本选项。
'previewpopup' 'pvp'
'previewpopup' 'pvp' 字符串 (缺省为空)
全局
{仅当编译时加入 +textprop 或 +quickfix 特性才有效}
非空时,本来会打开预览窗口的命令会改用弹出窗口。见 preview-popup 。
不用于启动插入模式补全的 info 弹出,为此,可在 'completeopt' 中加入
"popup"。
'previewwindow' 'nopreviewwindow'
'pvw' 'nopvw' E590
'previewwindow' 'pvw' 布尔型 (缺省关闭)
局部于窗口 local-noglobal
{仅当编译时加入 +quickfix 特性才有效}
用于标识当前预览窗口。只有一个窗口可以置位本选项。本选项通常不直接设
置,而是通过 :ptag 、 :pedit 等命令进行。
'printdevice' 'pdev'
'printdevice' 'pdev' 字符串 (缺省为空)
全局
{仅当编译时加入 +printer 特性才有效}
指定 :hardcopy 使用的打印机名。
见 pdev-option 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'printencoding' 'penc'
'printencoding' 'penc' 字符串 (缺省为空,有些系统除外)
全局
{仅当编译时加入 +printer 和 +postscript 特性才有
效}
指定打印时使用的字符编码。
见 penc-option 。
'printexpr' 'pexpr'
'printexpr' 'pexpr' 字符串 (缺省: 见下)
全局
{仅当编译时加入 +printer 和 +postscript 特性才有
效}
用于打印 ":hardcopy" 生成的 PostScript 文件的表达式。
见 pexpr-option 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'printfont' 'pfn'
'printfont' 'pfn' 字符串 (缺省为 "courier")
全局
{仅当编译时加入 +printer 特性才有效}
指定 :hardcopy 命令使用的字体名。
见 pfn-option 。
'printheader' 'pheader'
'printheader' 'pheader' 字符串 (缺省为 "%<%f%h%m%=Page %N")
全局
{仅当编译时加入 +printer 特性才有效}
指定 :hardcopy 输出生成的页眉格式。
见 pheader-option 。
'printmbcharset' 'pmbcs'
'printmbcharset' 'pmbcs' 字符串 (缺省为 "")
全局
{仅当编译时加入 +printer 和 +postscript 特性才有
效}
指定 :hardcopy 的 CJK 输出使用的 CJK 字符集。
见 pmbcs-option 。
'printmbfont' 'pmbfn'
'printmbfont' 'pmbfn' 字符串 (缺省为 "")
全局
{仅当编译时加入 +printer 和 +postscript 特性才有
效}
指定 :hardcopy 的 CJK 输出使用的字体名列表。
见 pmbfn-option 。
'printoptions' 'popt'
'printoptions' 'popt' 字符串 (缺省为 "")
全局
{仅当编译时加入 +printer 特性才有效}
控制 :hardcopy 输出格式的项目列表。
见 popt-option 。
'prompt' 'noprompt'
'prompt' 布尔型 (缺省打开)
全局
打开时,Ex 模式使用 ":" 提示。
'pumborder' 'pb'
'pumborder' 'pb' 字符串 (缺省为 "")
全局
用于定义补全时弹出菜单的边框风格和可选装饰效果。值是逗号分隔的关键字列
表。
边框风格 (最多只能选择一项):
"single" 使用窄方框绘制字符
"double" 使用双线方框绘制字符
"round" 使用圆角
"ascii" 使用 ASCII 字符 (-、|、+)
"custom:X;X;X;X;X;X;X;X"
使用分号分隔的八个自定义字符,依次对应:
顶、右、底、左、左上、右上、右下、左下
用于装饰效果的其他标志位:
"margin" 在左右边框内侧加上一个单元的空间
"shadow" 在右侧和底侧边缘绘制阴影
高亮组:
hl-PmenuBorder 用于边框字符
hl-PmenuShadow 用于阴影
示例:
:set pumborder=single
:set pumborder=double,margin,shadow
:set pumborder=custom:─;│;─;│;┌;┐;┘;└,shadow
仅当 'encoding' 为 "utf-8" 且 'ambiwidth' 为 "single" 时,才可使用由边
框绘制字符构成的边框风格 ("single"、"double"、"round")。
使用 "margin" 必须先指定一种边框风格。
另见: ins-completion-menu 。
'pumheight' 'ph'
'pumheight' 'ph' 数值型 (缺省为 0)
全局
指定用于插入模式补全时弹出菜单显示的最大项目数。为零时,会使用尽可能多
的可用空间。
ins-completion-menu 。
'pummaxwidth' 'pmw'
'pummaxwidth' 'pmw' 数值型 (缺省为 0)
全局
指定用于插入模式补全时弹出菜单使用的最大宽度。为零时,没有宽度上限,否
则弹出菜单宽度不会超过此值。超出部分会在末尾用 'fillchars' 选项里的
"trunc" 值标示被截断的文本。
本选项的优先级高于 'pumwidth'。
ins-completion-menu 。
'pumwidth' 'pw'
'pumwidth' 'pw' 数值型 (缺省为 15)
全局
指定用于插入模式补全时弹出菜单使用的最小宽度。 ins-completion-menu 。
'pythondll'
'pythondll' 字符串 (缺省取决于编译设置)
全局
{仅当编译时加入 +python/dyn 特性才有效}
指定 Python 2.x 共享库的名字。缺省是编译时指定的 DYNAMIC_PYTHON_DLL。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'pythonhome'
'pythonhome' 字符串 (缺省为 "")
全局
{仅当编译时加入 +python/dyn 特性才有效}
指定 Python 2.x 的主目录名。'pythonhome' 和 PYTHONHOME 环境变量都未设
定时,会使用编译时指定的 PYTHON_HOME 作为 Python 2.x 主目录。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'pythonthreedll'
'pythonthreedll' 字符串 (缺省取决于编译设置)
全局
{仅当编译时加入 +python3/dyn 特性才有效}
指定 Python 3 共享库的名字。缺省是编译时指定的 DYNAMIC_PYTHON3_DLL。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'pythonthreehome'
'pythonthreehome' 字符串 (缺省为 "")
全局
{仅当编译时加入 +python3/dyn 特性才有效}
指定 Python 3 的主目录名。'pythonthreehome' 和 PYTHONHOME 环境变量都未
设定时,会使用编译时指定的 PYTHON3_HOME 作为 Python 3 主目录。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'pyxversion' 'pyx'
'pyxversion' 'pyx' 数值型 (缺省取决于编译设置)
全局
{仅当编译时加入 +python 或 +python3 特性才有效}
指定 pyx* 函数和 python_x 命令使用的 python 版本。缺省值如下:
编译时带有 缺省
+python 和 +python3 0
仅有 +python 2
仅有 +python3 3
可选值为 0、2 和 3。
如果 'pyxversion' 为 0,那么在首次执行任何 python2/3 命令或函数时,会
相应地设置本选项为 2 或 3。例如, :py 会将其设为 2, :py3 则会将其设
为 3。执行 :pyx 时,如果 Python 3 可用,则设为 3,否则如果 Python 2
可用,则设为 2。
另见: has-pythonx
如果 Vim 编译时只带有 +python 或 +python3 ,设置 'pyxversion' 没有
效果。pyx* 函数和命令总会使用编译时指定的版本。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'quickfixtextfunc' 'qftf'
'quickfixtextfunc' 'qftf' 字符串 (缺省为 "")
全局
{仅当编译时加入 +quickfix 特性才有效}
本选项指定用于获取在快速修复和位置列表窗口中显示的文本的函数。可用
于为快速修复列表或位置列表的每个项目定制在对应快速修复或位置窗口中显示
的信息。 quickfix-window-function 解释如何编写此函数,并给出示例。此
值可为函数名、 lambda 或 Funcref 。详见 option-value-function 。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'quoteescape' 'qe'
'quoteescape' 'qe' 字符串 (缺省为 "\")
局部于缓冲区
用于转义字符串中引号的字符。用于 a'、a" 和 a` a' 这样的文本对象。
当字符串里找到本选项里指定的任何字符时,会跳过下一个字符。缺省值下,文
本 "foo\"bar\\" 会被识别为单个字符串。
'readonly' 'ro' 'noreadonly' 'noro'
'readonly' 'ro' 布尔型 (缺省关闭)
局部于缓冲区 local-noglobal
打开时,除非使用 '!' 强制写入,否则禁止写回文件。用于防止用户不小心覆
盖文件。Vim 以只读模式启动 ("vim -R") 或者可执行文件名为 "view" 时,缺
省打开本选项。
使用 ":w!" 后,会复位当前缓冲区的 'readonly' 选项,除非 'cpoptions' 里
包含 'Z' 标志位。
使用 ":view" 命令打开的新编辑缓冲区也会置位 'readonly' 选项。
要禁止修改缓冲区内容 (而不仅仅是禁止写回文件),参见 'modifiable'。
'redrawtime' 'rdt'
'redrawtime' 'rdt' 数值型 (缺省为 2000)
全局
{仅当编译时加入 +reltime 特性才有效}
重画屏幕的时间限制,以毫秒为单位。该限制适用于 'hlsearch' 的模式搜索、
:match 高亮和语法高亮。
重画需时超过此限制时,不再继续高亮匹配。
对于语法高亮,为每个窗口分别计算该时间。超过限制时,暂停语法高亮,直到
按 CTRL-L 为止。
此限制用于防止在使用一些非常复杂的模式时,Vim 会挂起。
'regexpengine' 're'
'regexpengine' 're' 数值置 (缺省为 0)
全局
选择缺省正则表达式引擎。 two-engines
可选值为:
0 自动选择
1 旧引擎
2 NFA 引擎
注意 使用 NFA 引擎但模式包含该引擎不支持的特性时,整个模式会不匹配。因
此,指定非缺省值通常只用于调试正则表达式引擎。
如果缺省引擎变得太昂贵,例如 NFA 引擎使用了过多状态,使用自动选择允许
Vim 在需要时切换引擎。这有助于避免在复杂模式和长文本的组合时导致 Vim
挂起。
'relativenumber' 'rnu' 'norelativenumber' 'nornu'
'relativenumber' 'rnu' 布尔型 (缺省关闭)
局部于窗口
在每行前面显示相对于光标所在行的行号。相对行号有助于快速确定某些垂直移
动命令 (如 j k + -) 需要的计数值 count ,而无需自行计算。和许多其他命
令 (如 y d c < > gq gw = 等) 组合使用时尤其方便。
'cpoptions' 排除 'n' 项目时,回绕行不使用行号占据的列 ('compatible' 未
置位时,这是缺省行为)。
要设置行号占据的列宽,可用 'numberwidth' 选项。
被回绕的长行不从第一个字符开始时,行号前会用 '-' 字符填充。
行号使用的高亮见 hl-LineNr 和 hl-CursorLineNr 。
光标行前面显示的数值也取决于 'number' 的值,关于两个选项的可能组合,参
见 number_relativenumber 。
'remap' 'noremap'
'remap' 布尔型 (缺省打开)
全局
允许递归映射。如果单个映射想屏蔽递归调用,可用 :noremap[!] 命令。
注意: 为了避免 Vim 脚本的移植性问题,本选项应保持缺省 "打开" 状态。只
有在旧的 Vi 脚本里才需要关闭。
'renderoptions' 'rop'
'renderoptions' 'rop' 字符串 (缺省: 空)
全局
{仅当编译时加入 GUI 和 MS-Windows 的 DIRECTX 才有效}
选择文本渲染器并设置其选项。选项取决于渲染器。
语法:
set rop=type:{renderer}(,{name}:{value})*
目前,只有一个可选的渲染器。
渲染器 行为
directx Vim 使用 DirectX (DirectWrite) 绘制文本。比缺省 GDI 能绘制更美
观的字形。
要求 'encoding' 为 "utf-8",并且仅在 MS-Windows Vista 或更新的
版本里才能工作。
选项:
名字 含义 类型 值
gamma gamma 浮点 1.0 - 2.2 (可能)
contrast enhancedContrast 浮点 (未知)
level clearTypeLevel 浮点 (未知)
geom pixelGeometry 整数 0 - 2 (见下)
renmode renderingMode 整数 0 - 6 (见下)
taamode textAntialiasMode 整数 0 - 3 (见下)
scrlines Scroll Lines 整数 (已废弃)
详情可见此 URL (除了 scrlines 外):
https://msdn.microsoft.com/en-us/library/dd368190.aspx
geom 可用值: 设备像素结构。
0 - DWRITE_PIXEL_GEOMETRY_FLAT
1 - DWRITE_PIXEL_GEOMETRY_RGB
2 - DWRITE_PIXEL_GEOMETRY_BGR
详情可见此 URL:
https://msdn.microsoft.com/en-us/library/dd368114.aspx
renmode 可用值: 渲染字形的方法。
0 - DWRITE_RENDERING_MODE_DEFAULT
1 - DWRITE_RENDERING_MODE_ALIASED
2 - DWRITE_RENDERING_MODE_GDI_CLASSIC
3 - DWRITE_RENDERING_MODE_GDI_NATURAL
4 - DWRITE_RENDERING_MODE_NATURAL
5 - DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC
6 - DWRITE_RENDERING_MODE_OUTLINE
详情可见此 URL:
https://msdn.microsoft.com/en-us/library/dd368118.aspx
taamode 可用值: 绘制文本的反锯齿方法。
0 - D2D1_TEXT_ANTIALIAS_MODE_DEFAULT
1 - D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE
2 - D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE
3 - D2D1_TEXT_ANTIALIAS_MODE_ALIASED
详情可见此 URL:
https://msdn.microsoft.com/en-us/library/dd368170.aspx
关于 scrlines:
过去用于优化滚动行为,不过现在已废弃。即使指定,也会被直接忽
略。
示例:
set encoding=utf-8
set gfn=Ricty_Diminished:h12
set rop=type:directx
如果 'guifont' 选择了光栅字体 (Courier、Terminal 或 FixedSys
等文件名有 ".fon" 扩展名的字体),会使用后备的 GDI 绘制方法。
备注: 已知有些字体和本选项部分值的组合在字形绘制时会出问题。
- 'renmode:5' 和 'renmode:6' 不适用于某些特制的字体 (只包含
位图字形的 True-Type 字体)。
- 'taamode:3' 不适用于某些矢量字体。
备注: 启用本选项后,在 Windows 8.1 或更高版本里可以显示彩色表
情图标 (emoticon)。要正确显示彩色表情图标,需要注意以下条件。
- 如果所选字体已经包含非彩色的表情图标,则会使用该图标。
- 如果所选字体不包含表情图标,系统会选用备用的符号字体。
Windows 10 上会使用 "Segoe UI Emoji"。
- 如果该备用字体没有固定宽度字形,表情图标的渲染可能会超出绘
制单元框的边界。
目前不支持其它的渲染器类型。
'report'
'report' 数值型 (缺省为 2)
全局
改动行数的报告阈值。改动行数多于 'report' 时,大多数 ":" 命令会给出消
息。如果希望任何情况都显示消息,可将 'report' 设置为零。
对于 ":substitute" 命令,报告阈值使用替代次数而非改动行数。
'restorescreen' 'rs' 'norestorescreen' 'nors'
'restorescreen' 'rs' 布尔型 (缺省打开)
全局
{仅适用于 MS-Windows 控制台版本}
打开时,退出 Vim 后会恢复屏幕内容。执行外部命令时也同样如此。
对于非 Windows 上的 Vim: 可在 .vimrc 里置位和复位 't_ti' 和 't_te' 选
项。要禁止复原:
set t_ti= t_te=
要允许复原 (适用于 xterm):
set t_ti=^[7^[[r^[[?47h t_te=^[[?47l^[8
(其中 ^[ 代表 <Esc> 字符,输入 CTRL-V <Esc> 可以插入)
'revins' 'ri' 'norevins' 'nori'
'revins' 'ri' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +rightleft 特性才有效}
在插入模式下,字符输入会反向进行。见 "反向输入" ins-reverse 。置位
'allowrevins' 时,在插入模式下,CTRL-_ 命令会切换本选项值。
注意: 'compatible' 置位时会复位本选项。
'paste' 选项置位时会临时复位本选项。'paste' 复位时会恢复本选项。
'rightleft' 'rl' 'norightleft' 'norl'
'rightleft' 'rl' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +rightleft 特性才有效}
打开时,显示方向转变为从右到左,也就是说,文件里存贮的字符会从右到左进
行显示。使用本选项可以编辑希伯来语和阿拉伯语这样从右到左书写的语言。本
选项局部于窗口,所以可以同时编辑不同朝向的文件,或者用不同朝向阅读同一
文件 (这可用于混合从右到左和从左到右字符串文本的文件,从而在不同窗口里
确保两者都能正确显示)。另见 rileft.txt 。
'rightleftcmd' 'rlc'
'rightleftcmd' 'rlc' 字符串 (缺省为 "search")
局部于窗口
{仅当编译时加入 +rightleft 特性才有效}
本选项里每个单词分别允许一组命令能够在从右到左模式下编辑命令行:
search "/" 和 "?" 命令
可用于希伯来语、阿拉伯语和波斯语等语言。
必须先置位 'rightleft' 选项,'rightleftcmd' 才会生效。
'rubydll'
'rubydll' 字符串 (缺省取决于编译设置)
全局
{仅当编译时加入 +ruby/dyn 特性才有效}
指定 Ruby 共享库的名字。缺省是编译时指定的 DYNAMIC_RUBY_DLL。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'ruler' 'ru' 'noruler' 'noru'
'ruler' 'ru' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
标尺。显示光标所在的行号和列号,以逗号分隔。还有剩余空间时,在最右端显
示文本在文件中的相对位置:
顶端 首行可见
底端 末行可见
全部 首末两行都可见
45% 显示窗口在文件中的相对百分比位置
如果设置了 'rulerformat',该值会决定标尺的内容。
每个窗口都有自己的标尺。窗口有状态行时,标尺会在状态行上显示。否则在窗
口末行上显示。状态行通过 'statusline' 指定 (亦即非空) 时,该选项优先于
'ruler' 和 'rulerformat'。
显示的字符数不同于文本内的字节数时 (例如因为制表符或者多字节字符的存
在),会同时显示文本列号 (字节数) 和屏幕列号,以连字符分隔。
空行会显示 "0-1"。
空缓冲区会显示行号也为零: "0,0-1"。
'paste' 选项置位时会临时复位本选项。'paste' 复位时会恢复本选项。
如果不想一直显示标尺,但又想随时查看当前位置,可用 "g CTRL-G"
g_CTRL-G 。
注意: 'compatible' 置位时会复位本选项。
'rulerformat' 'ruf'
'rulerformat' 'ruf' 字符串 (缺省为空)
全局
{仅当编译时加入 +statusline 特性才有效}
本选项非空时,它会决定 'ruler' 选项所显示的标尺字符串的具体内容。
本选项使用和 'statusline' 相同的格式。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
标尺缺省占用 17 个字符宽度。要使标尺 15 个字符宽,可在本选项的开头加上
"%15(",并在最后加入 "%)"。
例如:
:set rulerformat=%15(%c%V\ %p%%%)
'runtimepath' 'rtp' vimfiles
'runtimepath' 'rtp' 字符串 (缺省值:
Unix: "$HOME/.vim 或
$XDG_CONFIG_HOME/vim,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$HOME/.vim/after"
Amiga: "home:vimfiles,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
home:vimfiles/after"
MS-Windows: "$HOME/vimfiles,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$HOME/vimfiles/after"
Haiku: "$BE_USER_SETTINGS/vim,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$BE_USER_SETTINGS/vim/after"
VMS: "sys$login:vimfiles,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
sys$login:vimfiles/after")
全局
指定用于搜索以下运行时文件的目录列表:
filetype.vim 根据文件名决定文件类型 new-filetype
scripts.vim 根据文件内容决定文件类型 new-filetype-scripts
autoload/ 自动载入的脚本 autoload-functions
colors/ 色彩方案文件 :colorscheme
compiler/ 编辑器文件 :compiler
doc/ 帮助文档 write-local-help
ftplugin/ 文件类型插件 write-filetype-plugin
import/ :import 找到的文件
indent/ 缩进脚本 indent-expression
keymap/ 键盘映射表文件 mbyte-keymap
lang/ 消息翻译 :menutrans 和 multi-lang
menu.vim GUI 菜单 menu.vim
pack/ 软件包 :packadd
plugin/ 插件脚本 write-plugin
print/ 打印所需的文件 postscript-print-encoding
spell/ 拼写检查文件 spell
syntax/ 语法文件 mysyntaxfile
tutor/ vimtutor 所需的文件 tutor
还包括那些可以通过 :runtime 命令搜索到的其他文件。
$XDG_CONFIG_HOME 可见 xdg-base-dir 。
多数系统上,缺省值会依次搜索以下五个位置:
1. 用户主目录,指定用户个人的偏好设置。
2. 系统范围的 Vim 目录,指定系统管理员的设置。
3. $VIMRUNTIME 目录,指定 Vim 发布的文件。
after-directory
4. 系统范围的 Vim 目录里的 "after" 目录。系统管理员可用于修改或附加到
发布指定的缺省值 (很少用到)。
5. 用户主目录里的 "after" 目录。用户可用于修改或附加到发布指定的缺省值
或系统范围设置 (很少用到)。
使用 packages 时,会自动在本选项里添加更多项目。如果选项值太长,
`:set rtp` 会被截短,但 `:echo &rtp` 仍可看到完整的字符串值。
注意,和 'path' 不同,这里不允许 "**" 这样的目录树通配符。普通的通配符
虽然可以使用,但会显著减慢运行时文件的搜索速度。为了提高效率,应尽可能
减少目录数量,并避免使用通配符。
见 :runtime 。
例如:
:set runtimepath=~/vimruntime,/mygroup/vim,$VIMRUNTIME
会优先使用目录 "~/vimruntime" (包含用户个人的 Vim 运行时文件),然后使
用 "/mygroup/vim" (在用户组间共享的运行时文件),最后使用 "$VIMRUNTIME"
(Vim 发布提供的运行时文件)。
为了始终使用发布提供的运行时文件,本选项应始终包含 $VIMRUNTIME。可在
$VIMRUNTIME 之前放置其他目录,这些目录可以包含发布运行时文件的替换版
本。也可在 $VIMRUNTIME 之后放置目录,用于存放基于发布运行时文件的附加
内容。
Vim 启动时带有 --clean 时,会跳过主目录下的所有项目。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'scroll' 'scr'
'scroll' 'scr' 数值型 (缺省: 窗口高度的一半)
局部于窗口 local-noglobal
使用 CTRL-U 和 CTRL-D 命令时,每次滚动的行数。窗口大小改变时,本选项会
自动设为窗口新行数的一半。打开 status-line 或 'tabline' 选项也可能会
改变窗口大小,从而导致本选项被再次更新。
CTRL-U 或 CTRL-D 命令给出计数时,该计数也会成为 'scroll' 的新值。要复
位到缺省情况 (使用窗口高度的一半),可用 ":set scroll=0"。
'scrollbind' 'scb' 'noscrollbind' 'noscb'
'scrollbind' 'scb' 布尔型 (缺省关闭)
局部于窗口
另见 scroll-binding 。打开本选项时,滚动当前窗口也会同时滚动其他的滚
动绑定窗口 (同样置位本选项的窗口)。本选项可用于查看同一个文件两个版本
间的差异,见 'diff'。
决定本选项行为的相关选项,可见 'scrollopt'。
分割窗口用于编辑其他文件时,多数情况下会复位本选项。这意味着
":split | edit file" 会产生两个滚动绑定的窗口,但 ":split file" 不会。
'scrollfocus' 'scf' 'noscrollfocus' 'noscf'
'scrollfocus' 'scf' 布尔型 (缺省关闭)
全局
{仅用于 MS-Windows GUI}
注意: 本选项当前不可用。将来版本可能会修正或者删除本选项。
使用滚轮且打开本选项时,会滚动鼠标所在的窗口。关闭本选项时,则会滚动当
前窗口。
MS-Windows 之外的系统上,其行为总是相当于本选项打开。
'scrolljump' 'sj'
'scrolljump' 'sj' 数值型 (缺省为 1)
全局
光标试图离开屏幕时 (比如使用 "j" 时),最少会滚动的行数。不适用于滚动命
令 (比如 CTRL-E、CTRL-D)。可用于滚动速度很慢的终端。
设为 -1 到 -100 的负数时,其绝对值被用作要滚动的窗口高度的百分比。例如
设为 -50 时,会滚动到窗口高度的一半。
注意: 'compatible' 置位时会设置本选项为 1。
'scrolloff' 'so'
'scrolloff' 'so' 数值型 (缺省为 0, defaults.vim 里设为 5)
全局或局部于窗口 global-local
光标上下两侧需要保留的最少屏幕行数。编辑时,这可以保证总会有一定数量的
上下文可见。如果设置本选项为极大值 (比如 999),光标所在行通常会始终定
位在窗口正中间 (除非光标位于文件开始或者结尾,或存在长行回绕的情况)。
使用本选项的局部值后,可用以下两种方法之一来切换回直接使用其全局值:
setlocal scrolloff<
setlocal scrolloff=-1
水平滚动的等价选项见 'sidescrolloff'。
注意: 'compatible' 置位时会设置本选项为 0。
'scrollopt' 'sbo'
'scrollopt' 'sbo' 字符串 (缺省为 "ver,jump")
全局
逗号分隔的单词列表,指定 'scrollbind' 窗口的行为。'sbo' 代表
ScrollBind Options (滚动绑定选项)。
可用的单词为:
ver 'scrollbind' 窗口会在垂直方向上同步滚动
hor 'scrollbind' 窗口会在水平方向上同步滚动
jump 保持两个垂直滚动窗口间的相对偏移量不变。该偏移量指的是
两个绑定窗口中首个可见行之间的行号差。在其中一个窗口里
移动时,另一个 'scrollbind' 窗口可能会滚动到缓冲区范围
之外 (到达缓冲区开始之前或结束之后)。即使如此,偏移量
也不会改变。当再向相反方向滚动时,如果条件允许,另一个
'scrollbind' 窗口就会尝试滚动到根据该偏移量应到达的位
置。
切换窗口使得另一个窗口成为当前窗口时,相对偏移量会有两
种情况:
1. 不包含 "jump" 时,相对偏移量会根据新当前窗口的滚动
位置进行调整。切换回原来那个窗口时,又会使用新的相
对偏移量。
2. 包含 "jump" 时,其他窗口会进行滚动,从而保持相同的
相对偏移量,切换回原来那个窗口时,相对偏移量会始终
保持不变。
另见 scroll-binding 。
'diff' 模式激活时,总是使用垂直滚动绑定。即使此处没有指定 "ver" 也是如
此。
'sections' 'sect'
'sections' 'sect' 字符串 (缺省为 "SHNHH HUnhsh")
全局
指定用于分隔小节的 nroff 宏的列表,每个宏是两个字符构成的组对 (见
object-motions )。缺省值定义了以下视为小节开始的 nroff 宏: ".SH"、
".NH"、".H"、".HU"、".nh" 和 ".sh"。
'secure' 'nosecure' E523
'secure' 布尔型 (缺省关闭)
全局
打开后,执行当前目录中的 ".vimrc" 和 ".exrc" 时,禁止使用 ":autocmd"、
外壳命令和写入命令,而且映射命令在执行前会先显示。仅当确信安全不会有问
题,或者 'exrc' 选项已被关闭时,才可以关闭本选项。在 Unix 上,仅当当前
目录中的 ".vimrc" 或 ".exrc" 的拥有者不是当前用户时,才会使用本选项。
如果系统允许用户自行使用 "chown",这依然可能带来安全危险。此时,最好在
~/.vimrc 的末尾置位 'secure'。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'selection' 'sel'
'selection' 'sel' 字符串 (缺省为 "inclusive")
全局
本选项定义选择区的行为。仅用于可视和选择模式。
可选值为:
值 越行 闭区间
old 否 是
inclusive 是 是
exclusive 是 否
"越行" 代表是否允许光标定位在行尾之后一个字符的位置。
"闭区间" 代表选择区的最后一个字符是否包含在操作范围内。比如,用 "x" 删
除选择区时是否会删除选择区的最后字符。
使用 "old" 而 'virtualedit' 允许光标移动过行尾时,仍然不会包括换行符。
使用 "exclusive" 时,在可视模式下,会为闭动作调整光标位置
inclusive-motion-selection-exclusive 。
注意:
- 在普通模式下,'virtualedit' 为空且本选项使用 "exclusive" (开区间)
时,从行尾开始的反向选择将无法包含行尾的那个字符。
- 本选项使用 "exclusive" (开区间) 时,可视选择单个字符的行为会等同于使
用 inclusive (闭区间) (换而言之,无法进行空区域的可视选择)。
:behave 命令会设置 'selection' 选项。
'selectmode' 'slm'
'selectmode' 'slm' 字符串 (缺省为 "")
全局
逗号分隔的单词列表,指定开始选择时,启动选择模式而非可视模式的场合。
可选值为:
mouse 使用鼠标时
key 使用 Shift + 特殊键时
cmd 使用 "v"、"V" 或 CTRL-V 时
见 Select-mode 。
:behave 命令会设置 'selectmode' 选项。
'sessionoptions' 'ssop'
'sessionoptions' 'ssop' 字符串 (缺省: "blank,buffers,curdir,folds,help,
options,tabpages,winsize,terminal")
全局
{仅当编译时加入 +mksession 特性才有效}
改变 :mksession 命令的效果。这是逗号分隔的单词列表。每个单词允许保存
和恢复某种设置 (译者注: curdir、sesdir、slash、unix 有特殊含义):
单词 保存和恢复
blank 空窗口
buffers 除了窗口里显示的缓冲区,还包括已隐藏和已卸载的缓冲区
curdir 当前目录
folds 手动建立的折叠、手动打开/关闭的折叠和局部折叠选项
globals 大写字母开头且包含至少一个小写字母的全局变量。只保存字
符串和数值类型。
help 帮助窗口
localoptions 窗口或缓冲区的局部选项和映射 (不包括局部选项的全局值)
options 所有的选项和映射 (也包括局部选项的全局值)
skiprtp 保存的选项中排除 'runtimepath' 和 'packpath'
resize 整个 Vim 窗口的大小: 'lines' 和 'columns'
sesdir 会话文件所在的目录会成为当前目录 (可用于通过网络访问不
同系统上的项目)
slash 文件名里的反斜杠会被替换为正斜杠
tabpages 所有标签页;排除时,只恢复当前标签页。从而可以为每个标
签页分别保存会话
terminal 作业命令可恢复的终端窗口
unix 会话文件会使用 Unix 换行格式 (单个 <NL>),即使在
Windows 或 DOS 系统上也是如此
winpos 整个 Vim 窗口的位置
winsize 所有窗口的大小
不允许同时包含 "curdir" 和 "sesdir"。
既没有包含 "curdir" 也没有包含 "sesdir" 时,会使用绝对路径保存文件名。
如果不包含 "options",恢复会话后会出现很多问题。
"slash" 和 "unix" 可用于 Windows 系统中,以便和 Unix 系统共享会话文
件。这是因为 Unix 版本的 Vim 不能执行 dos 格式的脚本,但 Windows 版本
的 Vim 却可以执行 unix 格式的脚本。
'shell' 'sh' E91
'shell' 'sh' 字符串 (缺省值:
Win32: "cmd.exe"
其他: $SHELL 或 "sh")
全局
用于 ! 和 :! 命令的外壳程序名。改变此值时,请同时检查以下选项:
'shelltype'、'shellpipe'、'shellslash'、'shellredir'、'shellquote'、
'shellxquote' 和 'shellcmdflag'。
本选项可以同时给出命令所需的参数,比如 "csh -f"。
option-backslash 说明如何包含空格和反斜杠。
环境变量被扩展 :set_env 。
在 restricted-mode 里,禁止使用外壳命令。$SHELL 值以 "false" 或
"nologin" 结尾时 (译者注: 仅限 Unix),也使用此模式。
如果外壳命令名里包含空格,需要把它放在引号里并转义。带引号的例子:
:set shell=\"c:\program\ files\unix\sh.exe\"\ -f
注意 每个引号前的反斜杠 (避免其作为注释的开始) 和每个空格前的反斜杠
(避免其终止选项值)。此外,还要 注意 "-f" 并不出现在引号里,因为它不是
命令名本身的一部分。Vim 会自动 (神奇地) 识别作为路径分隔符的反斜杠。
只带转义空格的例子 (Vim 从 $SHELL 变量初始化本选项时会这样处理):
:set shell=/bin/with\\\ space/sh
'shell' 的最终值是 "/bin/with\ space/sh", :set 会用掉两个反斜杠。
MS-Windows 上,可执行文件以 ".com" 结尾时,必须显式包含该后缀名。因
此,将外壳设置为 "command.com" 或 "4dos.com" 可以在所有场合适用,但设
置为 "command" 和 "4dos" 则无法适用于所有命令 (比如,过滤命令)。
由于未知原因,使用 "4dos.com" 时,当前目录会被改为 "C:\"。为了避免这个
问题,可将 'shell' 设置为:
:set shell=command.com\ /c\ 4dos
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'shellcmdflag' 'shcf'
'shellcmdflag' 'shcf' 字符串 (缺省值:
Win32:
'shell' 包含 "powershell" 时: "-Command"
'shell' 不包含 "sh" 时: "/c"
其他: "-c")
全局
执行 ! 和 :! 命令时,传递给外壳的标志位;比如,"bash.exe -c ls"、
"powershell.exe -Command dir" 或 "cmd.exe /c dir"。
MS-Windows 上,会根据 'shell' 值来自动设置缺省值,从而减少用户手动设置
的需要。
Unix 上,可指定多个标志位。本选项用空格分隔的每个部分都会被视作传递给
外壳命令的一个参数。
option-backslash 说明如何包含空格和反斜杠。
MS-Windows 上,另见 dos-shell 和 dos-powershell 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'shellpipe' 'sp'
'shellpipe' 'sp' 字符串 (缺省值:
Amiga: ">"
MS-Windows:
'shell' 为 powershell 时:
"2>&1 | Out-File -Encoding default"
'shell' 为 "csh" 或 "tcsh" 时: ">&"
否则: ">%s 2>&1"
Unix:
'shell' 为 "csh" 或 "tcsh" 时: "|& tee"
'shell' 为 "sh"、"ksh"、"mksh"、"pdksh"、
"zsh"、"zsh-beta"、"bash"、
"fish"、"ash" 或 "dash" 时:
"2>&1| tee"
'shell' 为 pwsh 时: ">%s 2>&1"
否则: "| tee")
全局
{仅当编译时加入 +quickfix 特性才有效}
用于把 ":make" 命令的输出保存到错误文件的字符串。另见
:make_makeprg 。 option-backslash 说明如何包含空格和反斜杠。
有必要时,选项值里可用 "%s" 表示临时文件 (如果其中没有 %s,会自动在最
后附加该文件名)。
Amiga 上,缺省为 ">"。MS-Windows 上,当外壳为 powershell 时,缺省为
"2>&1 | Out-File -Encoding default",否则缺省为 ">%s 2>&1"。输出会直接
存到文件里,不在屏幕上回显。
Unix 上,缺省为 "| tee"。编译器的标准输出会存到文件里,并同时在屏幕上
回显。在初始化后,当 'shell' 选项值为 "csh" 或 "tcsh" 时,缺省值会变为
"|& tee"。而当 'shell' 选项值为 "sh"、"ksh"、"mksh"、"pdksh"、"zsh"、
"zsh-beta"、"bash"、"fish"、"ash" 或 "dash" 时,缺省值会变为
"2>&1| tee"。这意味着标准错误 (stderr) 也被合并输出。检查 "shell" 选项
时会排除路径部分,也就是说 "/bin/sh" 会被当成 "sh"。
Unix 和 MS-Windows 上,当 'shell' 选项为 "pwsh" 时,缺省值会变为
">%s 2>&1",此时输出不会在屏幕上回显。
本选项在读入 ".vimrc" 和其它初始化步骤之后才完成初始化,所以在那里如果
设置过 'shell' 选项,'shellpipe' 选项会自动根据 'shell' 值被调整,除非
在此前本选项已被显式设置过。
'shellpipe' 设为空串时,不会进行 ":make" 输出的重定向。这可用于会自行
写入 'makeef' 的 'makeprg' 程序。如果不希望用管道,但需要加入 'makeef'
作为参数,可把 'shellpipe' 设为单个空格。但不要忘了在空格之前加上反斜
杠,也就是: ":set sp=\ "。
未来过滤程序可能可以直接使用管道机制,那时本选项可能 (至少在 Unix 上)
会被废弃。
注意: 使用 "| tee" 这样的管道时,会丢失外壳命令的退出码。有些外壳程序
可进行配置以改变这种情况下整个管道命令的退出码,参考 pipefail 选项 (对
bash 和 zsh 而言,可用 ":set -o pipefail")。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'shellquote' 'shq'
'shellquote' 'shq' 字符串 (缺省: "")
全局
执行 ! 和 :! 命令时,用来包围传递给外壳的命令的引用字符。重定向会
发生在引用字符之外。要把重定向包含在内,见 'shellxquote'。同时设置这两
个选项可能没有必要。
缺省为空串。已知只对 MS-Windows 类型系统上的第三方外壳有用,比如 MKS
Korn Shell 或 bash,那里本选项应设为 "\""。见 dos-shell 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'shellredir' 'srr'
'shellredir' 'srr' 字符串 (缺省值:
MS-Windows:
'shell' 为 powershell 时:
"2>&1 | Out-File -Encoding default"
'shell' 为 "csh" 或 "tcsh" 时: ">&"
否则: ">%s 2>&1"
Unix:
'shell' 为 "csh" 或 "tcsh" 时: ">&"
'shell' 为 "sh"、"ksh"、"mksh"、"pdksh"、
"zsh"、"zsh-beta"、"bash"、
"fish"、"ash"、"dash" 或 "pwsh"
时: ">%s 2>&1"
其他: ">")
全局
用于把过滤命令的输出保存到临时文件的字符串。另见 :! 。
option-backslash 说明如何包含空格和反斜杠。
有必要时,选项值里可用 "%s" 表示临时文件 (如果其中没有 %s,会自动在最
后附加该文件名)。
缺省为 ">"。Unix 上,在初始化后,当 'shell' 选项值为 "csh" 或 "tcsh"
时,缺省值会变为 ">&"。而当 'shell' 选项值为 "sh"、"ksh"、"mksh"、
"pdksh"、"zsh"、"zsh-beta"、"bash"、"fish" 或 "pwsh" 时,缺省值会变为
">%s 2>&1"。这意味着标准错误 (stderr) 也被合并输出。Win32 上,进行和
Unix 相同的检查,但此外也检查 "cmd",其缺省值为 ">%s 2>&1"。还会检查
"powershell",其缺省值为 "2>&1 | Out-File -Encoding default" (见
dos-powershell )。最后,使用添加 ".exe" 后缀的外壳名,重复以上检查。
本选项在读入 ".vimrc" 和其它初始化步骤之后才完成初始化,所以在那里如果
设置过 'shell' 选项,'shellredir' 选项会自动根据 'shell' 值被调整,除
非在此前本选项已被显式设置过。
未来过滤程序可能可以直接使用管道机制,那时本选项可能 (至少在 Unix 上)
会被废弃。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'shellslash' 'ssl' 'noshellslash' 'nossl'
'shellslash' 'ssl' 布尔型 (缺省关闭)
全局
{仅适用于 MS-Windows}
打开时,扩展文件名时使用正斜杠。可用于代替 cmd.exe、pwsh.exe 或
powershell.exe 的 Unix 风格的外壳。仍然可以输入反斜杠,但 Vim 会将其换
成正斜杠。
注意 置位或复位本选项不会影响已有的文件名,所以最好在打开任何文件之前
设置本选项。此行为将来或许会有改变。
'shellslash' 只对那么使用反斜杠作为路径分隔符的系统有效。要检查是否支
持本选项:
if exists('+shellslash')
另见 'completeslash'。
'shelltemp' 'stmp' 'noshelltemp' 'nostmp'
'shelltemp' 'stmp' 布尔型 (Vi 缺省关闭,Vim 缺省打开)
全局
打开时,外壳命令会使用临时文件。关闭时,则会使用管道。
无法使用管道时,无论如何还是使用临时文件。
目前,只有 Unix 和 MS-Windows 2K 及更高的版本支持管道。要检查是否支持
管道:
:if has("filterpipe")
使用管道的好处是无需创建他人可见的临时文件,而且 'shell' 命令也不必支
持重定向。
而使用临时文件的好处是可以检测文件类型和编码。
'shelltemp' 关闭时,不会触发 FilterReadPre 、 FilterReadPost 、
FilterWritePre 、 FilterWritePost 自动命令事件。
system() 函数忽略本选项,总是使用临时文件机制。
注意: 'compatible' 置位时会设置本选项为 Vim 缺省值。
'shelltype' 'st'
'shelltype' 'st' 数值型 (缺省为 0)
全局
{仅适用于 Amiga}
Amiga 上,本选项会影响可能调用外壳的命令的行为。
0 和 1: 总是使用外壳
2 和 3: 只在过滤行时使用外壳
4 和 5: 只在执行 ':sh' 命令时使用外壳
不使用外壳时,命令会被直接执行。
0 和 2: 使用 "shell 'shellcmdflag' cmd" 来启动外部命令
1 和 3: 使用 "shell cmd" 来启动外部命令
(译者注: 4 和 5 应该也 分别 包含在上面两种情况里)
'shellxescape' 'sxe'
'shellxescape' 'sxe' 字符串 (缺省值:
MS-Windows: "\"&|<>()@^"
其他: "")
全局
'shellxquote' 设为 "(" 时,本选项列出的字符会用 '^' 字符进行转义。这样
就可以通过 cmd.exe 执行大多数外部命令。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'shellxquote' 'sxq'
'shellxquote' 'sxq' 字符串 (缺省值:
Win32:
'shell' 为 cmd.exe 时: "("
'shell' 为 powershell.exe 时: "\""
'shell' 包含 "sh" 时: "\""
Unix:
使用 system() 时: "\""
其他: "")
全局
执行 ! 和 :! 命令时,用来包围传递给外壳的命令的引用字符。重定向会
发生在引用字符之内。要把重定向排除在外,见 'shellquote'。同时设置这两
个选项可能没有必要。
设为 '(' 时,会在命令末尾自动附加 ')'。设为 '"(' 时,则会附加 ')"'。
当该选项为 '(' 时,另见 'shellxescape' 选项。
多数系统上,缺省为空串。已知只对 Win32 版本有用,或用于 cmd.exe,它会
自动去除命令首尾的引号 (译者注: 例如:
cmd /c "my path/to/echo" "my args to echo"
会成为
my path/to/echo" "my args to echo
所以必须使用括号包围命令:
(cmd /c ^"my path/to/echo^" ^"my args to echo^")
才会得到正确的
"my path/to/echo" "my args to echo"
),或用于 powershell.exe、pwsh.exe 以及诸如 MKS Korn Shell 或 bash 等
第三方外壳,那里本选项应设为 "\""。缺省值会根据 'shell' 的值调整,以减
轻用户自行设置本选项的需要。见 dos-shell 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'shiftround' 'sr' 'noshiftround' 'nosr'
'shiftround' 'sr' 布尔型 (缺省关闭)
全局
缩进会取整到 'shiftwidth' 的倍数。应用于 > 和 < 命令 (译者注: 假定
'shiftwidth' 为 8 而当前缩进为 10 列,按 << 时,如果打开本选项,缩进
会被调整为 9 列,否则变为 2 列)。插入模式下,CTRL-T 和 CTRL-D 总是
会把缩进取整到 'shiftwidth' 的倍数 (和 Vi 兼容)。
注意: 'compatible' 置位时会复位本选项。
'shiftwidth' 'sw'
'shiftwidth' 'sw' 数值型 (缺省为 8)
局部于缓冲区
构成一级 (自动) 缩进所使用的列数。用于 'cindent'、 << 、 >> 等。
为零时,Vim 会使用 'tabstop' 当前值。在脚本中, shiftwidth() 函数可用
于获取本选项的有效值。
'shortmess' 'shm'
'shortmess' 'shm' 字符串 (Vim 缺省 "filnxtToOS",Vi 缺省: "S",
POSIX 缺省: "AS")
全局 E1336
本选项有助于避免文件信息 (如 CTRL-G) 导致的所有 hit-enter 提示,也
用于避免或减少一些其它消息。以下是可用标志位的列表:
标志位 存在时的意义
f 用 "(3/5)" 代替 "(文件 3/5)" shm-f
i 用 "[noeol]" 代替 "[最后一行不完整]" shm-i
l 用 "999L, 888C" 代替 "999 行, 888 字节" shm-l
m 用 "[+]" 代替 "[已修改]" shm-m
n 用 "[新]" 代替 "[新文件]" shm-n
r 用 "[RO]" 代替 "[只读]" shm-r
w 用 "[w]" 代替文件写入消息的 "已写入", shm-w
以及用 "[a]" 代替 ':w >> file' 命令的 "已追加"
x 用 "[dos]" 代替 "[dos 格式]"、 shm-x
用 "[unix]" 代替 "[unix 格式]"、
以及用 "[mac]" 代替 "[mac 格式]"
a 包含以上所有的缩写 shm-a
o 文件读入信息会覆盖先前的文件写回消息 ( :wn 或打开 shm-o
'autowrite' 时有用)
O 文件读入信息会覆盖先前的任何消息,包括快速修复消息 shm-O
(比如, :cn )
s 不显示 "已查找到文件结尾,再从开头继续查找" 或 shm-s
"已查找到文件开头,再从结尾继续查找" 消息;使用搜索计数时不在
计数信息前显示 "W" (见下 shm-S )
t 如果文件消息过长而无法完整放入命令行,从开头截短该消 shm-t
息,并在最左列显示 "<";Ex 模式忽略此标志位
T 如果其他消息过长而无法完整放入命令行,从中间截短该消 shm-T
息;截短处显示 "...";Ex 模式忽略此标志位
W 写入文件时,不显示 "已写入" 或 "[w]" shm-W
A 找到已有交换文件时,不显示 "注意" 消息 shm-A
I 启动 Vim 时,不显示介绍消息 :intro shm-I
c 不显示 ins-completion-menu 信息;例如, shm-c
"-- XXX 补全 (YYY)"、"匹配 1 / 2"、"唯一匹配"、"找不到模式"、
"回到起点" 等等
C 扫描插入模式补全项目时,不显示 "扫描标签" 这样的消息 shm-C
q 使用 "记录中" 代替 "记录中 @a" shm-q
F 编辑文件时不显示文件信息,效果等同于使用 :silent ; shm-F
注意 这也会影响自动命令的信息以及 'autoread' 重新读取时的提示
S 搜索时不显示搜索计数信息,如 "[1/5]"。排除 "S" 标志位 shm-S
时,搜索时会显示搜索计数,但不显示 "已查找到文件结尾,再从开头
继续查找" 或 "已查找到文件开头,再从结尾继续查找" 消息,而只在
搜索计数统计值前加上 "W" (助记符: Wrapped 环绕) 字符。搜索计数
的显示上限可通过 'maxsearchcount' 选项设置,另见
searchcount() 函数。
这样可以避免在缓冲区之间切换时需要按下 <Enter>,同时仍能在可用的空间里
显示有用的消息。要得到相当于 'shm' 为空时的完整未截短的消息,可用
":file!"。
一些常用的值组合:
shm= 不缩写消息。
shm=a 有缩写,但不丢失消息。
shm=at 有缩写,必要时截短消息。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'shortname' 'sn' 'noshortname' 'nosn'
'shortname' 'sn' 布尔型 (缺省关闭)
局部于缓冲区
打开本选项时,文件名被假定为 8 字符加 3 字符的扩展名。文件名里不允许有
多个句号,附加扩展名 (".~" 或 ".swp") 的操作会将文件名里原有的句号替换
为下划线。此选项用于在 MS-DOS 兼容的文件系统 (如 messydos 或 crossdos)
上编辑文件。
'showbreak' 'sbr' E595
'showbreak' 'sbr' 字符串 (缺省为 "")
全局或局部于窗口 global-local
{仅当编译时加入 +linebreak 特性才有效}
回绕行上会放置在行首的字符串。常用值为 "> " 或 "+++ ":
:set showbreak=>\
注意 这里用来转义拖尾空格的反斜杠。以下记法则更方便:
:let &showbreak = '+++ '
本选项只接受 (一到多个) 可显示且占用单个单元位置的字符,但不包括 <Tab>
和逗号 (因为在未来版本里,逗号可能会用于分隔行首和行尾的不同部分)。
这些字符使用由 'highlight' 的 '@' 标志位指定的高亮组。
注意 showbreak 之后的制表符会以不同的宽度显示。
如果希望 'showbreak' 值出现在行号之间 (换而言之,使用行号列),可在
'cpoptions' 里加上 "n" 标志位。
窗口局部值会否决全局值。如果设置了全局值而当前窗口想要使用空串,可用
NONE:
:setlocal showbreak=NONE
'showcmd' 'sc' 'noshowcmd' 'nosc'
'showcmd' 'sc' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
在屏幕最后一行显示 (部分) 命令。如果终端速度很慢,可以考虑关闭本选项。
在可视模式下,则显示选择区域的大小,即:
- 选择一行内的若干字符时,显示字符数。如果字节数与此不同,则同时显示字
节数: "2-6" 代表 2 个字符和 6 个字节。
- 选择多于一行时,显示行数。
- 选择可视列块时,显示屏幕字符的数目: 即 {lines} 乘以 {columns}。
可通过 'showcmdloc' 选项将此消息显示在其它位置。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'showcmdloc' 'sloc'
'showcmdloc' 'sloc' 字符串 (缺省 "last")
全局
本选项用于在其它位置显示 (部分) 命令。可选值为:
last 屏幕最后一行 (缺省)。
statusline 当前窗口的状态行。
tabline 打开 'showtabline' 时,屏幕的首行 (即标签页行)。
设置本选项为 "statusline" 或 tabline" 时,意味着它们会在命令变化时随时
重绘,这可能会发生在每次按键时。
在 'statusline' 或 'tabline' 里,可用 %S 'statusline' 项目放置此文本。
'statusline' 或 'tabline' 的缺省值已经会在合适的位置显示该信息。
'showfulltag' 'sft' 'noshowfulltag' 'nosft'
'showfulltag' 'sft' 布尔型 (缺省关闭)
全局
在插入模式下,用标签文件补全单词时 (见 ins-completion ),会同时显示标
签名和查找模式 (如有) 的规范化格式作为可能的匹配项。因此,匹配到 C 函
数时,会看到包含必需参数的模板 (前提是符合编码风格)。
注意 如果 'completeopt' 包含 "longest",此功能可能表现不佳,因为搜索模
式产生的补全未必会匹配输入文本。
'showmatch' 'sm' 'noshowmatch' 'nosm'
'showmatch' 'sm' 布尔型 (缺省关闭)
全局
插入括号时,会短暂跳转到匹配的对应括号。仅在匹配项在屏幕上可见时才会进
行跳转。显示匹配的时长可用 'matchtime' 设置。
如果没有找到匹配,会响铃 (和匹配是否可见无关)。
'paste' 选项置位时会临时复位本选项。'paste' 复位时会恢复本选项。
'cpoptions' 里没有包含 'm' 标志位时,接着输入一个字符会立即将光标移回
到它应在的位置,而不是等到 'matchtime' 结束。
'guicursor' 的 "sm" 项用于指定在显示匹配项时光标的形状和闪烁效果。
'matchpairs' 选项指定用于匹配显示的字符对。'rightleft' 和 'revins' 可
用于查找反向输入的匹配。
如果希望在移动光标时高亮匹配项,另见 matchparen 插件 pi_paren.txt 。
备注: 要使用短形式,建议加强家长指导 (译者注: :-))。
'showmode' 'smd' 'noshowmode' 'nosmd'
'showmode' 'smd' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
在插入、替换和可视模式下,会在最后一行上显示模式消息。
此消息使用由 'highlight' 的 'M' 标志位指定的高亮组。
XIM 可用时,消息里还会包含 "XIM"。但这不表示 XIM 已实际激活,尤其是
在尚未设置 'imactivatekey' 时。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'showtabline' 'stal'
'showtabline' 'stal' 数值型 (缺省为 1)
全局
本选项值指定何时显示带有标签页标签的行:
0: 永远不会
1: 至少有两个标签页时才会
2: 永远会
标签页行有 GUI 和非 GUI 两种实现。
tab-page 解释标签页的更多信息。
'showtabpanel' 'stpl'
'showtabpanel' 'stpl' 数值型 (缺省为 0)
全局
{仅当编译时加入 +tabpanel 特性才有效}
本选项值指定何时显示带有标签页标签的 tabpanel :
0: 永远不会
1: 至少有两个标签页时才会
2: 永远会
tab-page 解释标签页标签的更多信息。
'sidescroll' 'ss'
'sidescroll' 'ss' 数值型 (缺省为 0)
全局
'wrap' 选项关闭且光标移出屏幕范围时,最少会水平滚动的列数。
为零时,会把光标定位在屏幕水平的正中间。在慢速终端里,可以设置为软大的
值,或者直接设为 0。而在快速终端里,则可设小一些或者直接设为 1。不适用
于 "zh" 和 "zl" 命令。
'sidescrolloff' 'siso'
'sidescrolloff' 'siso' 数值型 (缺省为 0)
全局或局部于窗口 global-local
设置 'nowrap' 时,光标左右两侧需要保留的最少屏幕列数。设置本选项为大于
零的值且 'sidescroll' 同时也为非零值时,可以保证在水平滚动中的行,总会
有一定数量的上下文可见 (除了在行首之外)。设置本选项为极大值 (如 999)
可以保持光标始终定位在窗口水平的正中间,除非在非常靠近行首的位置。
使用本选项的局部值后,可用以下两者方法之一来切换回直接使用其全局值:
setlocal sidescrolloff<
setlocal sidescrolloff=-1
注意: 'compatible' 置位时会设置本选项为 0。
示例: 可尝试与 'sidescroll' 以及 'listchars' 一起使用,参考下面的示
例,使光标不会移动到 "extends" 字符上:
:set nowrap sidescroll=1 listchars=extends:>,precedes:<
:set sidescrolloff=1
'signcolumn' 'scl'
'signcolumn' 'scl' 字符串 (缺省 "auto")
局部于窗口
{仅当编译时加入 +signs 特性才有效}
指定何时绘制标号列。合法值为:
"auto" 仅当有标号要显示时
"no" 从不
"yes" 永远
"number" 在 'number' 列中显示标号。行号列未显示时,等价于
"auto"。
'smartcase' 'scs' 'nosmartcase' 'noscs'
'smartcase' 'scs' 布尔型 (缺省关闭)
全局
搜索模式包含大写字符时,不考虑 'ignorecase' 选项。仅当键入搜索模式并且
'ignorecase' 选项打开时才会使用。用于 "/"、"?"、"n"、"N"、":g" 和 ":s"
命令和补全菜单匹配项的过滤 compl-states 。
但不用于 "*"、"#"、"gd"、标签查找等情形。要模拟 "*" 和 "#" 但应用
'smartcase' 设置,可以用 "/" 命令并从历史里回忆搜索模式,然后按回车。
注意: 'compatible' 置位时会复位本选项。
'smartindent' 'si' 'nosmartindent' 'nosi'
'smartindent' 'si' 布尔型 (缺省关闭)
局部于缓冲区
开启新行时使用智能自动缩进。适用于 C 或类似的程序,但也可用于若干其他
语言。'cindent' 提供类似的功能,且多数情况下效果更好,但要求更严格,见
C-indenting 。打开 'cindent' 或设置 'indentexpr' 时,置位本选项没有效
果。'indentexpr' 是一种更高级的替代方案。
使用 'smartindent' 时,通常也应该打开 'autoindent'。
在以下情况下,自动插入缩进:
- 在以 '{' 结束的行之后开启新行。
- 在以 'cinwords' 中定义的关键字开头的行之后开启新行。
- 在以 '}' 开始的行之前开启新行 (仅用于 "O" 命令)。
新行首个输入字符为 '}' 时,该行会使用与匹配的 '{' 行相同的缩进。
新行首个输入字符为 '#' 时,会删除该行的缩进,'#' 被放到第一列。在下一
行上恢复原有缩进。如果不想如此,可用以下映射: ":inoremap # X^H#",其中
的 ^H 用 CTRL-V CTRL-H 输入。
使用 >> 命令时,'#' 开始的行不会右移。
注意: 'compatible' 置位时会复位本选项。
'paste' 选项置位时会临时复位本选项。'paste' 复位时会恢复本选项。
'smarttab' 'sta' 'nosmarttab' 'nosta'
'smarttab' 'sta' 布尔型 (缺省关闭)
全局
打开时,如果光标位于引导空白,<Tab> 键会缩进 'shiftwidth' 个位置。否
则,<Tab> 键会按本义插入制表符。<BS> 键的效果则刚好相反。
位于引导空白时,其效果相当于将 'softtabstop' 设置为 'shiftwidth' 值。
'compatible' 置位时会复位本选项;'paste' 选项置位时会临时复位本选项。
'paste' 复位时会恢复本选项。
注意: 绝大多数情况下,'softtabstop' 是更好的选项。关于 Vim 如何使用制
表和空格,详见用户手册的 30.5 小节。
'smoothscroll' 'sms' 'nosmoothscroll' 'nosms'
'smoothscroll' 'sms' 布尔型 (缺省关闭)
局部于窗口
滚动作用于屏幕行而非文本行。'wrap' 置位时,窗口中的首行可能因回绕而导
致部分内容不可见,就像隐藏在窗口上方一样。首行开始处会显示 "<<<",它使
用 hl-NonText 高亮。
此外也可考虑在 'display' 选项里加上 "lastline",以显示窗口末行尽量多的
内容。
注意: 此功能并未完全实现,如 gj 和 gk 尚不支持平滑滚动。
'softtabstop' 'sts'
'softtabstop' 'sts' 数值型 (缺省为 0)
局部于缓冲区
创建以 'softtabstop' 指定的列数分隔的软制表位。在插入模式下,按 <Tab>
键会移动光标到下一个软制表位,而不是按本义插入制表符。<BS> 的行为则刚
好相反,退回到上一个软制表位。Vim 会插入制表和空格字符的最小混合来产生
所需的视觉效果。
此设置不影响已有制表符的显示。
选项值为零代表关闭此特性。负值代表使用 'shiftwidth' 值。如果希望 'sts'
和 'shiftwidth' 使用不同值,可以考虑置位 'smarttab'。
'paste' 选项置位时会临时设置本选项为 0。'paste' 复位时会恢复本选项。
'compatible' 置位时也会复位本选项。
'cpoptions' 里的 'L' 标志位会改变 'list' 置位时制表符的行为。另见
ins-expandtab 和用户手册 30.5 小节的详细描述。
Vim 编译时加入 +vartabs 特性时,如果 'varsofttabstop' 不是空串,会忽
略 'softtabstop' 的值。
'spell' 'nospell'
'spell' 布尔型 (缺省关闭)
局部于窗口
{仅当编译时加入 +syntax 特性才有效}
打开时,进行拼写检查。见 spell 。'spelllang' 用于指定拼写使用的语言。
'spellcapcheck' 'spc'
'spellcapcheck' 'spc' 字符串 (缺省为 "[.?!]\_[\])'" \t]\+")
局部于缓冲区
{仅当编译时加入 +syntax 特性才有效}
定位句子结束位置的模式。找到匹配文本后,检查其后的下一个单词是否以大写
字母开头。如果不是,该单词会使用 SpellCap 高亮 hl-SpellCap (除非该单
词同时包含拼写错误)。要想跳过这项检查,将本选项设置为空。
只有置位 'spell' 时才生效。
小心特殊字符的使用, option-backslash 说明如何包含空格和反斜杠。
要根据语言自动设置本选项,可见 set-spc-auto 。
'spellfile' 'spf'
'spellfile' 'spf' 字符串 (缺省为空)
局部于缓冲区
{仅当编译时加入 +syntax 特性才有效}
单词列表文件名, zg 和 zw 命令会向该文件添加单词。文件名必须以
".{encoding}.add" 结尾。路径是必需的,否则该文件将会放置在当前目录里。
路径名可包含的合法字符为: 'isfname' 里的字符、空格、逗号以及 '@'。
E765
本选项也可以是逗号分隔的文件名列表。 zg 和 zw 命令前的计数用来指定
要访问的文件名编号。这可用于分别指定个人单词列表文件和项目共享的单词列
表文件。
要添加单词时,如果本选项为空,Vim 会自动进行如下设置: 首先,使用首个可
写的 'runtimepath' 目录;如果其中还没有 "spell" 子目录,先建立该子目
录;然后,使用 'spelllang' 里的出现的首个语言名 (忽略区域部分) 作为存
放在该子目录下的文件名。
生成的 ".spl" 文件将用于拼写检查,该语言不需要在 'spelllang' 里出现。
通常同一语言的所有区域会共享同一个文件,但想加入特定区域名也是可以的。
不过,仅当 'spellfile' 设置为该区域名时,才会使用该名字。使用
'spelllang' 中项目的缺省方法则只会寻找不带区域名的文件。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'spelllang' 'spl'
'spelllang' 'spl' 字符串 (缺省为 "en")
局部于缓冲区
{仅当编译时加入 +syntax 特性才有效}
逗号分隔的单词列表名的列表。打开 'spell' 选项时,会为对应语言进行拼写
检查。例如:
set spelllang=en_us,nl,medical
意味着会识别美国英语、荷兰语和医疗用语。不能识别的单词会被高亮。
单词列表名由字母、数位、连字符或下划线组成。不能包含逗号或点号。建议使
用连字符来分隔两字母的语言名和规格说明。例如,"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 不会实际进行检查。
设置 'encoding' 时,单词列表会被重新载入。因而,建议设置完 'encoding'
后再设置 'spelllang',以防止重复载入文件。
有关查找拼写文件的方法,可见 spell-load 。
激活 spellfile.vim 插件时,如果 Vim 无法在 'runtimepath' 里找到用户
使用语言相应的 .spl,该插件会询问用户是否需要下载相应文件。
成功设置本选项后,Vim 会执行 'runtimepath' 的 "spell/LANG.vim" 文件。
其中 "LANG" 是 'spelllang' 中第一个非 ASCII 字母、数位或连字符字符之前
的值。另见 set-spc-auto 。
'spelloptions' 'spo'
'spelloptions' 'spo' 字符串 (缺省为 "")
局部于缓冲区
{仅当编译时加入 +syntax 特性才有效}
用于拼写检查的选项列表,以逗号分隔:
camel 单词使用驼峰式大小写 (CamelCased) 时,会将 "Cased" 当
作一个独立的单词进行拼写检查: 单词中每个小写字符之后的
大写字符都会指示一个新 (进行拼写检查的) 单词的开始。
'spellsuggest' 'sps'
'spellsuggest' 'sps' 字符串 (缺省为 "best")
全局
{仅当编译时加入 +syntax 特性才有效}
拼写检查使用的方法。用于 z= 命令和 spellsuggest() 函数。这是逗号分
隔的项目列表:
best 内部方法,对英语最适合。搜寻改动的方式和 "fast" 类似,
同时用到少许基于发音相近的计分机制以改进排列的顺序。
double 内部方法,使用两个不同方法并混合其结果。第一个方法是
"fast",另一个方法会计算建议单词和坏词的发音相近程度。
仅能用于可按发音折叠的语言。速度可能较慢,且结果未必更
好。
fast 内部方法,只检查简单的改动: 字符插入/删除/交换。对简单
拼写错误的检查效果不错。
{number} z= 列出的最大建议数目。不用于 spellsuggest() 。建议
数目不应多于 'lines' 值减 2。
timeout:{millisec} 限制建议搜索的时间不超过 {millisec} 毫秒。仅适用
于后面列出的复杂方法。省略时默认时间限制为 5000 (相当
于半秒)。为负值时,搜索没有时间限制。{仅当编译时加入
+reltime 特性才有效}
file:{filename} 读入文件 {filename},该文件必须包含以斜杠分隔的两列。
第一列包含坏词,第二列包含建议的好词。
例如:
theribal/terrible
用于内部方法未能在建议列表的顶部列出的常见错误。
不包含斜杠的行会被忽略,这可用于注释。
第二列单词必须正确,否则不予使用。如果该单词目前被标记
为拼写错误,可先将该单词添加到 ".add" 文件里。
此文件将用于所有语言。
expr:{expr} 计算表达式 {expr}。最好是不带参数的函数调用,见
expr-option-function 。 v:val 会包含有拼写错误的单
词。该表达式必须返回列表的列表,每个列表项包含建议和评
分两项。
例如:
[['the', 33], ['that', 44]]
设置 'verbose' 并使用 z= 时,可以看到内部方法使用的
评分。分数越小越好。
函数中,如果从 'spellsuggest' 里临时排除了 "expr:" 部
分,也可以调用 spellsuggest() 。
除非设置 'verbose' 选项为非零值,否则会安静地忽略其中
的错误。
在 "best"、"double" 或 "fast" 中,最多只能选择其中一个。其它项目则可重
复出现,顺序不限。例如:
:set sps=file:~/.vim/sugg,best,expr:MySuggest()
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'splitbelow' 'sb' 'nosplitbelow' 'nosb'
'splitbelow' 'sb' 布尔型 (缺省关闭)
全局
打开时,新垂直分割的窗口会位于当前窗口下方而非上方。 :split
'splitkeep' 'spk'
'splitkeep' 'spk' 字符串 (缺省 "cursor")
全局
本选项值决定横向分割在打开、关闭水平分割或调整大小时的滚动行为。
可选值为:
cursor 光标的相对位置保持不变。
screen 文本所在的屏幕行保持不变。
topline 窗口首行保持不变。
使用 "screen" 和 "topline" 值时,必要时会调整光标位置。这种情况下,之
前的光标位置会被加入跳转列表。对于 "screen",'wrap' 打开时无法绝对保证
不滚动。
'splitright' 'spr' 'nosplitright' 'nospr'
'splitright' 'spr' 布尔型 (缺省关闭)
全局
打开时,新水平分割的窗口会于当前窗口右侧而非左侧。 :split
'startofline' 'sol' 'nostartofline' 'nosol'
'startofline' 'sol' 布尔型 (缺省打开)
全局
打开时,下列命令会将光标移动到行首的首个非空白字符。关闭时,尽可能保持
光标列不变:
- CTRL-D 、 CTRL-U 、 CTRL-B 、 CTRL-F 、 G 、 H 、 M 、 L 、 gg
- 带行动作的 "d"、"<<"、"==" 和 ">>" ( operator-resulting-pos )
- 带计数的 "%"
- 切换缓冲区的命令 ( CTRL-^ 、 :bnext 、 :bNext 等)
- 只带单个行号的 Ex 命令,比如 ":25" 或 ":+"。
对于切换缓冲区的命令,关闭时,光标会回到该缓冲区上次编辑时的列位置。
注意: 'compatible' 置位时也会置位本选项。
'statusline' 'stl' E540 E542
'statusline' 'stl' 字符串 (缺省为空)
全局或局部于窗口 global-local
{仅当编译时加入 +statusline 特性才有效}
非空时,本选项会决定状态行的内容。另见 status-line 。
本选项包含 printf 风格的 '%' 项目,中间可以间杂普通文本。状态行项目形
如:
%-0{minwid}.{maxwid}{item}
除了 {item} 以外,所有字段都可选。要显示单个百分号,可用 "%%"。
stl-%!
当本选项以 "%!" 开始时,其后整个部分会被视作表达式来进行计算,计算结果
用作实际选项值。例如:
:set statusline=%!MyStatusLine()
表达式计算时, g:statusline_winid 变量会被设为状态行所属窗口的
window-ID 。
表达式返回值可以包含 %{} 项目,这些项目会被继续求值。
注意 计算 "%!" 表达式时,其上下文是当前窗口和当前缓冲区,而计算 %{} 项
目时,其上下文是状态行所属的窗口。
计算选项表达式时如果出错,将清空本选项以避免后续再次出错。否则屏幕更新
可能会陷入循环。计算结果里如果包含不可显示字符,显示结果将不可预知。
注意 设置本选项且 'laststatus' 为 2 时,'ruler' 的唯一效果是控制
CTRL-G 的输出。
字段 含义
- 当 minwid 大于项目长度时,左对齐项目。缺省时右对齐。
0 数值项目之前用零填充。'-' 的优先级高于本字段。
minwid 项目最小宽度,'-' 和 '0' 控制填充方式。本值不能超过 50。
maxwid 项目最大宽度。超过此宽度时,文本项目会在左侧截短,并以 '<'
代替被截短的部分。数值项目则会右移到 maxwid-2 位,后跟 '>'
和丢失的数位,类似于指数记法 (译者注: 假定 maxwid 为 4,
"abcdef" 会显示为 "<def","123456" 会显示为 "12>4")。
item 单字符代码项目,具体说明见下。
可用的状态行项目的描述见下。其中,"项目" 列中的第二个字符代表项目类型:
N 代表数值型
S 代表字符串型
F 代表标志位,具体描述见下
- 不适用
项目 含义
f S 缓冲区的文件路径,采用原始输入的形式或相对于当前目录的相对路径。
F S 缓冲区的文件完整路径。
t S 缓冲区的文件的文件名 (不含目录部分)。
m F 已修改标志位,显示文本为 "[+]";'modifiable' 关闭则为 "[-]"。
M F 已修改标志位,显示文本为 ",+" 或 ",-"。
r F 只读标志位,显示文本为 "[只读]"。
R F 只读标志位,显示文本为 ",RO"。
h F 帮助缓冲区标志位,显示文本为 "[帮助]"。
H F 帮助缓冲区标志位,显示文本为 ",HLP"。
w F 预览窗口标志位,显示文本为 "[预览]"。
W F 预览窗口标志位,显示文本为 ",PRV"。
y F 缓冲区的文件类型,显示文本形如 "[vim]"。见 'filetype'。
Y F 缓冲区的文件类型,显示文本形如 ",VIM"。见 'filetype'。
q S "[Quickfix 列表]"、"[Location 列表]" 或空。
k S "b:keymap_name" 值,或者在使用 :lmap 映射时的 'keymap': 显示文
本形如 "<keymap>"。
n N 缓冲区号。
b N 光标所在字符值。
B N 同上,但以十六进制表示。
o N 光标所在字节在文件中的字节偏移量,首字节的偏移量为 1。
助记: 从文件开头计算的偏移量 (Offset) (加上 1)
{仅当编译时加入 +byte_offset 特性才有效}
O N 同上,但以十六进制表示。
N N 打印机页号。(仅用于 'printheader' 选项。)
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()%} 返回 `"Name of current file"`
%} - {% 表达式的结束
( - 指示项目组的开始。可以用来为一组项目整体设置宽度和对齐方式。其后
必须以 %) 结束该组项目。
) - 指示项目组的结束。此项本身不能指定宽度字段。
T N 用于 'tabline': 指示标签页 N (N 取自 minwid 字段) 标签文本的开
始。在最后一个标签文本之后,用不带 N 的 %T 结束。用鼠标选择标签
页时,需要这些标签文本。
X N 用于 'tabline': 指示标签页 N 关闭标签文本的开始。不带 N 的 %X 会
结束当前关闭标签文本。例如: %3Xclose%X,用 %999X 可代表 "关闭当
前标签页" 的那个符号。用鼠标关闭标签页时需要这些标签文本。
< - 如果行过长,指示截短所在的位置。缺省是在开头。不能指定宽度字段。
= - 对齐小节之间的分割点。每个小节之间,会使用相同数量的空白分隔。使
用一个 %= 时,其后的内容会进行右对齐。使用两个 %= 时,两者中间的
内容会在其左右两侧都留有空白。此项本身不能指定宽度字段。
# - 设置高亮组。后跟高亮组名,然后以一个不带 % 的 # 结束。例如,
%#HLname# 代表使用高亮组 HLname。所有窗口的状态行都会使用此高亮
组,包括非当前窗口的状态行。
* - 设置高亮组为 User{N},其中的 {N} 取自 minwid 域,例如 %1*。用不
带 N 的 %* 或 %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" wfc 被设为实际当前窗口的 window-ID 。这些值均为字符
串类型。
模式行中设置时会在沙盘 sandbox 里计算本选项。见 sandbox-option 。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
计算本选项时,不允许修改文本或者跳到其它窗口 textlock 。
如果状态行没有及时更新 (如修改了表达式里使用的某个变量之后),可用
:redrawstatus 强制刷新。
表达式返回值完全由数位组成时,显示时会作为数值型项目处理。否则结果会被
视作标志位文本,并据此应用上面描述的规则。
要留意表达式里可能出现的错误。它们可能使 Vim 不可用!如果系统因此不再
响应,可按住 ':' 或 'Q' 以获得提示,然后退出 Vim,并用 "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...
为此,需要在 :autocmd 里相应地设置:
:let b:gzflag = 1
或:
:unlet b:gzflag
同时还需要定义以下函数:
:function VarExists(var, val)
: if exists(a:var) | return a:val | else | return '' | endif
:endfunction
'suffixes' 'su'
'suffixes' 'su' 字符串 (缺省为 ".bak,~,.o,.h,.info,.swp,.obj")
全局
指定后缀名,在通配符匹配多个文件时,带这些后缀名的文件的优先级会降低。
见 suffixes 。多个后缀间可用逗号分隔,并忽略逗号之后的空格。句号也被
看作后缀的开始。要避免一个句号或逗号被识别为分隔符,在它们之前加上反斜
杠 ( option-backslash 说明如何包含空格和反斜杠)。
要完全忽略某些文件,可见 'wildignore'。
建议使用 :set+= 和 :set-= 来从列表里加减后缀。这可以避免未来版本更
改缺省值而引发的问题。
'suffixesadd' 'sua'
'suffixesadd' 'sua' 字符串 (缺省为 "")
局部于缓冲区
逗号分隔的后缀名列表,供 gf 、 [I 等命令在搜索文件时使用。例如:
:set suffixesadd=.java
'swapfile' 'swf' 'noswapfile' 'noswf'
'swapfile' 'swf' 布尔型 (缺省打开)
局部于缓冲区
本缓冲区使用交换文件。特定缓冲区不想使用交换文件时,可以复位本选项。一
种可能原因是该缓冲区包含了即使是 root 也不应获取的机密信息。
要小心: 关闭时,所有文本都会在内存里保存:
- 不建议用于大文件。
- 无法恢复!
仅当 'updatecount' 不为零且 'swapfile' 置位时,交换文件才会存在。
复位 'swapfile' 时,当前缓冲区的交换文件会被立即删除。而置位
'swapfile' 并且 'updatecount' 非零时,会立即建立交换文件。
另见 swap-file 和 'swapsync'。
打开新缓冲区时,如需禁止创建交换文件,可用 :noswapfile 修饰符。
要指定交换文件的创建位置,可见 'directory'。
本选项和 'bufhidden' 和 'buftype' 配合使用,可指定特殊类型的缓冲区。
见 special-buffers 。
'swapsync' 'sws'
'swapsync' 'sws' 字符串 (缺省为 "fsync")
全局
本选项非空时,在写入交换文件后会同步更改到磁盘。尤其在繁忙的 unix 系统
上,这可能需要一点时间。
本选项为空时,交换文件的部分内容可能只留在内存里,尚未写回磁盘。系统崩
溃时可能造成更多数据丢失。
在 Unix 上,无须 Vim 请求,系统会时不时进行同步,所以关闭本选项的问题
并不大。而在有的系统上,交换文件完全不会被自动写入。在 Unix 系统上,设
置本选项为 "sync" 会使用 sync() 调用,而非缺省的 fsync(),在有的系统上
此方法可能效果更好。
(译者注: 目前只有上述的三个可选值: fsync、sync (仅限 Unix)、或空值)
'fsync' 选项用于同步实际文件。
'switchbuf' 'swb'
'switchbuf' 'swb' 字符串 (缺省为 "")
全局
本选项控制缓冲区间切换时的行为。
以下情形下,会检查本选项
- 跳转到错误所在缓冲区的 quickfix 命令 ( :cc 、 :cn 、 :cp 等)。
- 跳转到标签所在缓冲区的 :stag 命令。
- 打开文件的 CTRL-W_f 或 CTRL-W_F 命令。
- 跳转到缓冲区的缓冲区分割命令 (如 :sbuffer 、 :sbnext 或
:sbrewind )。
可选值为 (逗号分隔的列表):
useopen 包含时,跳转到当前标签页中首个已打开且包含指定缓冲区的
窗口 (如有)。排除时: 不检查其他窗口。
usetab 和 "useopen" 类似,但也考虑其它标签页中的窗口。
split 包含时,用 quickfix 命令显示错误时,会在加载缓冲区之
前先分割当前窗口。
排除时: 不分割,使用当前窗口 (已在快速修复窗口中时: 使
用上次使用的窗口,如果没有其他任何窗口,依然会分割)。
vsplit 和 "split" 类似,但进行垂直分割而非水平分割。
newtab 和 "split" 类似,但会打开新标签页。和 "split" 同时包含
时,本值优先。
uselast 包含时,用 quickfix 命令跳转到错误时,会跳转到上次使
用的窗口。
打开 'winfixbuf' 的窗口,目前不对其分割窗口应用 'switchbuf'。
'synmaxcol' 'smc'
'synmaxcol' 'smc' 数值型 (缺省为 3000)
局部于缓冲区
{仅当编译时加入 +syntax 特性才有效}
搜索语法项目时,搜索的最大列数。在长行里超过此列的文本不再高亮。因为语
法状态被清除。后续行也不一定能正确高亮。
对于有个别长行的 XML 文件,本选项有助于避免重画非常缓慢的问题。
设为零可取消列数限制。
'syntax' 'syn'
'syntax' 'syn' 字符串 (缺省为空)
局部于缓冲区 local-noglobal
{仅当编译时加入 +syntax 特性才有效}
设置本选项时,会载入该名字对应的语法,除非已经使用 ":syntax off" 关闭
了语法高亮。否则,本选项并不总是反映当前的语法 (b:current_syntax 变量
才是)。
对于无法自动识别语法的文件,在模式行里设置本选项最有效。用于 IDL 文件
的示例:
/* vim: set syntax=idl : */
选项值里包含句号时,它用于分隔两个文件类型名。例如:
/* vim: set syntax=c.doxygen : */
这表示先使用 "c" 语法,再附加 "doxygen" 语法。注意 第二个语法项必须可
作为附加部分载入,否则会被跳过。句号可出现多次。
要关闭当前文件的语法高亮,可用:
:set syntax=OFF
要根据当前 'filetype' 选项值打开相应的语法高亮:
:set syntax=ON
设置 'syntax' 选项的实际效果是激活以该值为参数的 Syntax 自动命令事件。
无论 'cpoptions' 里是否包含 's' 或 'S' 标志位,本选项都不会被复制到其
他缓冲区。
只能使用字母数位字符、'.'、'-' 和 '_'。
'tabclose' 'tcl'
'tabclose' 'tcl' 字符串 (缺省为 "")
全局
本选项控制标签页关闭时 (例如用 :tabclose ) 的行为。为空时,Vim 会跳转
到下一个 (右侧) 标签页。
可选值 (逗号分隔的列表):
left 包含时,跳转到前一个 (左侧) 标签页而非下一个。
uselast 包含时,跳转到上次使用的标签页 (如有)。本选项优先于其
他选项。
'tabline' 'tal'
'tabline' 'tal' 字符串 (缺省为空)
全局
非空时,本选项决定 Vim 窗口顶部标签页行的内容。否则,Vim 会使用缺省定
义的标签页行。详见 setting-tabline 。
仅当符合 'showtabline' 选项的要求且不存在 GUI 标签页行时才会显示这里的
非 GUI 标签页行。当 'guioptions' 里包含 'e' 且 GUI 支持标签页行时,会
使用 'guitablabel' 而非本选项。
本选项的格式与 'statusline' 相同,但额外支持一些项目。可在表达式项目里
使用 tabpagenr() 、 tabpagewinnr() 和 tabpagebuflist() 来决定要显
示的文本。可用 "%1T" 来指定第一个标签页的标签文本,"%2T" 指定第二个,
依此类推。可用 "%X" 项目来指定关闭标签的文本。
如果标签页行没有及时更新 (如修改了表达式里使用的某个变量之后),可用
:redrawtabline 强制刷新。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
请记住,同一时间只有一个当前标签页可见,无法跳转到其他标签页中的窗口。
'tabpagemax' 'tpm'
'tabpagemax' 'tpm' 数值型 (缺省为 10)
全局
-p 命令行参数或 ":tab all" 命令 ( :all ) 会打开的最大标签页数目。
tabpage
'tabpanel' 'tpl' g:actual_curtabpage
'tabpanel' 'tpl' 字符串 (缺省为空)
全局
非空时,本选项决定 tabpanel 的内容。其值由 printf 风格的 '%' 项目和
普通文本交替组成,格式与 'statusline' 或 'tabline' 相同。
如果标签页面板没有及时更新 (如修改了表达式里使用的某个变量之后),可用
:redrawtabpanel 强制刷新。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
本选项使用的表达式项目里可用 g:actual_curtabpage 变量,它代表当前标
签页的标签页号 (译者注: 对每个标签页分别应用本选项,其中的表达式除了
"g:actual_curtabpage" 外,还可用 "g:tabpanel_winid" 变量,代表当前标签
页的窗口号)。本选项可包含 "\n",用以强制换行:
set tabpanel=%!TabPanel()
function! TabPanel() abort
return printf("(%2d)\n %%f", g:actual_curtabpage)
endfunction
结果是:
+-----------+---------------------------------
|(1) |
| ~/aaa.txt|
|(2) |
| ~/.vimrc |
| |
| |
| |
注意: "\n" 的用法是实验性功能,将来可能会改变;也许会用某个 %-原代替。
'tabpanelopt' 'tplo'
'tabpanelopt' 'tplo' 字符串 (缺省为 "")
全局
用于 tabpanel 的可选设置,包含以下以逗号分隔的项目。
align:{text} 指定标签页面板的位置。目前支持的位置有:
left 左边
right 右边
(缺省 "left")
columns:{n} 标签页面板的列宽。
如果此值为零或小于 (译者注: 原文如此,应为大
于) 'columns',标签页面板不会显示。
(缺省 20)
vert 打开时,标签页面板使用垂直分割符。使用的垂直分
割符来自 'fillchars' 里的 "tpl_vert"。
(缺省关闭)
示例:
:set tabpanelopt=columns:16,align:right
:set tabpanelopt=
:set tabpanelopt=vert,align:right
:set tabpanelopt=columns:16
'tabstop' 'ts'
'tabstop' 'ts' 数值型 (缺省为 8)
局部于缓冲区
定义用于显示水平制表符 (ASCII 9) 的列数;水平制表总是会前进到下一个制
表位。
此值最小是 1,最大是 9999。
Vim 编译时加入 +vartabs 特性且设置了 'vartabstop' 时,忽略本选项。
除非有充分原因,应保持原值 8 不变 (见用户手册 30.5 )。
'tagbsearch' 'tbs' 'notagbsearch' 'notbs'
'tagbsearch' 'tbs' 布尔型 (缺省打开)
全局
查找标签时 (如 :ta 命令),Vim 可以选择在标签文件里使用二分法查找或者
线性查找。二分法标签查找会快得 多 ,但如果标签文件没有进行适当排序,线
性查找会找到更多的标签。
Vim 通常假设用户的标签文件已经排序,或者提供了该文件并未排序的明确指
示。只有不符合这些情况,才需要关闭本选项。
打开时,先在标签文件里使用二分法查找。在特定场合下,Vim 会为特定文件使
用线性查找,或者使用线性查找来重试所有文件。关闭时,只使用线性查找。
Vim 发现文件开头有指示该文件未排序的行时,对该文件总是使用线性查找:
!_TAG_FILE_SORTED 0 /一些注释/
['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 选项来实现这一目的。注意
要使本功能正常工作,大小写必须统一折叠为大写字母。
标签查找缺省是大小写敏感的。在以下情况下,
- 'tagcase' 为 "followic" 并且 'ignorecase' 置位,或
- 'tagcase' 为 "ignore",或
- 'tagcase' 为 "followscs" 并且 'smartcase' 置位,或
- 'tagcase' 为 "smart" 并且搜索模式只包含小写字符
会忽略大小写。
本选项关闭时,如果完整匹配存在,标签查找会变慢,反之,如果完整匹配不存
在,标签查找会更快。仅当本选项关闭时,才能找到未排序标签文件里的标签。
标签文件未经排序,或者排序方法不正确 (不按照 ASCII 字节值排序) 时,本
选项必须关闭,或者至少在标签文件里应包含上面给出的指示行。
本选项不影响查找所有匹配标签的命令 (例如,命令行补全和 :help )。
'tagcase' 'tc'
'tagcase' 'tc' 字符串 (缺省为 "followic")
全局或局部于缓冲区 global-local
本选项指定标签文件查找标签时如何处理大小写:
followic 依照 'ignorecase' 选项
followscs 依照 'smartcase' 和 'ignorecase' 选项
ignore 忽略大小写
match 匹配大小写
smart 除非使用了至少一个大写字母,否则忽略大小写
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'tagfunc' 'tfu'
'tagfunc' 'tfu' 字符串 (缺省: 空)
局部于缓冲区
{仅当编译时加入 +eval 特性才有效}
本选项指定用于执行标签搜索 (包括 taglist() ) 的函数。
此函数接受标签模式作为参数,并应返回匹配标签的列表。 tag-function 说
明如何编写此函数并给出一例。此值可以是函数名、 lambda 或 Funcref 。
详见 option-value-function 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'taglength' 'tl'
'taglength' 'tl' 数值型 (缺省为 0)
全局
非零时,指定每个标签的有效字符数上限。
'tagrelative' 'tr' 'notagrelative' 'notr'
'tagrelative' 'tr' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
打开时,如果使用其他目录下的标签文件,该标签文件里的文件名会相对于标签
文件所在的目录。否则,文件名会相对于 Vim 的当前目录。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'tags' 'tag' E433
'tags' 'tag' 字符串 (缺省值:
编译时加入 +emacs_tags 特性:
"./tags,./TAGS,tags,TAGS"
其他: "./tags,tags")
全局或局部于缓冲区 global-local
标签命令使用的文件名列表,以空格或逗号分隔。要在文件名里包含空格或逗
号,在它们之前加上反斜杠 ( option-backslash 说明如何包含空格/逗号和反
斜杠)。
文件名以 "./" 开始时,如果 'cpoptions' 里未包含 'd' 标志位,'.' 会被替
换为当前文件的所在路径,否则使用当前目录。环境变量被扩展 :set_env 。
另见 tags-option 。
本选项可用 "*"、"**" 和其它通配符在目录树下搜索标签文件。见
file-searching 。例如,"/lib/**/tags" 会找到 "/lib" 下面所有名为
"tags" 的文件。但文件名本身会按原样使用,不能包含通配符。例如
"/lib/**/tags?" 会找到名为 "tags?" 的文件。
要获取实际使用的所有标签文件名列表,可用 tagfiles() 函数。
如果 Vim 编译时加入 +emacs_tags 特性,Vim 可识别 Emacs 风格的标签文
件并自动处理。缺省值此时变成 "./tags,./TAGS,tags,TAGS",除非系统对文件
名大小写不敏感 (MS-Windows)。 emacs-tags
建议使用 :set+= 和 :set-= 来从列表里加减文件名。这可以避免未来版本
使用其它缺省值出现的问题。
'tagstack' 'tgst' 'notagstack' 'notgst'
'tagstack' 'tgst' 布尔型 (缺省打开)
全局
打开时,正常使用 tagstack 。关闭时,带参数的 :tag 或 :tselect 命
令不会把标签推入标签栈中。后续不带参数的 :tag 、 :pop 命令或者其他使
用标签栈的命令则会使用未经改动的标签栈,不过仍会改变活动项目的指针。
在映射里使用 :tag 命令但不希望改变标签栈时,可以复位本选项。
'tcldll'
'tcldll' 字符串 (缺省取决于编译设置)
全局
{仅当编译时加入 +tcl/dyn 特性才有效}
指定 Tcl 共享库的名字。缺省是编译时指定的 DYNAMIC_TCL_DLL。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'term' E529 E530 E531
'term' 字符串 (缺省为 $TERM,如果无法使用该值:
GUI: "builtin_gui"
Amiga: "amiga"
Haiku: "xterm"
Mac: "mac-ansi"
Unix: "ansi"
VMS: "ansi"
Win 32: "win32")
全局
终端的名字。用于选择相应的终端控制字符。环境变量被扩展 :set_env 。
例如:
:set term=$TERM
见 termcap 。
'termbidi' 'tbidi'
'notermbidi' 'notbidi'
'termbidi' 'tbidi' 布尔型 (缺省关闭,"mlterm" 打开)
全局
{仅当编译时加入 +arabic 特性才有效}
双向文本显示 (根据 Unicode 的定义) 以及某些语言 (如阿拉伯语) 所需的字
型重整由终端负责。
置位本选项意味着置位 'arabic' 时不会置位 'rightleft','arabicshape' 值
也被忽略。注意 置位本选项时会立即忽略 'arabicshape',但 'rightleft' 不
会自动进行修改。
GUI 启动时会复位本选项。
详见 arabic.txt 。
'termencoding' 'tenc'
'termencoding' 'tenc' 字符串 (缺省为 "";GTK+ GUI: "utf-8")
全局
指定终端使用的,用于键盘输入和显示识别的字符编码。对于 GUI,本选项只用
于指定键盘输入编码 (显示由 'encoding' 控制)。
E617 E950
注意: 不适用于 GTK+ GUI。在该 GUI 成功初始化后,本选项会被强制设为
"utf-8"。设为其他值会失败且报错。
Win32 GUI 和控制台版本不使用本选项,因为 Win32 系统总是以 Unicode 字符
传递输入。
为空时,会使用和 'encoding' 选项相同的编码值。这是最常见的情况。
'termencoding' 和 'encoding' 的组合并非全都合法。见 encoding-table 。
本选项设置的值必须能被内部转换机制或 iconv() 支持。对于不支持的值,不
进行转换,非 ASCII 字符可能因此无法正常处理。
示例: locale 设置使用 euc-jp (日本语),但需要编辑 UTF-8 文件:
:let &termencoding = &encoding
:set encoding=utf-8
系统不提供 UTF-8 locale 支持时,需要这样处理。
'termguicolors' 'tgc' 'notermguicolors' 'notgc' E954
'termguicolors' 'tgc' 布尔型 (缺省关闭,除非 Vim 检测到在有相应能力的终端上
运行)
全局
{仅当编译时加入 +termguicolors 特性才有效}
打开时,在终端上会使用 highlight-guifg 和 highlight-guibg 属性 (从
而可以使用 24-位彩色)。
需要 ISO-8613-3 兼容终端。如果置位本选项无效 (产生无色的 UI),请参考
xterm-true-color 。
Win32 控制台需要 Windows 10 1703 (Creators Update) 或更新的版本。要确
定是否有此支持:
if has('vcon')
这需要 Vim 编译时带上 +vtp 特性,另见 win32-term-colors 。
注意 前景色和背景色以外的属性仍使用 "cterm" 属性,而非 "gui" 属性。
使用 Windows 终端上的 Vim 时,Windows 终端使用的背景通常使用 Vim 背景
色填充。置位 'termguicolors' 并设置 Normal 高亮组的 guibg 为 NONE 会使
终端背景透明:
:hi Normal guibg=NONE
注意: 'compatible' 置位时会复位本选项。
'termwinkey' 'twk'
'termwinkey' 'twk' 字符串 (缺省 "")
局部于窗口
终端窗口中,引导 CTRL-W 系列命令的键。其它键会直接发送给窗口中运行中的
作业。
该键可以用单个字符、 key-notation (如 <Up>、<C-F>) 或插入记号加字母
(如 ^F 代表 CTRL-F) 等形式指定。例如:
:set twk=X
:set twk=^I
:set twk=<C-L>
此字符串可有多个字节,但必须对应单个键击。
未设置时默认使用 CTRL-W,此时 CTRL-W : 可切换到命令行。而如果本选项设
为 CTRL-L,则 CTRL-L : 用于切换到命令行。
'termwinscroll' 'twsl'
'termwinscroll' 'twsl' 数值型 (缺省 10000)
局部于缓冲区
{仅当编译时加入 +terminal 特性才有效}
保存的回滚行数。超过此限制后,会删除保存回滚行的前 10%。这只是为了减少
内存开销。见 Terminal-Normal 。
也用作向终端一次性写入文本的限制,按本徝乘以列数再乘以 3 (每单元格平均
字节数) 计算。
'termwinsize' 'tws'
'termwinsize' 'tws' 字符串 (缺省 "")
局部于窗口
terminal 窗口打开时使用的大小。格式为:
{rows}x{columns} 或 {rows}*{columns}。
- 为空值时,终端使用窗口的大小。
- 用 "x" 格式 (如 "24x80") 时,终端大小不随窗口大小调整。窗口过小会导
致只有左上部分被显示。
- 用 "*" 格式 (如 "10*50") 时,终端大小会随着窗口大小调整,但不会小于
指定行数和/或列数。
- 行数为零时,使用窗口高度。
- 列数为零时,使用窗口宽度。
- "0x0" 或 "0*0" 等同于空值。
- term_start() 的 "term_rows" 和 "term_cols" 项目会覆盖本选项。
示例:
"30x0" 使用 30 行和当前窗口宽度。
"20*0" 使用至少 20 行和当前窗口宽度。
"0*40" 使用当前窗口高度和至少 40 列。
注意 终端窗口中运行的命令也可能改变终端大小。Vim 窗口会在可能时调整自
身以匹配新的大小。
'termwintype' 'twt'
'termwintype' 'twt' 字符串 (缺省 "")
全局
{仅当 MS-Windows 上编译时加入 +terminal 特性才有效}
指定打开终端窗口时使用的虚拟控制台 (pty)。
可选值为:
"" ConPTY 稳定时使用,否则使用 winpty
"winpty" 强制使用 winpty,如果不支持则失败
"conpty" 强制使用 ConPTY ,如果不支持则失败
ConPTY 的支持取决于系统。Windows 10 October 2018 更新版是首个支持
ConPTY 的版本,但还不够稳定。后续版本可能更稳定。winpty 需要单独安装。
如果两者都不可用,则无法打开终端窗口。
'terse' 'noterse'
'terse' 布尔型 (缺省关闭)
全局
打开时: 在 'shortmess' 选项里加入 's' 标志位 (这样在搜索到文件首尾并折
返时会显示提示消息)。关闭时: 从 'shortmess' 选项里移除 's' 标志位。
'textauto' 'ta' 'notextauto' 'nota'
'textauto' 'ta' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
本选项已废弃。使用 'fileformats' 代替。
为了后向兼容,打开 'textauto' 时,'fileformats' 会被设为当前系统的缺省
值。关闭 'textauto' 时,'fileformats' 会被清空。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'textmode' 'tx' 'notextmode' 'notx'
'textmode' 'tx' 布尔型 (Win32: 缺省打开,
其它: 缺省关闭)
局部于缓冲区
本选项已废弃。使用 'fileformat' 代替。
为了后向兼容,打开 'textmode' 时,'fileformat' 会被设为 "dos"。关闭
'textmode' 时,'fileformat' 会被设为 "unix"。
'textwidth' 'tw'
'textwidth' 'tw' 数值型 (缺省为 0)
局部于缓冲区
插入文本的最大宽度。更长的行会在空白之后断开,以确保不会超出此宽度。设
为零可关闭此功能。
'paste' 选项置位时会临时设置本选项为 0。'paste' 复位时会恢复本选项。
本选项为零时,可改用 'wrapmargin' 控制文本宽度。另见 'formatoptions'
和 ins-textwidth 。
'formatexpr' 设置后,将由其负责断行。
注意: 'compatible' 置位时会设置本选项为 0。
'thesaurus' 'tsr'
'thesaurus' 'tsr' 字符串 (缺省为 "")
全局或局部于缓冲区 global-local
用于同义词补全命令 i_CTRL-X_CTRL-T 单词查找的文件名列表,以逗号分
隔。见 compl-thesaurus 。
设置 'thesaurusfunc' 时 (无论是缓冲区局部还是全局的),不使用本选项。
要在文件名里包含逗号,在它之前加上反斜杠。忽略逗号之后的空格,其它情况
下空格视为文件的一部分。 option-backslash 说明如何使用反斜杠。
建议使用 :set+= 和 :set-= 来从列表里加减目录。这可以避免未来版本更
改缺省值而引发的问题。
环境变量被扩展 :set_env 。
为了安全原因,本选项里不能使用反引号。
'thesaurusfunc' 'tsrfu'
'thesaurusfunc' 'tsrfu' 字符串 (缺省: 空)
全局或局部于缓冲区 global-local
{仅当编译时加入 +eval 特性才有效}
用于同义词补全 i_CTRL-X_CTRL-T 的函数。见 compl-thesaurusfunc 。此
值可以是函数名、 lambda 或 Funcref 。详见 option-value-function 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'tildeop' 'top' 'notildeop' 'notop'
'tildeop' 'top' 布尔型 (缺省关闭)
全局
打开时: 波浪符命令 ~ 以操作符方式工作 (后跟动作),而非作用于单字符的
命令。
注意: 'compatible' 置位时会复位本选项。
'timeout' 'to' 'notimeout' 'noto'
'timeout' 'to' 布尔型 (缺省打开)
全局
'ttimeout' 'nottimeout'
'ttimeout' 布尔型 (缺省关闭, defaults.vim 里置位)
全局
收到部分映射键序列或键码时,其行为由这两个选项共同决定:
'timeout' 'ttimeout' 动作
关闭 关闭 不会超时
打开 打开或关闭 为映射和键码打开超时
关闭 打开 为键码打开超时
两个选项都关闭时,Vim 会等待直到收到完整的映射或键序列,或收到的字符已
可确定不再构成任何映射或键序列为止。例如: 当存在 "vl" 映射且收到 'v'
时,需等待下一个字符以确认是否匹配。当至少一个选项打开时,Vim 会为下个
字符等待一秒。如果超时,已经收到的字符会被解释为单个字符。等待时间由
'timeoutlen' 选项控制。
在慢速终端或高负载系统中,超时可能导致光标键操作异常。两个选项都关闭
时,如果有 <Esc> 开头的键码,Vim 在输入 <Esc> 后会无限等待。要输入
<Esc> 本身须按两次。如果确信键码总可正常工作,但又希望映射键序列可以一
直等待而不会在一秒超时,可打开 'ttimeout' 而同时关闭 'timeout'。
注意: 'compatible' 置位时会复位 'ttimeout'。
'timeoutlen' 'tm'
'timeoutlen' 'tm' 数值型 (缺省为 1000)
全局
'ttimeoutlen' 'ttm'
'ttimeoutlen' 'ttm' 数值型 (缺省为 -1, defaults.vim 里设为 100)
全局
等待键码或者映射的键序列完成的时间,以毫秒为单位。也用于 CTRL-\ CTRL-N
和 CTRL-\ CTRL-G 命令的一部分已经输入的场合 (译者注: 例如 "f<C-\>"。
下一个字符如果是 CTRL-N 或 CTRL-G,则中断 f 命令并进入普通模式,如果
是其他字符或者等待超时,正常完成 f 命令且不消耗下一个字符)。
通常只使用 'timeoutlen',而 'ttimeoutlen' 设为 -1 就可以。如果希望为键
码使用不同的超时值,可将 'ttimeoutlen' 设为非负数。
ttimeoutlen 映射延迟 键码延迟
< 0 'timeoutlen' 'timeoutlen'
>= 0 'timeoutlen' 'ttimeoutlen'
仅当 'timeout' 和 'ttimeout' 选项要求时,才打开超时。一例可用的设置
:set timeout timeoutlen=3000 ttimeoutlen=100
(映射超时为三秒,键码超时为十分之一秒)。
'title' 'notitle'
'title' 布尔型 (缺省关闭,标题能恢复时打开)
全局
打开时,窗口标题会被设为 'titlestring' 值 (如果非空),否则,标题缺省被
设为:
filename [+=-] (path) - VIM
其中:
filename 编辑中的文件名 (不含路径部分)
- 指示文件不能修改,'ma' 关闭
+ 指示文件已修改
= 指示文件只读
=+ 指示文件只读并且已修改
(path) 编辑中的文件的路径部分
- VIM 服务器名 v:servername ,默认为 "VIM"
仅在支持设置窗口标题的终端 (目前包括 Amiga 控制台、Win32 控制台、所有
GUI 版本,以及 't_ts' 选项非空的终端 - 缺省使用的内建 termcap 提供
't_ts' 的终端有 Unix xterm 和 iris-ansi) 上可用。
X11
Vim 编译时定义 HAVE_X11 时,将尝试恢复原始窗口标题。在 :version 的输
出中,HAVE_X11 有定义时会显示 "+X11",否则显示 "-X11"。这也适用于图标
文本名 'icon'。
不过: Vim 带 -X 参数启动时,标题无法恢复 (除非使用 GUI 模式)。
如果标题无法恢复,它会被设为 'titleold' 的值。这种情况下,需由用户在
Vim 之外通过其他方法恢复原始标题。
在远程机器上使用 xterm 时,可用以下命令:
rsh machine_name xterm -display $DISPLAY & (或者)
ssh -X machine_name xterm &
这样,WINDOWID 环境变量就可以从 xterm 正确继承,退出 Vim 后窗口标题也
会被正确恢复。
'titlelen'
'titlelen' 数值型 (缺省为 85)
全局
用于指定窗口标题长度占用 'columns' 的百分比。标题超出此值时,只显示路
径的末尾部分,并在路径名前显示 '<' 字符,以指示路径被截短。使用百分比
使窗口标题长度随着窗口宽度自动调整。但这并不完美,因为实际的字符数也取
决于使用的字体还有标题栏的其它部分。
本选项为零时,会使用完整路径。否则,可用值为百分之 1 到 30000。
本选项也适用于 'titlestring' 选项设置的标题。
'titleold'
'titleold' 字符串 (缺省为 "Thanks for flying Vim")
全局
退出 Vim 时,如果无法自动恢复原始标题,会把窗口标题设为本选项值。仅在
'title' 打开或 'titlestring' 非空时生效。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'titlestring'
'titlestring' 字符串 (缺省为 "")
全局
本选项非空时,用于设置窗口标题。仅在 'title' 选项打开时生效。
仅在支持设置窗口标题的终端 (目前包括 Amiga 控制台、Win32 控制台、所有
GUI 版本,以及 't_ts' 选项非空的终端) 上可用。
Vim 编译时定义 HAVE_X11 时,将尝试恢复原始窗口标题。见 X11 。
本选项包含 printf 风格的 '%' 项目时,使用与 'statusline' 相同的格式并
进行展开。如果其中包含非法的 '%' 格式,本选项按原值使用,设置本选项时
不会报错或警告。
'modelineexpr' 关闭时,不能在模式行中设置本选项。
例如:
:auto BufEnter * let &titlestring = hostname() .. "/" .. expand("%:p")
:set title titlestring=%<%F%=%l/%L-%P titlelen=70
此 'titlelen' 值用来在可用空间的中间或右侧对齐项目。
有些用户偏好将文件名置于标题前面:
:set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)
注意 "%{ }" 的用法,该表达式用于获取不含文件名的文件路径部分。"%( %)"
构造用于在必要时才添加分隔的空格。
注意: 本选项中使用特殊字符 (如 CR 或 NL 字符) 可能导致显示混乱。
{仅当编译时加入 +statusline 特性才有效}
'toolbar' 'tb'
'toolbar' 'tb' 字符串 (缺省为 "icons,tooltips")
全局
{仅适用于 +GUI_GTK 、 +GUI_Motif 和 +GUI_Photon }
本选项的内容用于控制工具栏的各项设置。可选值为:
icons 工具栏按钮使用图标显示。
text 工具栏按钮使用文字显示。
horiz 水平排放工具栏按钮的图标和文本。
{仅适用于 GTK+ 2 GUI}
tooltips 激活工具栏按钮的工具提示。
工具提示是指鼠标指针在工具栏按钮上停留短暂时间后弹出的帮助文本。
如果希望工具栏同时显示图标和文本,可用:
:set tb=icons,text
Motif 不能同时显示图标和文本。如果同时请求两者,只会显示图标。
本选项如果全为无效值或为空,会被忽略。如果要关闭工具栏,可设置
'guioptions' 选项。例如:
:set guioptions-=T
另见 gui-toolbar 。
'toolbariconsize' 'tbis'
'toolbariconsize' 'tbis' 字符串 (缺省为 "small")
全局
{仅用于 GTK+ GUI}
控制工具栏图标的大小。可选值为:
tiny 使用微小的工具栏图标。
small 使用小型的工具栏图标 (缺省)。
medium 使用中等大小的工具栏图标。
large 使用大型的工具栏图标。
huge 使用更大型的工具栏图标。
giant 使用巨大的工具栏图标。
各种规格的图标的精确像素大小由当前主题决定。常见的图标大小包括
giant=48x48、huge=32x32、large=24x24、medium=24x24、small=20x20 和
tiny=16x16。
为空时,使用用户偏好或当前主题设定的全局缺省大小。
'ttybuiltin' 'tbi' 'nottybuiltin' 'notbi'
'ttybuiltin' 'tbi' 布尔型 (缺省打开)
全局
打开时,优先考虑内建 termcap,然后再搜索外部 termcap。
关闭时,优先考虑外部 termcap,然后再搜索内建 termcap。
更改本选项后,必须重新设置 'term' 选项才能使更改生效。例如:
:set notbi term=$TERM
另见 termcap 。
理据: 本选项的缺省值为 "打开",因为内建的 termcap 项目通常质量更高 (许
多系统包含的 xterm termcap 项目都存在缺陷...)。
'ttyfast' 'tf' 'nottyfast' 'notf'
'ttyfast' 'tf' 布尔型 (缺省打开)
全局
表示正在使用快速终端连接。重绘时可以一次向终端发送多个字符,而不使用插
入/删除行命令。在存在多个窗口而终端不支持区域滚动的情况下,本选项有助
于提升重绘的平滑度。
同时在回绕行的每个屏幕行行尾写入额外字符。以方便在 xterm 和其它终端中
使用鼠标进行复制/粘贴。
本选项过去缺省仅为部分终端打开,但如今大多数终端性能已足够快,所以现在
缺省已全部打开。如果存在慢速连接 (如在特定机器上),可选择性关闭本选项:
if hostname() =~ 'faraway'
set nottyfast
endif
'ttymouse' 'ttym'
'ttymouse' 'ttym' 字符串 (缺省取决于 'term')
全局
{仅适用于 Unix 和 VMS,不适用于 GUI;仅当编译时加入
+mouse 特性才有效}
指定鼠标代码能够识别的终端类型名。目前有以下可选值:
xterm-mouse
xterm xterm 的鼠标处理方式。鼠标生成 "<Esc>[Mscr" 键码,其中
"scr" 实际为以下三个字节:
"s" = 按钮状态
"c" = 列号加 33
"r" = 行号加 33
因此,只支持最多 223 列!解决方法可见 "dec"、"urxvt"
和 "sgr"。
xterm2 和 "xterm" 类似,但鼠标拖动时,xterm 会报告鼠标位置。
这样更快也更准确。xterm 必须是补丁号 88 / XFree
3.3.3 或更高版本。Vim 的自动识别机制见下述。
netterm-mouse
netterm NetTerm 的鼠标处理方式。鼠标左键点击生成
"<Esc>}r,c<CR>",其中 "r,c" 是代表行与列的两个十进制
数。不支持其它鼠标事件。
dec-mouse
dec DEC 终端的鼠标处理方式。鼠标生成以 "<Esc>[" 开始的相当
复杂的转义序列。Xterm 在 configure 时如果带上参数
"--enable-dec-locator",也可支持此方式。
jsbterm-mouse
jsbterm JSB 终端的鼠标处理方式。
pterm-mouse
pterm QNX 终端的鼠标处理方式。
urxvt-mouse
urxvt urxvt (rxvt-unicode) 终端的鼠标处理方式。
鼠标功能仅在终端支持该编码风格时可用,但不像 "xterm"
或 "xterm2" 那样,此方式没有 223 列的宽度限制。
sgr-mouse
sgr 用于生成 SGR 风格鼠标报告的终端的鼠标处理方式。鼠标在
超过 223 列时也能正常工作。与 "xterm2" 后向兼容,因为
它也能解码 "xterm2" 风格的鼠标代码。
鼠标处理的支持要求编译时打开 +mouse_xterm +mouse_dec
+mouse_netterm +mouse_jsbterm +mouse_urxvt +mouse_sgr 之一。
总能识别 "xterm"(2)。如果编译时打开,也总能识别 NetTerm 鼠标代码。如果
编译时打开且本选项不为 "xterm"、"xterm2"、"urxvt" 或 "sgr",则能识别
DEC 终端的鼠标代码 (这是因为 dec 鼠标代码和它们有冲突)。
'term' 选项值以 "xterm"、"mlterm"、"screen"、"tmux"、"st" (只接受完整
匹配)、"st-" 或 "stterm" 开始、并且本选项还未设置过时,会自动将本选项
设为 "xterm"。
terminfo/termcap 项目 "XM" 存在且其首个数值是 "1006" 时,会自动将本选
项设为 "sgr"。这适用于众多现代的终端。
此外,如果编译时加入 +termresponse 特性并将 t_RV 设为请求 xterm 版
本号的转义序列,会进行更加智能的检测,见下。
如果报告的 xterm 版本是在 95 到 276 之间,本选项会被设为 "xterm2"。如
果 Vim 检测到使用的终端为 Mac Terminal.app、iTerm2 或 mintty,并且 (译
者注: 原文如此,应为或) 报告的 xterm 版本是 277 或更高,本选项会被设为
"sgr"。
如果不想自动设置 "xterm2" 或 "sgr" 值,可把 t_RV 设为空串:
:set t_RV=
'ttyscroll' 'tsl'
'ttyscroll' 'tsl' 数值型 (缺省为 999)
全局
屏幕滚动的最大行数。超过则重绘窗口。对于滚动很慢但刷新不慢的终端,可将
本选项设为较小的值 (如 3) 以加快显示速度。
'ttytype' 'tty'
'ttytype' 'tty' 字符串 (缺省取决于 $TERM)
全局
'term' 的别名,见上。
环境变量被扩展 :set_env 。
'undodir' 'udir'
'undodir' 'udir' 字符串 (缺省 ".")
全局
{仅当编译时加入 +persistent_undo 特性才有效}
用于撤销文件的目录名列表,以逗号分隔。
所用格式的详见 'backupdir'。
"." 代表文件所在的目录。此时,"file.txt" 对应的撤销文件名会是
".file.txt.un~"。
使用其他目录时,撤销文件名会是被编辑文件的完整路径,但其中的路径分隔符
会被替换为 "%"。
写入时,使用本值里首个存在的目录。因为 "." 总存在,"." 之后的目录不再
予以考虑。
读取时,在本值所有目录里寻找撤销文件。使用首个找到的撤销文件。如果该文
件不可读,会报错且不再继续查找。
见 undo-persistence 。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'undofile' 'noundofile' 'udf' 'noudf'
'undofile' 'udf' 布尔型 (缺省关闭)
局部于缓冲区
{仅当编译时加入 +persistent_undo 特性才有效}
打开时,Vim 在把缓冲区写回文件时会自动将撤销历史保存到撤销文件。读取文
件到缓冲区时,会自动恢复撤销历史。
'undodir' 指定撤销文件的保存目录。
撤销功能详见 undo-persistence 。
'undoreload' 导致重载前保存缓冲区以便撤销时,不读入撤销文件。
关闭本选项时,撤销文件并 不会 被删除。
注意: 'compatible' 置位时会复位本选项。
'undolevels' 'ul'
'undolevels' 'ul' 数值型 (缺省为 100,Unix、VMS 和 Win32 为 1000)
全局或局部于缓冲区 global-local
可以撤销的最大更改次数。因为撤销信息在内存里保存,更大的数值会消耗更多
内存。不过,单个更改就有可能占用巨量内存。
设为 0 时使用 Vi 兼容行为: 一层撤销,而 "u" 可以撤销自身:
set ul=0
在 'cpoptions' 里加入 'u' 标志位也可指定 Vi 兼容行为,同时还可以使用
CTRL-R 来重做被撤销的更改。
另见 undo-two-ways 。
设为 -1 则会完全关闭撤销功能。可针对当前缓冲区单独应用:
setlocal ul=-1
如果单个更改导致内存溢出,这会有帮助。
使用全局值时,局部值会被设为特殊值 -123456。
另见 clear-undo 。
'undoreload' 'ur'
'undoreload' 'ur' 数值型 (缺省 10000)
全局
重载缓冲区时,保存整个缓冲区以便撤销。这适用于 ":e!" 命令以及缓冲区文
件在 Vim 之外被修改的情况。 FileChangedShell
仅当本选项值为负或不少于文件总行数时,才会进行保存。
设置本选项为零会关闭用于重载的撤销。
重载前保存缓冲区以便撤销时,不读入撤销文件。
注意 这会导致整个缓冲区被保存到内存。如果因此内存溢出,可设置本选项为
较小的值。
'updatecount' 'uc'
'updatecount' 'uc' 数值型 (缺省: 200)
全局
输入指定数量的字符后,将交换文件写入磁盘。为零时,连交换文件都不会创建
(见灾难恢复的相关章节 crash-recovery )。以 "-n" 选项启动 Vim 时,会将
本选项设为零,见 startup 。以只读模式编辑时,本选项被初始化为 10000。
'swapfile' 选项可为每个缓冲区单独关闭交换文件。
'updatecount' 从零改为非零时,所有已置位 'swapfile' 的缓冲区会创建交换
文件。反之,将 'updatecount' 改为零时,已有的交换文件不会被删除。
另见 'swapsync'。
对于 'buftype' 为 "nofile" 或 "nowrite" 的缓冲区,本选项没有作用。
'updatetime' 'ut'
'updatetime' 'ut' 数值型 (缺省为 4000)
全局
在指定时间 (以毫秒为单位) 内没有任何输入时,将交换文件写入磁盘 (见
crash-recovery )。也用于 CursorHold 自动命令事件。
'varsofttabstop' 'vsts'
'varsofttabstop' 'vsts' 字符串 (缺省 "")
局部于缓冲区
{仅当编译时加入 +vartabs 特性才有效}
定义可变宽度的软制表位。该值是以逗号分隔的列宽列表。每个宽度值定义下一
个软制表位前所需列数。列表的末项值会无限重复,用于之后所有的软制表位。
例如,编辑汇编语言文件时,语句从第 9 列开始,而注释从第 41 列开始,可
以这样设置:
:set varsofttabstop=8,32,8
软制表位会分别出现在第 8 列,第 40 (8 + 32) 列,其后每相隔 8 列设置一
个软制表位。
注意 此设置优先于 'softtabstop'。
关于 Vim 如何使用制表和空格,详见用户手册的 30.5 小节。
'vartabstop' 'vts'
'vartabstop' 'vts' 字符串 (缺省 "")
局部于缓冲区
{仅当编译时加入 +vartabs 特性才有效}
定义可变宽度的制表位。该值是以逗号分隔的列宽列表。每个宽度值定义下一个
制表位前所需列数。列表的末项值会无限重复,用于之后所有的制表位。
例如:
:set vartabstop=4,8
首个制表位会在行首起算的第 4 列,其后每相隔 8 列设置一个制表位。
注意: 此设置优先于 'tabstop'。
UNIX 上,建议保持制表位为缺省的 8 列。请考虑使用 'varsofttabstop' 而非
本选项。
关于 Vim 如何使用制表和空格,详见用户手册的 30.5 小节。
'verbose' 'vbs'
'verbose' 'vbs' 数值型 (缺省为 0)
全局
大于零时,Vim 会显示当前操作的相关消息。
目前包括:
>= 1 读写 viminfo 文件时
>= 2 文件被 ":source" 时
>= 3 通道命令出错或处理拼写相关文件时
>= 4 执行外壳命令时
>= 5 每次搜索标签文件和头文件时
>= 6 缓冲区删除后,自动删除其相关的自动命令时
>= 8 为某个文件执行匹配的自动命令组时
>= 9 每个自动命令被执行时
>= 11 查找路径中的项目时
>= 12 每个函数被执行时
>= 13 异常被抛出、捕获、结束处理或者放弃时
>= 14 有项目 (异常,控制流语句) 在 ":finally" 子句里被暂停或恢复时
>= 15 每个来自脚本的 Ex 命令被执行时 (截短到 200 个字符)
>= 16 每个 Ex 命令被执行时
用 "-V" 参数也可以设置本选项。见 -V 。
:verbose 命令也可以设置本选项。
设置 'verbosefile' 选项时,不再显示 verbose 消息。
'verbosefile' 'vfile'
'verbosefile' 'vfile' 字符串 (缺省为空)
全局
非空时,指定文件名,所有消息会写入该文件。文件已存在时,消息会追加到文
件末尾。
Vim 退出或 'verbosefile' 被清空时,结束文件的写入。写入会被缓冲,因此
内容可能不会立即可见。
设置 'verbosefile' 为新值相当于先将旧值清空,然后再设置新文件名。
和 :redir 的区别是,在设置 'verbosefile' 时不再显示 verbose 消息。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'viewdir' 'vdir'
'viewdir' 'vdir' 字符串 (缺省值:
Amiga: "home:vimfiles/view"
Win32: "$HOME/vimfiles/view"
Unix: "$HOME/.vim/view" 或
"$XDG_CONFIG_HOME/vim/view"
VMS: "sys$login:vimfiles/view")
全局
{仅当编译时加入 +mksession 特性才有效}
用于保存 :mkview 文件的目录名。
$XDG_CONFIG_HOME 可见 xdg-base-dir 。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'viewoptions' 'vop'
'viewoptions' 'vop' 字符串 (缺省: "folds,options,cursor,curdir")
全局
{仅当编译时加入 +mksession 特性才有效}
调整 :mkview 命令的效果。本选项是逗号分隔的单词列表。每个单词指定一
种会被保存和恢复的设置:
单词 保存和恢复
cursor 文件和窗口的光标位置
folds 手动建立的折叠、打开/关闭的折叠和局部折叠选项
options 窗口或缓冲区的局部选项和映射 (不包括局部选项的全局值)
localoptions 同 "options"
slash 文件名里的反斜杠会被替换为正斜杠
unix 使用 Unix 换行格式 (单个 <NL>),即使在 MS-Windows 上也
是如此
curdir 用 :lcd 设置过的 (如有) 局部于窗口的当前目录
"slash" 和 "unix" 可用于 MS-Windows 系统中,以便和 Unix 系统共享视图文
件。这是因为 Unix 版本的 Vim 不能执行 dos 格式的脚本,但 MS-Windows 版
本的 Vim 却可以执行 unix 格式的脚本。
'viminfo' 'vi' E526 E527 E528
'viminfo' 'vi' 字符串 (Vi 缺省: "",Vim 缺省值:
MS-Windows: "'100,<50,s10,h,rA:,rB:"
Amiga: "'100,<50,s10,h,rdf0:,rdf1:,rdf2:"
其他: "'100,<50,s10,h")
全局
{仅当编译时加入 +viminfo 特性才有效}
非空时,除非 'viminfofile' 为 "NONE",否则在初始化过程中读取 viminfo
文件,退出 Vim 时写回 (见 viminfo-file )。
本选项为逗号分隔的参数列表,每项包含单字母的参数名,后跟数值或字符串类
型的参数值。未列出的参数会使用其缺省值。下表列出所有的字符参数名和其值
对应的效果。
字符 值
viminfo-!
! 包含时,保存和恢复大写字母开头且不含小写字母的全局变量。例如,
保存 "KEEPTHIS" 和 "K_L_M",但不保存 "KeepThis" 和 "_K_L_M"。
嵌套的列表和字典值无法被正确读取,最终会变成空值。
viminfo-quote
" 每个寄存器保存的最大行数。这是 '<' 参数的旧名,但缺点是需要在 "
字符前加上反斜杠,不然会被识别为注释的开始!
viminfo-%
% 包含时,保存和恢复缓冲区列表。不过,如果 Vim 启动时指定文件名
参数,缓冲区列表不予恢复。反之,如果 Vim 启动时没有指定文件名
参数,则会从 viminfo 文件里恢复缓冲区列表。不保存快速修复
('buftype')、未列出 ('buflisted')、无名以及位于可移动介质上
( viminfo-r ) 的缓冲区。
后跟数值时,指定保存缓冲区的最大数量。不带数值时,默认保存所有
的缓冲区。
viminfo-'
' 记住位置标记的已编辑文件的最大数量。'viminfo' 非空时必须包含本
参数。
包含本参数意味着也会保存 jumplist 和 changelist 。
viminfo-/
/ 搜索模式历史保存的最大项目数。非零时,同时保存前次搜索和替代模
式。省略时,使用 'history' 的值。
viminfo-:
: 命令行历史保存的最大项目数。省略时,使用 'history' 的值。
viminfo-<
< 每个寄存器会保存的最大行数。为零时,不保存寄存器。省略时,不设
限制,保存所有行。'"' 是本参数的旧名。
另见下面的 's' 参数: 以千字节为单位的长度上限。
viminfo-@
@ 输入行历史保存的最大项目数。省略时,使用 'history' 的值。
viminfo-c
c 包含时,viminfo 文件里的文本会从写入时使用的 'encoding' 转换为
当前的 'encoding'。见 viminfo-encoding 。
viminfo-f
f 是否保存文件位置标记 ('0 到 '9,'A 到 'Z)。为零时,不保存文件
位置标记省略或者非零时,保存所有这些标记。'0 记住光标的当前位
置 (在退出 Vim 或者执行 ":wviminfo" 时)。
viminfo-h
h 载入 viminfo 文件时,关闭 'hlsearch' 的效果。省略时,这取决于
在最近一次搜索命令之后是否使用过 ":nohlsearch"。
viminfo-n
n viminfo 文件名。该名字必须紧跟在 'n' 字符之后,而且本参数必须
是选项最后一个!如果设置了 'viminfofile' 选项,那里给出的文件
名会覆盖此参数。环境变量在文件打开时被扩展,而非本选项设置时。
viminfo-r
r 可移动介质。值为字符串 (直到下一个 ',' 为止),本参数可指定多
次。每个值指定一个路径的开始部分,如果文件路径匹配其中任意一个
值,不保存该文件里的位置标记。通常用于避免可移动介质上的文件。
MS-Windows 上,可用 "ra:,rb:",Amiga 上,则可用
"rdf0:,rdf1:,rdf2:"。也可用于指定临时文件路径,如在 Unix 上:
"r/tmp"。此参数忽略大小写。每个值的最大长度为 50 个字符。
viminfo-s
s 每个项目以千字节为单位的最大长度。为零时,不保存该项目。目前,
只适用于寄存器。缺省值 "s10" 会忽略包含超过 1 万字节文本的寄存
器。
另见上面的 '<' 参数: 行数上限。
例如:
:set viminfo='50,<1000,s100,:0,n~/vim/viminfo
'50 记住最近 50 个已编辑文件的位置标记。
<1000 记住寄存器的内容 (每个不超过 1000 行)。
s100 跳过超过 10 万字节文本的寄存器。
:0 不保存命令行历史。
n~/vim/viminfo 使用的文件名是 "~/vim/viminfo"。
无 / 因为未指定 '/',使用其缺省值。也就是,保存所有的搜索历
史以及前次搜索和替代模式。
无 % 不保存也不恢复缓冲区列表。
无 h 恢复 'hlsearch' 高亮。
'viminfo' 从空值改为非空值后,可用 :rviminfo 读入文件内容,但这不会
自动进行。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
注意: 'compatible' 复位时会设置本选项为 Vim 缺省值。
'viminfofile' 'vif'
'viminfofile' 'vif' 字符串 (缺省: "")
全局
{仅当编译时加入 +viminfo 特性才有效}
非空时,覆盖 viminfo 使用的文件名。
为 "NONE" 时,不读写 viminfo 文件。
可用 -i 命令行标志位设置本选项。而 --clean 命令行标志位会设置本选
项为 "NONE"。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'virtualedit' 've'
'virtualedit' 've' 字符串 (缺省为 "")
全局或局部于窗口 global-local
以逗号分隔的以下可选值的列表:
block 允许可视列块模式下的虚拟编辑。
insert 允许插入模式下的虚拟编辑。
all 允许所有模式下的虚拟编辑。
onemore 允许光标移动到刚好超过行尾的位置。
none 用作局部值时,即使设置了全局值,也不允许虚拟编辑。而用
作全局值时,相当于 ""。
NONE "none" 的替代拼写方式。
虚拟编辑是指光标可以定位在没有实际字符的地方。或者是制表符的中间位置,
或者是刚好超过行尾的位置。实际用途包括在可视模式下选择方块区域,以及表
格的编辑。
"onemore" 值并不启用完整的虚拟编辑,只允许光标移动到刚好超过行尾字符的
位置。这会使部分命令的行为更加一致。通常情况下,仅在空行上光标会 (且一
定会) 位于行尾之后。而启用此值后,所有行上都可以如此。但此行为与 Vi 完
全不兼容,并且可能导致部分插件或 Vim 脚本无法正常工作,例如 l 可以将
光标移动到行尾字符之后。请谨慎使用!
$ 命令总是移动到行尾字符本身,而非其后的位置。因而,某些情况下,光标
可能会向左移动!
g$ 命令则移动到屏幕行尾。
同时使用 "all" 和 "onemore" 没有意义,但不会给出警告。
"none" 与其他单词并用时会被忽略。
注意: 'compatible' 置位时会设置本选项为 ""。
'visualbell' 'vb' 'novisualbell' 'novb' beep
'visualbell' 'vb' 布尔型 (缺省关闭)
全局
使用可视响铃代替鸣叫。显示可视响铃的终端代码由 't_vb' 给出。如果既不想
要响铃也不想要闪烁,可用:
:set vb t_vb=
如果想要短闪烁,在很多终端上可用:
:set vb t_vb=[?5h$<100>[?5l
这里 $<100> 指定时间,数值越小闪烁越短,数值越大闪烁越长。
注意: Vim 会限制响铃频率不超过半秒一次。这样可避免在重复键击等情况下频
繁响铃导致的长时间等待。即使不置位 'visualbell' 也是如此。
在 GUI 里,'t_vb' 缺省为 "<Esc>|f",效果为反转显示 20 毫秒。如果想使用
其他时长,可用 "<Esc>|40f",其中 40 表示以毫秒为单位的时间。
注意: GUI 启动时,'t_vb' 会被复位为缺省值。自定义值应在 gvimrc 里设
置。
在 Amiga 上,本选项的效果不佳,总会导致整个屏幕闪烁。
另见 'errorbells'。
'warn' 'nowarn'
'warn' 布尔型 (缺省打开)
全局
在已修改的缓冲区上使用外壳命令会给出警告信息。
'weirdinvert' 'wiv' 'noweirdinvert' 'nowiv'
'weirdinvert' 'wiv' 布尔型 (缺省关闭)
全局
本选项和 't_xs' 终端选项的效果相同。为了和 4.x 版本后向兼容而设。
置位 'weirdinvert' 会使 't_xs' 非空,反之亦然。运行 GUI 时本选项无效。
'whichwrap' 'ww'
'whichwrap' 'ww' 字符串 (Vim 缺省: "b,s",Vi 缺省: "")
全局
指定哪些左右移动光标的按键在行首或行尾时,可以跨行移到上一行或者下一
行。每个字符对应在指定模式下的一个按键,字符间以逗号分隔:
字符 键 模式
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" 等都能正常工作。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'wildchar' 'wc'
'wildchar' 'wc' 数值型 (Vim 缺省: <Tab>,Vi 缺省: CTRL-E)
全局
在命令行上,用于启动通配符补全的输入字符。'wildmode' 指定补全模式。
详情可见: cmdline-completion 。
在宏内不识别该字符。为此,可见 'wildcharm'。
本选项不支持 CTRL-C、<CR> 和 Enter 等若干按键。
<Esc> 可用于本选项,但为确保安全,连续按两次仍然会退出命令行。
尽管 'wc' 是一个数值选项,它可用数值、单个字符、 key-notation (如
<Up>、<C-F>) 或插入记号加字母 (如 ^F 代表 CTRL-F) 等形式指定:
:set wc=27
:set wc=X
:set wc=^I
:set wc=<Tab>
在搜索模式上下文中 (如 / 、 ? 、 :s 、 :g 、 :v 和 :vim 等命令),
'wildchar' 也用于启动补全。要按本义插入 <Tab> 而不触发补全,可键入
<C-V><Tab> 或 "\t"。
另见 'wildoptions' 和 wildtrigger() 。
注意: 'compatible' 置位时本选项会设为 Vi 缺省值,而 'compatible' 复位
时会设为 Vim 缺省值。
'wildcharm' 'wcm'
'wildcharm' 'wcm' 数值型 (缺省: 无 (0))
全局
'wildcharm' 和 'wildchar' 的效果完全相同,但只在宏 (译者注: 映射及寄存
器) 内识别该字符。
要找到命令行上可用于本选项的 "空闲" 按键,可参见 ex-edit-index 。用户
通常不会直接输入 'wildcharm',而是在映射里使用它来自动启动补全模式,例
如:
:set wcm=<C-Z>
:cnoremap ss so $vim/sessions/*.vim<C-Z>
此时输入 :ss 后,就可用 CTRL-P 和 CTRL-N 来选择其他匹配项。
'wildignore' 'wig'
'wildignore' 'wig' 字符串 (缺省为 "")
全局
文件模式的列表。展开文件通配符 ( wildcards ) 以及补全文件和目录名时,
会忽略匹配任一模式的文件,本选项会影响 expand() 、 glob() 和
globpath() 的结果,除非指定标志位来关闭其效果。
这些模式的应用方式和 :autocmd 类似,见 autocmd-patterns 。
另见 'suffixes'。
例如:
:set wildignore=*.o,*.obj
建议使用 :set+= 和 :set-= 来从列表里加减模式。这可以避免未来版本更
改缺省值而引发的问题。
'wildignorecase' 'wic' 'nowildignorecase' 'nowic'
'wildignorecase' 'wic' 布尔型 (缺省关闭)
全局
打开时,文件名和目录的补全会忽略大小写。'fileignorecase' 置位时,本选
项不起作用。
使用外壳命令扩展通配符时,本选项不适用,模式里包含某些特殊字符时会出现
这种情况。
'wildmenu' 'wmnu' 'nowildmenu' 'nowmnu'
'wildmenu' 'wmnu' 布尔型 (缺省打开)
全局
打开时,命令行补全以增强模式运行。按下 'wildchar' (通常是 <Tab>) 启动
补全时,会显示多个可能的匹配项,
'wildoptions' 包含 "pum" 时,补全匹配项会在弹出菜单里显示,否则匹配项
会显示在命令行上方一行,并高亮首个匹配项 (会覆盖状态行,如果存在)。
用于显示前项/后项匹配的热键 (如 <Tab> 或 CTRL-P/CTRL-N) 会把高亮移动到
合适的匹配项上。
'wildmode' 指定 "full" 项时,会启用 "wildmenu" 模式。"longest" 和
"list" 项则不会启动 "wildmenu" 模式。
要查看当前模式是否使用 "wildmenu" 模式,可用 wildmenumode() 。
如果无法在一行内放进所有匹配项,右侧会显示 ">" 和/或左侧会显示 "<"。必
要时,状态行会滚动。
按下不用于选择补全项的键时,放弃 "wildmenu" 模式。
"wildmenu" 激活时,以下键有特殊含义:
CTRL-P - 移动到前项匹配。
CTRL-N - 移动到后项匹配。
<CR> - 在菜单补全中,如果光标正好在句号后: 移进子菜单。
CTRL-E - 结束补全,回到选择匹配之前的状态。
CTRL-Y - 接受当前选中的匹配,并停止补全。
命令行补全不使用弹出菜单时,以下键有特殊含义:
<Left> <Right> - 选择前项/后项匹配 (类似于 CTRL-P/CTRL-N)。
<Up> - 补全文件名/菜单名时: 上移到父目录或父菜单。
<Down> - 补全文件名/菜单名时: 移进子目录或子菜单。
命令行补全用弹出菜单时,以下键有特殊含义:
<Up> <Down> - 选择前项/后项匹配 (类似于 CTRL-P/CTRL-N)。
<PageUp> - 选择向后若干项目的匹配项。
<PageDown> - 选择向前若干项目的匹配项。
<Left> - 补全文件名/菜单名时: 上移到父目录或父菜单。
<Right> - 补全文件名/菜单名时: 移进子目录或子菜单。
此功能允许控制台使用菜单 console-menus 。
如果希望 <Left> 和 <Right> 键移动光标而非选择其他匹配,可用:
:cnoremap <Left> <Space><BS><Left>
:cnoremap <Right> <Space><BS><Right>
当前匹配项的显示使用 "WildMenu" 高亮 hl-WildMenu 。
'wildmode' 'wim'
'wildmode' 'wim' 字符串 (Vim 缺省: "full")
全局
指定 'wildchar' 指定字符启动的补全模式。本选项是逗号分隔的列表,包含不
超过四个部分,分别对应 'wildchar' 前四次按键的行为。每个部分包含以冒号
分隔的项目列表,每项指定一种补全行为,在对应阶段,会同时应用这些补全行
为。
补全行为的可选值为:
"" 直接插入首个匹配项。不再循环或列出更多的匹配项。
"full" 用下一个完整的匹配项补全。在所有匹配项间循环,最后一个
匹配项之后回到原始的用户输入。'wildmenu' 打开时,使用
"wildmenu" 模式显示补全匹配项。
"longest" 用最长的公共子串补全。如果输入文本没有因此被扩展,使用
本选项下一个部分的行为。
"list" 如果有多于一个匹配项,列出所有的匹配项。
"lastused" 补全缓冲区名时,按缓冲区最近使用时间排序 (当前缓冲区不
参与排序)。只适用于缓冲区名补全。
"noselect" 'wildmenu' 打开时,显示菜单但不预选首个匹配项。
如果只有一个匹配项,除非指定 "noselect",会直接使用该匹配项完整补全。
一些有用的值组合,以冒号分隔:
"longest:full" 从最长的公共子串开始,并显示 'wildmenu' (如果
打开)。不在完整匹配项间循环。
"list:full" 列出所有的匹配项,并用其中首个完整项目补全。
"list:longest" 列出所有的匹配项,并用最长的公共子串补全。
"list:lastused" 列出所有匹配。补全缓冲区时,按它们最近使用时间
排序 (当前缓冲区不参与排序)。
"noselect:lastused" 'wildmenu' 打开时,不预选首个匹配项。补全缓冲
区时,按它们最近使用时间排序 (当前缓冲区不参与
排序)。
示例:
:set wildmode=full
每按一次键会用下一个完整的匹配项补全 (缺省行为)
:set wildmode=longest,full
首次按键: 用最长的公共子串补全
第二次按键: 在每个完整的匹配项间循环
:set wildmode=list:full
首次按键: 列出所有的匹配项,并用其中首个匹配项补全
:set wildmode=list,full
首次按键: 只列出所有的匹配项
第二次按键: 用完整的匹配项补全
:set wildmode=longest,list
首次按键: 用最长的公共子串补全
第二次按键: 列出所有的匹配项
:set wildmode=noselect:full
首次按键: 显示 'wildmenu' 但不补全或预选
第二次按键: 在每个完整的匹配项间循环
:set wildmode=noselect:lastused,full
同上,但缓冲区匹配会按最近使用时间排序
详情可见: cmdline-completion 。
'wildoptions' 'wop'
'wildoptions' 'wop' 字符串 (缺省为 "")
全局
改变 cmdline-completion 行为的标志位列表。
可选值为:
exacttext 包含时,搜索模式补全 (如在 / 、 ? 、 :s 、 :g 、 :v
和 :vim 里) 会显示完整的缓冲区文本作为菜单项,而不保
留正则表达式的特殊项目,如位置锚点等 (如 /\< )。显示
缓冲区的实际匹配文本作为菜单项会更直观,但因为没有完整
保留搜索模式,搜索不会那么精确。缺省方式是保留键入的搜
索模式 (带锚点),然后追加匹配的单词。这会保证搜索的正
确,尤其是使用了正则表达式或打开 'smartcase' 时。不
过,追加的匹配单词的大小写和缓冲区里实际单词的大小写未
必准确匹配。
fuzzy 使用 fuzzy-matching 来搜索补全匹配项。包含时,补全不
会使用通配符扩展。匹配项会基于模糊匹配的 "最佳匹配" 排
序,而非基于字母序。此方法通常比通配符扩展找到更多的匹
配项。不过,文件和目录名补全目前不支持模糊匹配,而总会
使用通配符扩展。
pum 使用与 ins-completion-menu 风格相同的弹出菜单来显示
补全匹配项。
tagfile 用 CTRL-D 列出匹配标签时,同时列出标签的类型和所在文
件。每行只显示一个匹配。常用的标签类型为:
d #define
f 函数
本选项不适用于 ins-completion 。为此,可见 'completeopt'。
'winaltkeys' 'wak'
'winaltkeys' 'wak' 字符串 (缺省为 "menu")
全局
{仅适用于 Win32、Motif、GTK 和 Photon GUI}
某些 GUI 版本允许通过 ALT 键加菜单下划线标出的字符来访问菜单项。这和使
用 ALT 键的映射和特殊字符的输入冲突。本选项指定冲突的处理方式:
no 不用 ALT 键访问菜单。ALT 加键的组合可以被映射,但不会自动处
理菜单项的访问。映射中可调用 :simalt 命令来完成此功能。
yes ALT 键由窗口系统处理。ALT 加键的组合不能被映射。
menu ALT 加菜单快捷键字符的组合由窗口系统处理。其余键仍然可被映射。
从 'guioptions' 里排除 'm' 时,菜单被屏蔽,ALT 键此时无论如何都不会为
菜单所用。
本选项不影响 <F10>;在 Win32 和 GTK 上,除非 <F10> 被映射,否则它总会
选择菜单。
'wincolor' 'wcr'
'wincolor' 'wcr' 字符串 (缺省为空)
局部于窗口
在本窗口中,取代 Normal 颜色 hl-Normal 的高亮组名。
'window' 'wi'
'window' 'wi' 数值型 (缺省为屏幕高度 - 1)
全局
仅有一个窗口且本值小于 'lines' 减一时,用于 CTRL-F 和 CTRL-B 的
"窗口高度"。屏幕滚动的行数为本选项值减两行,但不少于一行。
'window' 等于 'lines' 减一时,CTRL-F 和 CTRL-B 的滚动会更智能,因为会
兼顾到回绕行的情况。
调整 Vim 窗口大小且本选项值小于 1 或者大于等于 'lines' 时,重新设置本
选项为 'lines' 减 1。
注意: 不要和 Vim 的窗口高度混淆。那里对应 'lines'。
'winfixbuf' 'wfb'
'winfixbuf' 'wfb' 布尔型 (缺省关闭)
局部于窗口
打开时,窗口及其显示的缓冲区相互绑定。例如,试图用 :edit 更改缓冲区
会失败。其他试图改变窗口缓冲区的命令 (如 :cnext ) 也会跳过打开本选项
的窗口。但如果使用带 '!' 修饰符的 Ex 命令,仍可强制切换缓冲区。
'winfixheight' 'wfh' 'nowinfixheight' 'nowfh'
'winfixheight' 'wfh' 布尔型 (缺省关闭)
局部于窗口 local-noglobal
本窗口打开或关闭并且 'equalalways' 置位时,保持窗口高度不变。另见
CTRL-W_= 。 preview-window 和 quickfix-window 中本选项缺省打开。
本选项即使打开,空间不足时,高度仍可能会改变。
'winfixwidth' 'wfw' 'nowinfixwidth' 'nowfw'
'winfixwidth' 'wfw' 布尔型 (缺省关闭)
局部于窗口 local-noglobal
本窗口打开或关闭并且 'equalalways' 置位时,保持窗口宽度不变。另见
CTRL-W_= 。
本选项即使打开,空间不足时,宽度仍可能会改变。
'winheight' 'wh' E591
'winheight' 'wh' 数值型 (缺省为 1)
全局
当前窗口占用的最少行数。这并非绝对最小值,空间不足时,Vim 仍可能使用更
少的行数。当焦点移到行数小于本选项值的窗口时,会增加其高度,但以相应减
少其他窗口高度为代价。
用于普通的编辑任务时,可将本选项设为较小值。
将本选项设为 999 会使当前窗口几乎占据整个屏幕,其它窗口仅保留
'winminheight' 高度。不过这有缺点,":all" 只会创建两个窗口。要避免
"vim -o 1 2 3 4" 仅创建两个窗口的问题,可通过 VimEnter 事件在启动后
再设置选项:
au VimEnter * set winheight=999
本选项最小值为 1。
调整当前窗口高度的命令并不会改变本值。
'winheight' 应用于当前窗口。而 'winminheight' 设置其他窗口的最小高度。
'winminheight' 'wmh'
'winminheight' 'wmh' 数值型 (缺省为 1)
全局
非当前窗口的最小高度。
这是绝对最小值,窗口不会缩小到低于该值。
设为零时,窗口在必要时可被 "压缩" 为零行 (即仅显示状态行)。窗口被激活
时,至少会占用一行 (因为光标必须有位置显示)。
要设置当前窗口的最小高度,可用 'winheight'。
仅在窗口缩小时才会检查本选项。如果值过大,打开窗口稍多一些就会报错。建
议设置为 0 到 3 的值。
'winminwidth' 'wmw'
'winminwidth' 'wmw' 数值型 (缺省为 1)
全局
非当前窗口的最小宽度。
这是绝对最小值,窗口不会缩小到窄于该值。
设为零时,窗口在必要时可被 "压缩" 为零列 (即仅显示垂直分割符)。窗口被
激活时,至少会占用一列 (因为光标必须有位置显示)。
要设置当前窗口的最小宽度,可用 'winwidth'。
仅在窗口缩小时才会检查本选项。如果值过大,打开窗口稍多一些就会报错。建
议设置为 0 到 12 的值。
'winptydll'
'winptydll' 字符串 (缺省为 "winpty32.dll" 或 "winpty64.dll")
全局
{仅当编译时加入 +terminal 特性才有效}
指定用于 :terminal 命令的 winpty 共享库名。缺省值取决于 Vim 可执行程
序在编译时是 32 位还是 64 位版本。如果未找到指定库名,作为后备会尝试
"winpty.dll"。
环境变量被扩展 :set_env 。
为了安全原因,本选项不能在 modeline 或 sandbox 里设置。
'winwidth' 'wiw' E592
'winwidth' 'wiw' 数值型 (缺省为 20)
全局
当前窗口占用的最少列数。这并非绝对最小值,空间不足时,Vim 仍可能使用更
少的列数。当前窗口的列数小于本选项时,会增加其宽度,但以相应减少其他窗
口宽度为代价。将本选项设为 999 会使当前窗口占据整个屏幕。用于普通的编
辑任务时,可将本选项设为较小值。
调整当前窗口宽度的命令并不会改变本值。
'winwidth' 应用于当前窗口。而 'winminwidth' 设置其他窗口的最小宽度。
'wlseat' 'wse'
'wlseat' 'wse' 字符串 (缺省为 "")
全局
{仅当编译时加入 +wayland 特性才有效}
指定用于 Wayland 功能的 Wayland 座位 (seat),主要是用于剪贴板操作。即
使指定的座位不存在,本选项仍会被设为该值,但结果是 Wayland 剪贴板将不
可用。设为空值时,Vim 会尝试使用首个可用的座位。更新本选项时,也会同步
更新 v:clipmethod 。
'wlsteal' 'wst' 'nowlsteal' 'nowst'
'wlsteal' 'wst' 布尔型 (缺省关闭)
全局
{仅当编译时加入 +wayland_focus_steal 特性才有效}
打开时,Vim 会通过创建临时表面 (surface) 来盗取焦点,以便访问剪贴板。
详见 wayland-focus-steal 。
'wltimeoutlen' 'wtm'
'wltimeoutlen' 'wtm' 数值型 (缺省为 500)
全局
{仅当编译时加入 +wayland 特性才有效}
Vim 等待 Wayland 合成器的超时,以毫秒为单位。等待合成器期间,Vim 不响
应输入,也不更新屏幕。将该值调低可使 Vim 更快响应。但如果合成器比正常
情况需要更多时间来响应,可能导致报错。
此外,本选项也用于等待表面 (surface) 获取焦点的最大超时,见
wayland-focus-steal 。
'wrap' 'nowrap'
'wrap' 布尔型 (缺省打开)
局部于窗口
本选项改变文本显示的方式,但不会实际修改缓冲区文本,而 'textwidth' 则
会。
打开时,超过窗口宽度的行会回绕,并在下一行继续显示。关闭时,长行不会回
绕。只显示部分内容。光标移动到不可见部分时会自动水平滚动。
必要时会在单词的中间断行。如果希望只在单词边界断行,可见 'linebreak'。
要使得水平滚动可用性更好,可尝试设置:
:set sidescroll=5
:set listchars+=precedes:<,extends:>
见 'sidescroll'、'listchars' 和 wrap-off 。
'diff' 选项置位时,本选项不能从 modeline 中设置。
如果在 modeline 或 sandbox 里设置了 'nowrap', lcs-extends 总是使
用 '>' 字符显示,与 'list' 和 'listchars' 的设置无关。这是为了避免视口
外的恶意代码不可见。在此之后可通过手动执行 `:setlocal nowrap` 关闭此行
为。
'wrapmargin' 'wm'
'wrapmargin' 'wm' 数值型 (缺省为 0)
局部于缓冲区
指定 (硬) 回绕开始前,从右窗口边界起算的字符数。当输入文本超过此范围
时,会自动插入 <EOL>,然后从下一行继续输入。
增加边距的选项 (如 'number' 和 'foldcolumn') 会进一步压缩文本宽度。这
是 Vi 兼容行为。
'textwidth' 非零时,不使用本选项。
'paste' 选项置位时会临时设置本选项为 0。'paste' 复位时会恢复本选项。
另见 'formatoptions' 和 ins-textwidth 。
'wrapscan' 'ws' 'nowrapscan' 'nows'
'wrapscan' 'ws' 布尔型 (缺省打开) E384 E385
全局
搜索会在文件结尾折返到文件开头继续进行 (译者注: 同样地,反向搜索会在文
件开头折返到文件结尾继续进行)。也用于 ]s 、 [s 以及拼写错误的搜索。
'write' 'nowrite'
'write' 布尔型 (缺省打开)
全局
打开时,允许写入文件。关闭时,不允许写入文件。可用于设置只读但允许修改
文本的模式。可以用命令行参数 -m 或 -M 复位。过滤文本仍可执行,但需
要写入临时文件。
'writeany' 'wa' 'nowriteany' 'nowa'
'writeany' 'wa' 布尔型 (缺省关闭)
全局
允许写入任何文件,而无需 "!" 覆盖缺省行为。
'writebackup' 'wb' 'nowritebackup' 'nowb'
'writebackup' 'wb' 布尔型 (有 +writebackup 特性时缺省打开,否则缺省关
闭)
全局
覆盖文件前先建立备份。文件成功写入后,除非 'backup' 选项也开启,否则删
除该备份。
警告: 关闭本选项意味着,如果缓冲区无法正确写入文件,Vim 退出 (无论何种
原因) 时会同时丢失原有文件以及最新的改动。仅在文件系统几乎已满,无法写
入文件时才应考虑复位本选项 (并确保在写入操作成功之前都不要退出 Vim)。
更多解释可见 backup-table 。
'backupskip' 模式匹配时,无论如何都不会建立备份。
取决于 'backupcopy' 选项,备份可能是一个新文件,也可能是原始文件换名后
的备份 (同时新文件被写入原路径)。
注意: 'compatible' 置位时会设置本选项为缺省值。
'writedelay' 'wd'
'writedelay' 'wd' 数值型 (缺省为 0)
全局
单个字符发送到屏幕的等待时间,以毫秒为单位。非零时,字符会逐个发送到终
端。本选项只用于调试。
'xtermcodes' 'noxtermcodes'
'xtermcodes' 布尔型 (缺省打开)
全局
打开时,如果检测到 xterm 补丁号为 141 或更高版本从而支持终端应答机制,
Vim 会向终端请求实际使用的终端键码以及色彩数量。这可解决
termlib/terminfo 项目不支持的终端里的配置选项问题,见 xterm-codes 。
一个可能的副作用是因为 t_Co 可能会被改变,从而触发 Vim 重绘。
vim:tw=78:ts=8:noet:ft=help:norl: