OPTIONS
*options.txt* For Vim version 7.1. 最近更新: 2007年5月
VIM 参考手册 by Bram Moolenaar
译者: Willis
http://vimcdoc.sf.net
选项 *options*
1. 设置选项 |set-option|
2. 自动设置选项 |auto-setting|
3. 选项总结 |option-summary|
选项的总览可见 help.txt |option-list|。
Vim 有很多内部变量和开关,可以达到特殊的效果。这些选项有三种形式:
布尔型 可以打开或关闭 *boolean* *toggle*
数值型 值为数值
字符串 值为字符串
*:se* *:set*
:se[t] 显示所有不同于缺省值的选项。
:se[t] all 显示除了终端设置以外的所有选项。
:se[t] termcap 显示所有的终端选项。注意 在 GUI 里,不会显示键码,因为
它们是内部生成的,无法改变。而且 GUI 里即使修改终端代
码也没用 ...
*E518* *E519*
:se[t] {option}? 显示 {option} 的值。
:se[t] {option} 切换选项: 置位,打开。
数值选项: 显示其值。
字符串选项: 显示其值。
:se[t] no{option} 切换选项: 复位,关闭。
:se[t] {option}! 或
:se[t] inv{option} 切换选项: 反转其值。{Vi 无此功能}
*:set-default* *:set-&* *:set-&vi* *:set-&vim*
:se[t] {option}& 复位选项为其缺省值。可能和 'compatible' 的现值有关。
{Vi 无此功能}
:se[t] {option}&vi 复位选项为 Vi 的缺省值。{Vi 无此功能}
:se[t] {option}&vim 复位选项为 Vim 的缺省值。{Vi 无此功能}
:se[t] all& 设置所有除了终端设置的选项为其缺省值。'term'、 'lines'
和 'columns' 值不会改变。{Vi 无此功能}
*:set-args* *E487* *E521*
:se[t] {option}={value} 或
:se[t] {option}:{value}
设置字符串或数值选项的值为 {value}。
数值选项的值可以用十进制、十六进制 (0x 开头) 或八进制
('0' 开头) (十六进制和八进制的支持只限于提供 strtol()
函数的环境)。
可以用 'wildchar' 输入原来的值 (缺省是 <Tab>,但如果置
位 'compatible',是 CTRL-E)。见 |cmdline-completion|。
{option} 和 '=' 之间可以有空白,但会被忽略。'=' 和
{value} 之间不能有空白。
|option-backslash| 说明如何在 {value} 里使用空白和反斜
杠。
:se[t] {option}+={value} *:set+=*
把 {value} 加到数值选项里,或者附加到字符串选项之后。
如果选项是逗号分隔的列表,除非原来的值为空,会加上一个
逗号。
如果选项是标志位的列表,删除多余的标志位。如果加入已经
存在的标志位,选项值不变。
另见上面的 |:set-args|。
{Vi 无此功能}
:se[t] {option}^={value} *:set^=*
把 {value} 乘到数值选项里,或者附加到字符串选项之前。
如果选项是逗号分隔的列表,除非原来的值为空,会加上一个
逗号。
另见上面的 |:set-args|。
{Vi 无此功能}
:se[t] {option}-={value} *:set-=*
把 {value} 从数值选项里减去,或者从字符串选项里删除,
如果该值原来存在的话。如果不存在,不会有错误或者警告。
如果选项是逗号分隔的列表,除非新值为空,删除一个逗号。
如果选项是标志位的列表,{value} 必须和选项里出现的顺序
完全相同。一个一个地分别删除标志位可以解决这个问题。
另见上面的 |:set-args|。
{Vi 无此功能}
":set" 可以设置多个 {option} 参数。例如:
:set ai nosi sw=3 ts=3
如果其中一个参数有错,给出错误信息,而且其后的参数也不再处理。
*:set-verbose*
如果 'verbose' 非零,显示选项值的同时会告诉你上次在哪里设置。例如:
:verbose set shiftwidth cindent?
shiftwidth=4
Last set from modeline
cindent
Last set from /usr/local/share/vim/vim60/ftplugin/c.vim
只有请求特定选项的值时才会这么做,":set all" 或者没有参数的 ":set" 都不会。
如果该选项是手动设置的,"Last set" 消息不会给出。对于所有的同名局部选项,只保
存一个位置。因此可以说,该消息针对的是选项名,而不一定是具体某个值。
如果执行函数、用户命名或者自动命令时设定选项,报告的位置是定义它们的脚本。
注意选项的设置也可能是来自设置 'compatible' 的副作用。
{仅当编译时加入 +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> 来输入)
这个方法优于映射之处在于它能适用于所有情况。
为了安全原因,t_xx 选项不能在 |modeline| 或者 |sandbox| 里设置。
":set" 给出的列表看起来和 Vi 不同。长字符串选项在列表底部。而选项的数量也相当
多。"set all" 的输出可能一整屏都放不下,此时 Vim 会给出 |more-prompt|。
*option-backslash*
在字符串选项值中,如果要包含空白,一定要用反斜杠前导。如果要包含单个反斜杠,一
定要输入两个。换而言之,选项值里的反斜杠数目会减半 (往下取整)。
这里有一些例子:
:set tags=tags\ /usr/tags 产生 "tags /usr/tags"
:set tags=tags\\,file 产生 "tags\,file"
:set tags=tags\\\ file 产生 "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\"
MS-DOS 和 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*
有的选项只适用于单个窗口或缓冲区。每个窗口或缓冲区有该选项的单独版本,因而分别
拥有不同的值。这样便可以在一个窗口置位 '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' 值。不会为每个缓冲区分别记住局部于窗口的
选项。
*:setl* *:setlocal*
:setl[ocal] ... 类似于 ":set",但只设置局部于当前缓冲区或者窗口的值。
不是所有的选项都有局部值的。如果该选项没有局部值,那么
那么设置全局值。
如果用 "all" 参数: 显示所有局部选项的局部值。
如果没有参数: 显示所有不同于缺省的局部选项的局部值。
显示局部选项时,显示它的局部值。而全局选项则显示全局值
(将来或许会有所改变)。
{Vi 无此功能}
:setl[ocal] {option}< 通过复制全局值,把 {option} 的局部值设回它的全局值。
{Vi 无此功能}
:se[t] {option}< 通过使之为空,把 {option} 的局部值设回它的全局值。只对
|global-local| 选项有意义。
{Vi 无此功能}
*:setg* *:setglobal*
:setg[lobal] ... 类似于 ":set",但只设置局部选项的全局值,而不改变其局
部值。
显示选项时,显示它的全局值。
如果用 "all" 参数: 显示所有局部选项的全局值。
如果没有参数: 显示所有不同于缺省的局部选项的全局值。
{Vi 无此功能}
对缓冲区和窗口局部选项而言:
命令 全局值 局部值
:set option=value 设置 设置
:setlocal option=value - 设置
:setglobal option=value 设置 -
: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=
注意: 更多的全局选项将来可能会成为全局-局部类型。那时,在全局选项上使用
":setlocal" 的效果能会有不同。
设置文件类型
:setf[iletype] {filetype} *:setf* *:setfiletype*
把 'filetype' 选项设为 {filetype}。但如果已经在 (嵌套)
自动命令序列中设置过,就不再进行。
等价于下面代码的缩写:
:if !did_filetype()
: setlocal filetype={filetype}
:endif
在一个 filetype.vim 里使用该命令可避免设置 'filetype'
选项两次,导致不同的设置和语法文件被载入。
{Vi 无此功能}
:bro[wse] se[t] *:set-browse* *:browse-set* *:opt* *:options*
:opt[ions] 打开窗口,阅读和设置所有的选项。选项以功能分组。
提供每个选项简短的帮助。在简短帮助上按 <CR>,会打开帮
助窗口来提供该选项更多的帮助。
修改选项的值,然后在 "set" 行上按 <CR> 就会设置新值。
对于窗口和缓冲区特定的选项,设置的是最近访问窗口里的选
项值。除非它是帮助窗口,这时使用帮助窗口下方的窗口 (选
项窗口本身不算)。
{仅当编译时加入 |+eval| 和 |+autocmd| 特性才有效}
*$HOME*
使用 "~" 如同使用 "$HOME",但只有在选项开头和空格或逗号之后才会识别。
Unix 系统上也可以用 "~user"。它被用户 "user" 的主目录代替。例如:
:set path=~mool/include,/usr/include,.
Unix 系统上还可以用 "${HOME}" 形式。这时,{} 之间的名字可以包含非标识符字符。
注意 如果你想为 "gf" 命令使用这种形式,'{' 和 '}' 字符需要加到 'isfname' 里。
注意: 环境变量和 "~/" 的扩展只在 ":set" 命令里进行,给选项赋值的 ":let" 不会。
注意 扩展后的选项的最大长度有限制。具体多少与系统有关,一般是 256 或 1024 个字
符这样的数目。
*:fix* *:fixdel*
:fix[del] 设置 't_kD' 的值,如果:
't_kb' 是 't_kD' 就变成
CTRL-? CTRL-H
非 CTRL-? CTRL-?
(CTRL-? 是 0177 八进制、0x7f 十六进制) {Vi 无此功能}
如果删除键的终端代码不对,但退格键的代码是对的,在你的
.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>)
{vi:|vim:|ex:} 字符串 "vi:"、"vim:" 或 "ex:"
[white] 可选的空白字符
{options} 选项设置的列表,用空格或 ':' 分隔。每个 ':' 之间的部分成为一个
":set" 命令的参数 (可为空)
例如:
vi:noai:sw=3 ts=6
第二种形式 (和部分版本的 Vi 兼容):
[text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text]
[text] 任何文本,可以为空
{white} 不少于一个的空白字符 (<Space> 或 <Tab>)
{vi:|vim:|ex:} 字符串 "vi:"、"vim:" 或 "ex:"
[white] 可选的空白字符
se[t] 字符串 "set " 或 "se " (注意 空格)
{options} 选项列表,以空白分隔。每个部分成为一个 ":set" 命令的参数
: 冒号
[text] 任何文本,可以为空
例如:
/* vim: set ai tw=75: */
{vi:|vim:|ex:} 之前的空格是必要的。这样可以减少错用比如 "lex:" 这样的普通单词
的可能性。有一个特例: "vi:" 和 "vim:" 也可以出现在行首 (为和 3.0 版本兼容)。
在行首使用 "ex:" 会被忽略 (这可以是 "example:" 的缩写)。
*modeline-local*
选项的设置类似于 ":setlocal": 新值只适用于包含该文件的缓冲区和窗口。尽管可以从
模式行里设置全局值,这非常罕见。如果你打开两个窗口,而其中的两个文件为同一个全
局值设置不同的值,结果取决于哪个文件后打开。
编辑已经载入的文件时,只使用模式行里局部于窗口的选项。因而,如果打开文件后你手
动修改局部于缓冲区的选项,在别的窗口里编辑相同的缓冲区不会改变这些选项。但局部
于窗口的选项会被设置。
*modeline-version*
如果模式行只用于某些版本的 Vim,版本号应在使用 "vim:" 时指定:
vim{vers}: {vers} 版本或更高
vim<{vers}: {vers} 之前的版本
vim={vers}: {vers} 版本
vim>{vers}: {vers} 之后的版本
对于 Vim 6.0,{vers} 是 600 (主版本号乘一百加副版本号)。
例如,要设置 Vim 6.0 或以后版本使用的模式行:
/* vim600: set foldmethod=marker: */
要为 Vim 5.7 以前的版本设置模式行:
/* vim<570: set sw=4: */
"vim" 和 ":" 之间不能有空格。
检查的行数用 'modelines' 选项设置。如果关闭 'modeline' 或者 'modelines' 为零,
不检查模式行。
注意 第一种形式使用该行的其余部分。所以这行:
/* vi:ts=4: */
会指出拖尾的 "*/" 是一个错误。这样就可以:
/* vi:set ts=4: */
如果检测到错误,忽略该行的其余部分。
如果你想在 set 命令里包含 ':',在冒号之前加上 '\'。处理时,':' 之前的反斜杠会
被删除。例如:
/* vi:set dir=c\:\tmp: */
会设置 'dir' 选项为 "c:\tmp"。':' 之前只删除一个反斜杠。因此,要包含 "\:" 你需
要指定 "\\:"。
为了安全原因,除了 "set" 以外,不支持别的命令 (有人可能会用模式行创建一个文本
的特洛伊木马文件)。而且也不是所有选项都可设置。对有些选项而言,会设置一个标志
位来激活 |sandbox|。即便如此,使用模式行还是有些微风险。例如,如果有些开玩笑的
人设置 '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-DOS 的缺省为 128,否则为 224)
全局
{Vi 无此功能}
{仅当编译时加入 |+rightleft| 特性才有效}
希伯来字母表的第一个字母的 ASCII 码。希伯来模式下的键盘映射例程,包括
插入模式 (如果置位 hkmap) 和命令行模式 (如果按了 CTRL-_),都使用
[aleph..aleph+26] 范围输出希伯来字符。
aleph=128 适用于 PC 代码,而 aleph=224 适用于 ISO 8859-8。
见 |rileft.txt|。
*'allowrevins'* *'ari'* *'noallowrevins'* *'noari'*
'allowrevins' 'ari' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+rightleft| 特性才有效}
允许插入和命令行模式使用 CTRL-_。缺省是关闭的,以免用户想输入 SHIFT-_
时不小心输入 CTRL-_ 而进入反向插入模式又不知道怎么退出。见 'revins'。
注意: 如果置位 'compatible',该选项被复位。
*'altkeymap'* *'akm'* *'noaltkeymap'* *'noakm'*
'altkeymap' 'akm' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+farsi| 特性才有效}
如果打开,第二语言是波斯语。编辑模式下如果打开 'allowrevins' 的话,
CTRL-_ 切换波斯语和英语的键盘映射表。
如果关闭,在希伯来语和英语之间切换键盘映射表。可用于以原始方式,即英语
(从左到右模式),启动 Vim,又可以使用第二语言即波斯语或者希伯来语 (从右
到左模式) 的场合。见 |farsi.txt|。
*'ambiwidth'* *'ambw'*
'ambiwidth' 'ambw' 字符串 (缺省: "single")
全局
{Vi 无此功能}
{仅当编译时加入 |+multi_byte| 特性才有效}
只有在 'encoding' 为 "utf-8" 或别的 Unicode 编码时才有效。告诉 Vim 怎
么处理东亚二义性宽度字符类 (East Asian Width Class Ambiguous) (例如
欧元符号、注册记号、版权记号、希腊字母、西里尔字母等等)。
目前有两个可能的选择:
"single": 使用和 US-ASCII 字符相同的宽度。多数用户希望如此。
"double": 使用 US-ASCII 字符两倍的宽度。
在一些 CJK 字体里,这些字符的字形宽度完全由它们在传统的 CJK 编码里占据
字节的数目决定。那些编码中,欧元、注册记号、希腊/西里尔字母等占据两个
字节,因而它们在这些字体里用 "宽" 字形显示。这也包括文本文件里制表用的
一些画线字符。因此如果 GUI Vim 使用 CJK 字体、或者在使用 CJK 字体的终
端 (模拟器) (包括带有 "-cjkwidth" 选项的 xterm) 里运行 Vim,应把该选项
设为 "double",这样可以匹配这些字体里 Vim 实际看到相关字形的宽度。 CJK
Windows 9x/ME 或 Windows 2k/XP 上,如果系统 locale 为 CJK locale,也应
把本选项设为 "double"。见 Unicode Standard Annex #11
(http://www.unicode.org/reports/tr11)。
*'antialias'* *'anti'* *'noantialias'* *'noanti'*
'antialias' 'anti' 布尔型 (缺省: 关闭)
全局
{Vi 无此功能}
{仅当编译时加入 Mac OS X 的 GUI 支持才有效}
只有在 Mac OS X v10.2 或以后版本的 Vim 的 GUI 版本上,本选项才有效。如
果打开,Vim 使用平滑 ("反锯齿") 字体。在特定显示上的特定大小的字体,可
能会较易阅读。有时,如果 'guifont' 设为缺省值 (空字符串),置位该选项会
引起问题。
*'autochdir'* *'acd'* *'noautochdir'* *'noacd'*
'autochdir' 'acd' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+netbeans_intg| 或 |+sun_workshop|
特性才有效}
如果打开,Vim 会在你打开文件、切换缓冲区、删除缓冲区或者打开/关闭窗口
时改变当前工作目录的值。具体来说,就是打开或者选择的文件所在的目录。
提供该选项的目的是和 Sun ONE Studio 4 Enterprise Edition 发行的 Vim 后
向兼容。
注意: 打开次选项会使得某些插件无法工作。
*'arabic'* *'arab'* *'noarabic'* *'noarab'*
'arabic' 'arab' 布尔型 (缺省关闭)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+arabic| 特性才有效}
可以置位本选项来开始编辑阿拉伯文本。
置位本选项会:
- 置位 'rightleft' 选项,除非置位 'termbidi'。
- 置位 'arabicshape' 选项,除非置位 'termbidi'。
- 设置 'keymap' 选项为 "arabic";插入模式下 CTRL-^ 会切换英语和阿拉伯
键盘映射。
- 置位 'delcombine' 选项。
注意 要使用阿拉伯文本,'encoding' 必须是 "utf-8"。
复位本选项会:
- 复位 'rightleft' 选项。
- 关闭 'keymap' 的使用 (但不改变其值)。
注意 这里不复位 'arabicshape' 和 'delcombine' (这些是全局选项)。
另见 |arabic.txt|。
*'arabicshape'* *'arshape'*
*'noarabicshape'* *'noarshape'*
'arabicshape' 'arshape' 布尔型 (缺省打开)
全局
{Vi 无此功能}
{仅当编译时加入 |+arabic| 特性才有效}
如果打开且 'termbidi' 关闭,启动必须的可见字符的校正,以正确显示阿拉伯
语言。本质上它打开了字型重整;这是一个广义的术语,它包括:
a) 根据词内位置 (开头、中间、结尾和单独出现) 改变/调整字符的形状。
b) 启动合成字符的能力
c) 启动一些字符所需的组合
如果关闭,字符显示回复到每个字符单独显示的方式。
阿拉伯语是一个复杂的语言,还需要其他的设置。详见 |arabic.txt|。
*'autoindent'* *'ai'* *'noautoindent'* *'noai'*
'autoindent' 'ai' 布尔型 (缺省关闭)
局部于缓冲区
开启新行时 (插入模式下输入 <CR>,或者使用 "o" 或 "O" 命令),从当前行复
制缩进距离。如果你在新行除了 <BS> 或 CTRL-D 以外不输入任何东西,然后输
入 <Esc>、CTRL-O 或 <CR>,缩进又被删除。移动光标到其它行也有同样的效
果,除非 'cpoptions' 里包含 'I' 标志位。
如果打开自动缩进,排版 (用 "gq" 命令或者插入模式下到达了 'textwidth')
使用第一行的缩进距离。
打开 'smartindent' 或 'cindent' 时,缩进的修改方式有所不同。
置位 'paste' 选项时,'autoindent' 选项被复位。
{Vi 稍有不同: Vim 里输入 <Esc> 或 <CR> 删除缩进后,上下移动把光标放在
删除的缩进之后;Vi 则把光标放在已删除的缩进的某处}。
*'autoread'* *'ar'* *'noautoread'* *'noar'*
'autoread' 'ar' 布尔型 (缺省关闭)
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
如果发现文件在 Vim 之外修改过而在 Vim 里面没有的话,自动重新读入。
如果文件在外部被删除,不会这么做。|timestamp|
如果该选项有局部值,使用下面的命令切换回直接使用全局值:
:set autoread<
*'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} 命令转
到别的文件时亦然。
注意 有些命令不使用 'autowrite' 选项。为此目的,可用 'autowriteall'。
*'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
'autowriteall' 'awa' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
和 'autowrite' 类似,但也适用于 ":edit"、":enew"、":quit"、":qall"、
":exit"、":xit"、":recover" 和关闭 Vim 窗口。
置位本选项也意味着 Vim 的行为就像打开 'autowrite' 一样。
*'background'* *'bg'*
'background' 'bg' 字符串 (缺省为 "dark" 或 "light")
全局
{Vi 无此功能}
设为 "dark" 时,Vim 试图使用深色背景上看起来舒服的颜色。如果设为
"light",Vim 会试图使用在浅色背景上看起来舒服的颜色。其它的值都是非法
的。Vim 试图根据你使用的终端确定其缺省值,但不见得总做的对。
设置该选项不改变背景色,它告诉 Vim 背景颜色应该看起来怎么样。要改变背
景色,见 |:hi-normal|。
如果设置 'background',Vim 会根据新值调整缺省的颜色组。但语法高亮使用
的颜色不会改变。
已经载入色彩方案时 ("colors_name" 变量已设置),设置 'background' 会重
新载入色彩方案。如果色彩方案根据 'background' 调整,这不错。但如果颜色
方案自己设置 'background',实际效果可能就被撤销了。如果需要的话,先删
除 "colors_name" 变量。
如果这样复原 'background' 为其缺省值:
:set background&
Vim 会猜测其值。GUI 里应该没有问题,其它情况下 Vim 可能不一定能猜对。
启动 GUI 时,'background' 的缺省值是 "light"。如果 .gvimrc 里没有设置
该值,而 Vim 检测到背景实际上很深,'background' 会设为 "dark"。但这在
.gvimrc 读入_之后_才发生 (因为窗口需要被打开才能发现实际的背景色)。要
避免这一点,在 .gvimrc 里放上 ":gui" 命令以强迫打开 GUI 窗口。它应在使
用 'background' 的值的命令之前 (比如,在 ":syntax on" 之前)。通常,该
选项应在 .vimrc 文件里设置。可能和终端的名字有关。比如:
:if &term == "pcterm"
: set background=dark
:endif
如果设置该选项,高亮组的缺省设置会发生改变。要进行其它设置,在设置
'background' 选项_之后_才使用 ":highlight" 命令。
该选项也在 "$VIMRUNTIME/syntax/syntax.vim" 文件里使用,用来选择语法高
亮的颜色。在改变此选项后,你必须再次载入 syntax.vim 才能看到效果。这可
以通过 ":syntax on" 完成。
*'backspace'* *'bs'*
'backspace' 'bs' 字符串 (缺省为 "")
全局
{Vi 无此功能}
影响 <BS>、<Del>、CTRL-W 和 CTRL-U 在插入模式下的工作方式。它是逗号分
隔的项目列表。每个项目允许一种退格删除的内容:
值 效果
indent 允许在自动缩进上退格
eol 允许在换行符上退格 (连接行)
start 允许在插入开始的位置上退格;CTRL-W 和 CTRL-U 到达插入开始的位
置时停留一次。
如果该值为空,使用 Vi 兼容的退格方式。
为了和 5.4 及更早的版本后向兼容:
值 效果
0 等同于 ":set backspace=" (Vi 兼容)
1 等同于 ":set backspace=indent,eol"
2 等同于 ":set backspace=indent,eol,start"
如果你的 <BS> 或 <Del> 键不合你的期望,见 |:fixdel|。
注意: 如果置位 'compatible',该选项被设为 ""。
*'backup'* *'bk'* *'nobackup'* *'nobk'*
'backup' 'bk' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
覆盖文件前创建一个备份。文件成功写入后保留该备份。如果你不想保留备份文
件,但希望写入期间能有备份,复位该选项并置位 'writebackup' 选项
(这是缺省行为)。如果你完全不想要备份文件,同时复位两个选项 (如果你的文
件系统差不多满了,这会有用)。更多的解释可见 |backup-table|。
如果匹配 'backupskip' 模式,无论如何都不会建立备份。
如果设置 'patchmode',备份文件会换名成为文件的旧版本。
注意: 如果置位 'compatible',该选项被复位。
*'backupcopy'* *'bkc'*
'backupcopy' 'bkc' 字符串 (Vi 在 Unix 上的缺省: "yes",否则: "auto")
全局
{Vi 无此功能}
写回文件并建立备份时,本选项指定它应如何完成。这是逗号分隔的单词列表。
主要的值是:
"yes" 复制文件,然后覆盖原来的文件
"no" 给文件换名,然后写入一个新文件
"auto" 两者哪个更好就用哪个
可以和上面的一起使用的附加设置包括:
"breaksymlink" 写入时总是断开符号链接
"breakhardlink" 写入时总是断开硬链接
复制文件并覆盖原来的文件:
- 需要额外的时间复制文件。
+ 如果文件有特殊属性,是 (硬 / 符号) 链接或者有资源分叉 (resource
fork),都能保存下来。
- 如果文件是一个链接,备份文件名使用链接的名字,而不是实际文件的。
给文件换名并写入新文件:
+ 很快。
- 有时不是所有的文件属性都能被复制到新文件里。
- 如果文件是链接,新文件将不再是链接。
"auto" 值是一个折衷: 如果 Vim 看到文件换名可以没有副作用 (属性可以被传
递而文件也不是链接),就使用换名方式。如果遇到问题,就使用复制方式。
"breaksymlink" 和 "breakhardlink" 值可以和 "yes"、"no" 以及 "auto" 中
的任何一个混合使用。如果包含,它们迫使 Vim 总是使用 "no" 选项完全相同
的步骤断开符号链接或者硬链接: 给原来的文件换名并成为备份文件,在原来文
件的位置写入新的文件内容。这可以用于,比如说,所有的文件或者是符号链接
或者是硬链接的源代码树。这样,任何的改变都应该会保留在本地源代码树中,
而不影响原来的代码。
*crontab*
一种情形下 "no" 和 "auto" 可能会有问题: 一个程序打开文件、启用 Vim 编
辑该文件、然后测试已打开的文件是否发生改变 (通过文件描述符)。该测试总
是会检查备份文件而不是新建立的文件。"crontab -e" 就是这样一个例子。
用复制方式时,原来的文件会被清空,然后填入新的文本。这意味着保护位、拥
有者和原来文件的符号链接都保持不变。但备份文件是一个新的文件,拥有者是
编辑文件的人,所在的组是原来文件所在的组。如果这不行,组的保护位设得和
其它人 (非用户和组成员) 的保护位相同。
如果文件被换名,事情就刚好相反: 备份文件有着和原来文件相同的属性,而新
写的文件由当前用户拥有。如果文件曾是 (硬/符号) 链接,新文件不再是了!
这就是为什么 "auto" 值不为链接文件换名的原因。新写入文件的拥有者和所属
组会设得和原来的文件相同。但系统可能拒绝这么做,这种情形下,"auto" 值
仍然会选择不用换名方式。
*'backupdir'* *'bdir'*
'backupdir' 'bdir' 字符串 (Amiga 的缺省: ".,t:",
MS-DOS 和 Win32: ".,c:/tmp,c:/temp"
Unix: ".,~/tmp,~/")
全局
{Vi 无此功能}
逗号分隔的备份文件的目录名列表。
- 备份文件会在第一个可能的目录里建立。
- 空意味着不会建立备份文件 ('patchmode' 是不会工作的!)。写入也可能
因此而失败。
- 目录 "." 意味着把备份文件放在被编辑文件的相同目录里。
- "./" (或 MS-DOS 等环境的 ".\") 开始的目录意味着把备份文件放在被编辑
文件所在的相对位置。开头的 "." 由被编辑文件的路径名替换。
(目录中间的 "." 没有特殊含义)。
- 逗号之后的空格被忽略,其它的空格视为目录名的一部分。要在目录命令开头
包含空格,在它之前加入反斜杠。
- 要在目录名包含逗号,在它之前加入反斜杠。
- 目录名可以用 '/' 结尾。
- 环境变量被扩展 |: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 上: "_")
全局
{Vi 无此功能}
附加到文件名后面的字符串,以构造备份文件的名字。缺省值很特别,因为它可
以避免不小心覆盖已有的且带有备份的文件。你可能喜欢使用 ".bak",但要确
保不存在已经带有 ".bak" 而且你想保留的文件。
只能使用普通的文件名字符。"/\*?[|<>" 都不合法。
如果你喜欢保留很多备份,可以用 BufWritePre 自动命令,使之在写入文件前
改变 'backupext',以包含写入的时间。
:au BufWritePre * let &bex = '-' . strftime("%Y%b%d%X") . '~'
'backupdir' 可用来把备份放在不同的目录里。
*'backupskip'* *'bsk'*
'backupskip' 'bsk' 字符串 (缺省: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*")
全局
{Vi 无此功能}
{仅当编译时加入 |+wildignore| 特性才有效}
文件名模式列表。如果其中某个模式匹配要写入的文件名,不建立它的备份文
件。同时测试指定的文件名和它的完整路径名。模式的使用方式和 |:autocmd|
类同,见 |autocmd-patterns|。
小心特殊字符,见 |option-backslash|。
如果没有定义 $TMPDIR、$TMP 或 $TEMP,缺省值就不包含它们。"/tmp/*" 只用
于 Unix。
注意 这里不扩展环境变量。如果你想要用 $HOME,必须显式地对其扩展,例
如:
:let backupskip = escape(expand('$HOME'), '\') . '/tmp/*'
注意 缺省值也确保 "crontab -e" 能工作 (如果给原来文件换名来建立备份,
crontab 不会看到新建立的文件)。另见 'backupcopy' 和 |crontab|。
*'balloondelay'* *'bdlay'*
'balloondelay' 'bdlay' 数值型 (缺省: 600)
全局
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
弹出气泡之前以毫秒计的延迟。见 |balloon-eval|。
*'ballooneval'* *'beval'* *'noballooneval'* *'nobeval'*
'ballooneval' 'beval' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
打开 |balloon-eval| 功能。
*'balloonexpr'* *'bexpr'*
'balloonexpr' 'bexpr' 字符串 (缺省 "")
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
计算气泡显示文本的表达式。只在 'ballooneval' 打开时才使用。它用到以下
变量:
v:beval_bufnr 要显示气泡的缓冲区号
v:beval_winnr 窗口编号
v:beval_lnum 行号
v:beval_col 列号 (字节位置)
v:beval_text 鼠标指针所在或之后的单词
表达式的计算不能有副作用!
例如:
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
注意: 只有光标在文本字符上的时候才会显示气泡。如果 'balloonexpr' 的计
算结果非空,Vim 不会试图发送消息给外部调试器 (Netbeans 或 Sun
Workshop)。
表达式的计算可能在沙盘 |sandbox| 里进行,见 |sandbox-option|。
计算 'balloonexpr' 时,不能改变文本或跳到别的窗口 |textlock|。
要检查气泡文本是否可以包含换行符:
if has("balloon_multiline")
如果支持,"\n" 字符开启新行。如果表达式计算结果为 |List|,这相当于把每
个列表项目当作字符串,然后之间用 "\n" 连接。
*'binary'* *'bin'* *'nobinary'* *'nobin'*
'binary' 'bin' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
本选项应该在编辑二进制文件之前设置。你也可以用 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' 布尔型 (缺省打开)
全局
{Vi 无此功能} {仅适用于 MS-DOS}
如果打开,调用 BIOS 得到键盘字符。这对检测 CTRL-C 更有效,但只适用于控
制台模式。如果在通过窗口连接的终端上使用,复位此选项。
另见 |'conskey'|。
*'bomb'* *'nobomb'*
'bomb' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+multi_byte| 特性才有效}
写入文件时,如果满足以下条件,在文件头部写入 BOM (Byte Order Mark,字
节顺序标记):
- 打开本选项
- 关闭 'binary' 选项
- 'fileencoding' 是 "utf-8"、"ucs-2"、"ucs-4" 或它们的 little/big
endian (高位在右侧/左侧的字节序) 变种。
有些应用程序使用 BOM 识别文件的编码。通常用于 MS-Windows 上的 UCS-2
文件。对别的程序而言,这会造成麻烦,比如: "cat file1 file2" 使得 file2
的 BOM 出现在结果文件的中间。
读入文件时,如果 'fileencodings' 以 "ucs-bom" 开头,Vim 会检查 BOM 是
否存在,并相应地设置 'bomb'。
除非置位 'binary',BOM 会从首行上移去,所以编辑时你看不到它。如果你没
有改变相应设置,写回文件时恢复 BOM。
*'breakat'* *'brk'*
'breakat' 'brk' 字符串 (缺省为 " ^I!@*-+;:,./?")
全局
{Vi 无此功能}
{仅当编译时加入 |+linebreak| 特性才有效}
如果打开 'linebreak',本选项让你选择可以在什么字符上换行。只能用 ASCII
字符,但如果 'encoding' 是 8 位编码,也可以用 8 位的字符。
*'browsedir'* *'bsdir'*
'browsedir' 'bsdir' 字符串 (缺省为 "last")
全局
{Vi 无此功能} {仅适用于 Motif 和 Win32 GUI}
文件浏览器使用的目录:
last 使用文件浏览器最近访问相同的目录。
buffer 使用相关缓冲区的目录。
current 使用当前目录。
{path} 使用指定目录。
*'bufhidden'* *'bh'*
'bufhidden' 'bh' 字符串 (缺省: "")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+quickfix| 特性才有效}
本选项指定缓冲区不再出现于窗口时的行为:
<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' 布尔型 (缺省: 打开)
局部于缓冲区
{Vi 无此功能}
如果置位本选项,缓冲区在缓冲区列表里显示。如果复位,缓冲区不能用
":bnext"、"ls"、Buffers 菜单等访问。
Vim 为只用来记住文件名或位置标记的缓冲区复位本选项。Vim 在开始编辑缓冲
区时置位本选项,但用 ":buffer" 移动到缓冲区时不会。
*'buftype'* *'bt'* *E382*
'buftype' 'bt' 字符串 (缺省: "")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+quickfix| 特性才有效}
本选项的值指定缓冲区的类型:
<empty> 普通缓冲区
nofile 和文件不相关且不会写回的缓冲区
nowrite 不会写回的缓冲区
acwrite 缓冲区总是用 BufWriteCmd 自动命令写回 {仅当编译时加入
|+autocmd| 特性才有效}
quickfix quickfix 缓冲区,包含错误列表 |:cwindow| 或位置列表
|:lwindow|
help 帮助缓冲区 (你不应该手动设置本值)
本选项和 'bufhidden' 和 'swapfile' 一起使用,指定特殊的缓冲区类型。见
|special-buffers|。
修改本选项要小心。它有很多副作用!
"quickfix" 缓冲区只用于错误列表和位置列表。用 |:cwindow| 和 |:lwindow|
命令设置本值,不要直接修改它。
"nofile" 和 "nowrite" 缓冲区很类似:
都是: 缓冲区不写回磁盘。":w" 不能工作 (":w filename" 仍然可
以)。
都是: 缓冲区永远不会认为是 |'modified'| (修改过的)。
没有警告说改变会丢失,即使你退出 Vim 时也是如此。
都是: 交换文件只有在使用超量内存时才会建立 (如果复位
'swapfile',无论如何也不会有交换文件)。
只限 nofile: 缓冲区名是固定的,不被视为文件名来处理。|:cd| 命令也不
会修改它。
*E676*
"acwrite" 隐含意味着缓冲区名和文件不相关,类似于 "nofile",但它会被写
回。所以,和 "nofile" 与 "nowrite" 不同,可以 ":w" 而且修改过的缓冲区
没有保存不能被放弃。写入操作要有匹配的 |BufWriteCmd|、|FileWriteCmd|
和 |FileAppendCmd| 自动命令。
*'casemap'* *'cmp'*
'casemap' 'cmp' 字符串 (缺省: "internal,keepascii")
全局
{Vi 无此功能}
{仅当编译时加入 |+multi_byte| 特性才有效}
指定改变字母大小写的细节。它包含以下单词,以逗号分隔:
internal 使用内部大小写映射函数,当前的 locale 不改变大小写映
射。这只影响 'encoding' 为 Unicode 编码、"latin1" 或
"iso-8859-15" 的情况。如果没有 "internal",使用系统库
函数 (如果有的话) towupper() 和 towlower()。
keepascii ASCII 字符 (0x00 到 0x7f),使用美国的大小写映射,当前
locale 不起作用。这可能只影响土耳其语。
*'cdpath'* *'cd'* *E344* *E346*
'cdpath' 'cd' 字符串 (缺省: 等价于 $CDPATH 或 ",,")
全局
{Vi 无此功能}
{仅当编译时加入 |+file_in_path| 特性才有效}
这是一个目录列表。使用 |:cd| 和 |:lcd| 命令时,如果要查找相对路径 (不
以 "/"、"./" 或 "../" 开始),在这里搜索目录。
'cdpath' 选项的值和 |'path'| 有相同的形式和语义。另见
|file-searching|。
缺省值取自 $CDPATH,并在前面附加 ",",以便先搜索当前目录。
如果取自 $CDPATH 的缺省值不是你想要的,在 vimrc 文件里加入下面命令的修
改版本以覆盖之:
:let &cdpath = ',' . substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
('cdpath' 的内容可传递给外壳以便扩展文件名)。
*'cedit'*
'cedit' 字符串 (Vi 缺省: "",Vim 缺省: CTRL-F)
全局
{Vi 无此功能}
{仅当编译时加入 |+vertsplit| 特性才有效}
用于命令行模式打开命令行窗口的键。
'compatible' 关闭时,缺省值为 CTRL-F。
只允许不可显示的键。
该键可以用单个字符的形式指定,但不易输入,建议使用 <> 记法。例如:
:set cedit=<C-Y>
:set cedit=<Esc>
|Nvi| 也有该选项,但只使用第一个字符。
见 |cmdwin|。
*'charconvert'* *'ccv'* *E202* *E214* *E513*
'charconvert' 'ccv' 字符串 (缺省为 "")
全局
{仅当编译时加入 |+multi_byte| 和 |+eval| 特性才有效}
{Vi 无此功能}
用于进行字符编码转换的表达式。文件读写时如果和期望的编码不同,计算本
表达式。
如果内部支持 iconv() 函数并且它能完成本次转换,不使用 'charconvert'。
iconv() 更好,因为它快得多。
读入标准输入 |--| 时不使用 '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。
使用 'charconvert' 时,Vim 不进行加密。如果你希望转换后加密文件,
'charconvert' 需要自己负责这一点。
为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
*'cindent'* *'cin'* *'nocindent'* *'nocin'*
'cindent' 'cin' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+cindent| 特性才有效}
打开自动 C 程序缩进。'cinkeys' 说明如何设置插入模式下启动重新缩进的热
键,'cinoptions' 说明如何设置你喜欢的缩进风格。
如果 'indentexpr' 非空,它否决 'cindent' 的设置。
如果没有打开 'lisp',而 'indentexpr' 和 'equalprg' 都为空,"=" 操作符
使用本算法缩进,而不调用外部程序。
见 |C-indenting|。
如果你不喜欢 'cindent' 的工作方式,可以试试 'smartindent' 选项或者
'indentexpr'。
如果置位 'paste',不使用本选项。
注意: 如果置位 'compatible',本选项被复位。
*'cinkeys'* *'cink'*
'cinkeys' 'cink' 字符串 (缺省为 "0{,0},0),:,0#,!^F,o,O,e")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+cindent| 特性才有效}
键列表,在插入模式输入这些键时,当前行被重新缩进。只有打开 'cindent'
而且 'indentexpr' 为空时才会用到。
本选项的格式见 |cinkeys-format|。
见 |C-indenting|。
*'cinoptions'* *'cino'*
'cinoptions' 'cino' 字符串 (缺省为 "")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+cindent| 特性才有效}
'cinoptions' 影响 'cindent' 重新缩进 C 程序行的方式。
|cinoptions-values| 说明如何设置本选项的值,而 |C-indenting| 提供总体
的 C 缩进方式的信息。
*'cinwords'* *'cinw'*
'cinwords' 'cinw' 字符串 (缺省为 "if,else,while,do,for,switch")
局部于缓冲区
{Vi 无此功能}
{仅当编译时同时加入 |+cindent| 和 |+smartindent| 特性
才有效}
如果使用 'smartindent' 或 'cindent',这些关键字在下一行开启额外的缩
进。对于 'cindent',只有在合适的地方才会这么做 (在 {} 里)。
注意 'ignorecase' 对 'cinwords' 没有影响。如果希望忽略大小写,包含关键
字所有的大小写: "if,If,IF"。
*'clipboard'* *'cb'*
'clipboard' 'cb' 字符串 (X-windows 的缺省为
"autoselect,exclude:cons\|linux",
其它为 "")
全局
{Vi 无此功能}
{仅有在 GUI 版本或者包含 |+xterm_clipboard| 特性时才有
效}
该选项是逗号分隔的名字列表。
识别以下名字:
unnamed 如果包含,Vim 使用剪贴板寄存器 '*' 来执行所有的抽出、
删除、修改和放置操作,而不是通常使用的无名寄存器。除非
显式指定了寄存器,这时不管 'clipboard' 是不是包含
"unnamed" 都使用指定的寄存器。剪贴板寄存器总是可以显式
地用 "* 记法来访问。另见 |gui-clipboard|。
autoselect 和 'guioptions' 的 'a' 标志位工作方法类似: 如果存在,
无论什么时候启动可视模式或者可视区域扩展,Vim 都试图成
为窗口系统全局选择区的拥有者,或者把选择的文本放置到选
择区寄存器 "* 使用的剪贴板上。详见 |guioptions_a| 和
|quotestar|。如果激活 GUI,使用 'guioptions' 的 'a' 标
志位。如果没有激活 GUI,使用本 "autoselect" 标志位。
也适用于无模式的选择。
autoselectml 类似于 "autoselect",但只适用于无模式的选择。可以和
'guioptions' 的 'A' 标志位相比拟。
exclude:{pattern}
定义用来匹配终端名 'term' 的模式。匹配的终端不连接到 X
服务器。可用于以下这种情形:
- 在控制台上运行 Vim,
- $DISPLAY 的设置使得应用程序在另一个显示上打开,
- 不希望在控制台上连接到 X 服务器,但希望在终端模拟器
上如此。
如果永远不想连接到 X 服务器,使用:
exclude:.*
这和 |-X| 参数的效果相同。
注意 如果没有到 X 服务器的连接,窗口标题不会复原,而剪
贴板也无法访问。
忽略 'magic' 的值,{pattern} 的解释总是假定 'magic' 打
开。
选项值的其余部分用于 {pattern},本项目必须是最后一个项
目。
*'cmdheight'* *'ch'*
'cmdheight' 'ch' 数值型 (缺省为 1)
全局
{Vi 无此功能}
命令行使用的屏幕行数。有助于避免 |hit-enter| 提示。
此选项值保存在每个标签页里,从而每个标签页可有不同的值。
*'cmdwinheight'* *'cwh'*
'cmdwinheight' 'cwh' 数值型 (缺省为 7)
全局
{Vi 无此功能}
{仅当编译时加入 |+vertsplit| 特性才有效}
命令行窗口的屏幕行数。|cmdwin|
*'columns'* *'co'* *E594*
'columns' 'co' 数值型 (缺省为 80 或终端宽度)
全局
{Vi 无此功能}
屏幕的列数。通常,它由终端初始化代码设置,不需要手动完成。另见
|posix-screen-size|。
如果 Vim 运行 GUI 或者在可改变大小的窗口里,设置此选项可以改变窗口的大
小。如果你只想设置 GUI 的大小,在 |gvimrc| 文件里放入设置命令。
如果你设置此选项而 Vim 无法改变物理的显示列数,显示可能会混乱。GUI 没
有这种约束,但 Vim 限制能在屏幕上显示的行数。你可以用此命令得到可用的
最大窗口宽度:
:set columns=9999
最小值为 12,最大值为 10000。
*'comments'* *'com'* *E524* *E525*
'comments' 'com' 字符串 (缺省
"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+comments| 特性才有效}
逗号分隔的可以开始注释行的字符串列表。见 |format-comments|。
|option-backslash| 说明如何包含空格和使用反斜杠。
*'commentstring'* *'cms'* *E537*
'commentstring' 'cms' 字符串 (缺省为 "/*%s*/")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
注释行的样板。该值里面的 "%s" 被注释文本替换。目前,只用于为折叠增加标
志。见 |fold-marker|。
*'compatible'* *'cp'* *'nocompatible'* *'nocp'*
'compatible' 'cp' 布尔型 (缺省打开,如果找到 |vimrc| 或 |gvimrc| 文件
则为关闭)
全局
{Vi 无此功能}
本选项的效果是使得 Vim 或者更兼容 Vi,或者以更有用的方式工作。
这是一个特殊的选项,因为它的置位与复位影响到其他的设置。非 常 小 心:
置位或者复位本选项会产生很多意想不到的效果: 映射以不同的方式进行解释,
撤销的行为也有所不同,不一而足。如果你在 vimrc 文件里设置此选项,最好
放在相当靠前的位置。
缺省打开本选项,而各种选项使用 Vi 的缺省。本缺省值是为那些希望像 Vi 那
样使用 Vim 的人准备的,他们可能都不 (想) 知道 'compatible' 选项。
如果 Vim 启动时找到 |vimrc| 或 |gvimrc| 文件,关闭本选项,而没有修改的
选项都设置为 Vim 的缺省。这意味着如果存在 |vimrc| 或 |gvimrc| 文件,
Vim 使用 Vim 的缺省,否则使用 Vi 的缺省。(注意: 这不适用于系统范围的
vimrc 或 gvimrc 文件,也不适用 -u 参数给定的文件)。另见
|compatible-default| 和 |posix-compliance|。
你也可以用 "-C" 参数置位此选项,或用 "-N" 复位。见 |-C| 和 |-N|。
关闭本选项使得有不同 Vi 和 Vim 缺省的选项使用 Vim 的缺省值。见下面 '+'
标注的选项。其它选项没有影响。
一旦打开此选项,若干其它选项会被置位或复位,使得 Vim 尽可能的和 Vi 兼
容。见下表。这可以用来回复到 Vi 兼容的编辑状态。
另见 'cpoptions'。
选项 + 设置值 效果
'allowrevins' 关闭 没有 CTRL-_ 命令
'backupcopy' Unix: "yes" 备份文件由复制产生
其它: "auto" 复制或者换名产生备份文件
'backspace' "" 普通的退格
'backup' 关闭 没有备份文件
'cindent' 关闭 不待开 C 代码的缩进
'cedit' + "" 没有打开 |cmdwin| 的键
'cpoptions' + (所有标志位) Vi 兼容的标志位
'cscopetag' 关闭 ":tag" 不使用 cscope
'cscopetagorder' 0 见 |cscopetagorder|
'cscopeverbose' 关闭 见 |cscopeverbose|
'digraph' 关闭 没有二合字母
'esckeys' + 关闭 插入模式不使用 <Esc> 开始键码的键
'expandtab' 关闭 制表不扩展为空格
'fileformats' + "" 没有自动的文件格式检测
"dos,unix" 除了 DOS、Windows 或 OS/2 外
'formatoptions' + "vt" Vi 兼容的排版选项
'gdefault' 关闭 ":s" 没有缺省的 'g' 标志位
'history' + 0 没有命令行历史
'hkmap' 关闭 没有希伯来语键盘映射
'hkmapp' 关闭 没有根据读音的希伯来语键盘映射
'hlsearch' 关闭 没有搜索匹配的高亮
'incsearch' 关闭 没有增量搜索
'indentexpr' "" 没有基于表达式的缩进
'insertmode' 关闭 不以插入模式启动
'iskeyword' + "@,48-57,_" 关键字包含字母数字和 '_'
'joinspaces' 打开 句号后插入两个空格
'modeline' + 关闭 没有模式行
'more' + 关闭 列表不暂停
'revins' 关闭 没有反向插入
'ruler' 关闭 没有标尺
'scrolljump' 1 滚动不跳跃
'scrolloff' 0 没有滚动偏移
'shiftround' 关闭 缩进不取整到 shiftwidth 的倍数
'shortmess' + "" 不缩短信息
'showcmd' + 关闭 不显示命令字符
'showmode' + 关闭 不显示当前模式
'smartcase' 关闭 没有忽略大小写的自动切换
'smartindent' 关闭 没有智能缩进
'smarttab' 关闭 没有智能制表大小
'softtabstop' 0 制表总是使用 'tabstop' 个位置
'startofline' 打开 一些命令到行首
'tagrelative' + 关闭 标签文件名不是相对的
'textauto' + 关闭 没有自动文本模式检测
'textwidth' 0 没有自动行回绕
'tildeop' 关闭 波浪符不是操作符
'ttimeout' 关闭 没有终端超时
'whichwrap' + "" 左右移动不回绕
'wildchar' + CTRL-E 只有在当前值为 <Tab> 时,使用 CTRL-E
用于命令行补全
'writebackup' 打开或关闭 取决于 +writebackup 特性
*'complete'* *'cpt'* *E535*
'complete' 'cpt' 字符串 (缺省: ".,w,b,u,t,i")
局部于缓冲区
{Vi 无此功能}
本选项控制关键字补全 |ins-completion| 在使用 CTRL-P 或 CTRL-N 时如何工
作,也用于整行的补全 |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 等同于 "]"
卸载的缓冲区不会载入,因而它们的自动命令 |:autocmd| 也不会执行,这使得
有些文件的补全效果出人意表 (比如 gzipped 压缩的文件)。整行补全也不会扫
描卸载的缓冲区。
缺省是 ".,w,b,u,t,i",它意味着扫描:
1. 当前缓冲区
2. 其它窗口的缓冲区
3. 其它载入的缓冲区
4. 卸载的缓冲区
5. 标签
6. 头文件
如你所知,CTRL-N 和 CTRL-P 可用于完成任何基于 'iskeyword' 的扩展 (比如
字典 |i_CTRL-X_CTRL-K|、头文件里的模式 |i_CTRL-X_CTRL-I|、标签
|i_CTRL-X_CTRL-]| 和普通的扩展)。
*'completefunc'* *'cfu'*
'completefunc' 'cfu' 字符串 (缺省: empty)
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+eval| 和 +insert_expand 特性才有效}
本选项指定插入模式补全 CTRL-X CTRL-U 使用的函数。|i_CTRL-X_CTRL-U|
|complete-functions| 解释如何调用该函数以及它应该返回何值。
*'completeopt'* *'cot'*
'completeopt' 'cot' 字符串 (缺省: "menu,preview")
全局
{仅当编译时加入 |+insert_expand| 特性才有效}
{Vi 无此功能}
逗号分隔的选项列表,用于插入模式的补全 |ins-completion|。支持的值是:
menu 使用弹出菜单来显示可能的补全。只有匹配多于一个且有足够的颜
色时才显示该菜单。|ins-completion-menu|
menuone 即使只有一个匹配,也使用弹出菜单。可用于匹配有附加信息的情
况,例如,它来自的文件。
longest 只插入匹配的最长公共文本。如果显示菜单,用 CTRL-L 来插入更
多的字符。是否忽略大小写取决于补全的类型。缓冲区文本使用
'ignorecase' 选项。
preview 在预览窗口里显示当前选择的补全的额外信息。只能和 "menu" 或
"menuone" 搭配使用。
*'confirm'* *'cf'* *'noconfirm'* *'nocf'*
'confirm' 'cf' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
如果 'confirm' 打开,一些通常因为缓冲区有未保存的改变而失败的操作,比
如 ":q" 和 ":e",会弹出对话框 |dialog|,询问你是否想保存当前 (一个或多
个) 文件。你仍然可以使用 ! 来无条件放弃 |abandon| 缓冲区。
如果 'confirm' 关闭,你仍然可以通过 |:confirm| 命令为单个命令启动确认
机制 (常用于映射)。
另见 |confirm()| 函数和 'guioptions' 的 'v' 标志位。
*'conskey'* *'consk'* *'noconskey'* *'noconsk'*
'conskey' 'consk' 布尔型 (缺省关闭)
全局
{Vi 无此功能} {仅适用于 MS-DOS}
如果打开,使用直接的控制台输入/输出来取得键盘字符。多数情况下这应该没
有问题。另见 |'bioskey'|。总共有三种可用的控制台输入方法:
'conskey' 'bioskey' 行动
开 开关均可 直接控制台输入
关 开 BIOS
关 关 标准输入
*'copyindent'* *'ci'* *'nocopyindent'* *'noci'*
'copyindent' 'ci' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
自动缩进新行时,复制已有的行的缩进结构。通常,用连续的制表,必要时后面
再跟若干空格,重新构造新缩进 (除非打开 |'expandtab'|,这时只用空格)。
打开此选项使得新行准确地复制已有行中用来缩进的所有字符。如果新的缩进比
已有行的缩进要多,多余部分的空白使用平常的填充方式。
注意: 如果置位 'compatible','copyindent' 被复位。
另见 'preserveindent'。
*'cpoptions'* *'cpo'*
'cpoptions' 'cpo' 字符串 (Vim 缺省: "aABceFs",
Vi 缺省: 所有的标志位)
全局
{Vi 无此功能}
单字符标志位的序列。每个字符的存在指示一种 vi 兼容的行为。可用于改变常
见或被认为是更好的 vi 不兼容的行为。
'cpoptions' 代表兼容性选项 "(compatible-options)"。
为了可读性起见,可以加入逗号。
建议使用 ":set" 的 "+=" 和 "-=" 特性,这可以避免未来版本增加新的标志位
时出现的问题 |add-option-flags|。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
注意: 如果应该使用 Vi 的缺省值且 $VIM_POSIX 环境变量存在时,本选项设为
POSIX 的缺省值 |posix|。这意味着行为尽量符合 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 搜索从任何光标所在的匹配的结束处继续,但不超过下一行的
开始处。如果没有此标志位,搜索从光标位置之后的一个字符
开始。使用 'c',"abababababab" 重复用 "/abab" 模式时只
有三个匹配,没有 'c' 的话有五个。
*cpo-C*
C 不串接反斜杠开始的被 source 的行。见
|line-continuation|。
*cpo-d*
d 'tags' 选项使用 "./" 不意味着使用相对于当前文件的标签
文件,而是当前目录下的标签文件。
*cpo-D*
D 带有字符参数的普通模式命令不使用 CTRL-K 输入二合字母,
比如 |r|、|f| 和 |t|。
*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' 列也用于文本的回绕行。
*cpo-o*
o 不记住搜索命令的行偏移并将它用于下一个搜索。
*cpo-O*
O 如果文件被覆盖,即使开始编辑时该文件还不存在,也不会抱
怨。这项措施保护你不会意外地覆盖别人建立的文件。Vi 并
不会为此抱怨。
*cpo-p*
p Vi 兼容的 Lisp 缩进。如果不包含,使用稍好一些的算法。
*cpo-P*
P 如果包含,当当前缓冲区还没有文件名并且同时包含 'F' 标
志位 |cpo-F| 时,附加到文件后的 ":write" 命令会设置当
前缓冲区的文件名。
*cpo-q*
q 连接多行时,把光标留在连接两行时应该在的位置。
*cpo-r*
r 重复 ("." 命令) 使用 "/" 来重复搜索命令,而不一定使用
实际用过的搜索字符串。
*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-!*
! 重复过滤命令时,使用最后使用的外部命令,不管它是什么。
否则,使用最近的 -过滤- 命令。
*cpo-$*<