OPTIONS
*options.txt* For Vim version 6.4. 最近更新: 2006年3月
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 guioptions-=T guioptions+=T
另见上面的 |: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' 的副作用。
{only 仅当编译时加入 +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
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 无此功能}
*: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 脚本而想让它使用别的 'makeprog',但你又不想改
变 C 源代码使用的值。可用这个命令:
:setlocal makeprg=perlmake
只要把局部值设为空,你就可以切换回全局值:
:setlocal makeprg=
这只适用于字符串选项。布尔型选项需要使用 "<" 标志:
:setlocal autoread<
要 注意,对非布尔型的选项使用 "<" 会把全局值复制给局部值,而不是切换到直接使用
全局值的情形 (如果后来又改变全局值,就能看出两者的区别了)。
注意: 更多的全局选项将来可能会成为全局-局部类型。那时,在全局选项上使用
":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> 就会设置新值。
对于窗口和缓冲区特定的选项,设置的是最近访问窗口里的选
项值。除非它是帮助窗口,这时使用帮助窗口下方的窗口 (选
项窗口本身不算)。
{only 仅当编译时加入 |+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" 以外,不支持别的命令 (有人可能会用模式行创建一个文本
的特洛伊木马文件)。
提示: 除了设置选项以外,如果你需要做别的事情,可以定义自动命令并检查文件是否包
含特定字符串。例如:
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' 都不存在,
缓冲区在建立时从当前活动的缓冲区复制选项。
不是所有版本都支持所有的选项。要测试选项 "foo" 是否可以 ":set",使用
"exists('&foo')"。这不意味设置的值会被记住而且能工作。有些选项是隐藏的,意味着
你可以设置,但该值不会被记住。要测试是否真的支持选项 "foo",用
"exists('+foo')"。
*E355*
|Q_op| 提供包含简短描述的选项列表,可用它进行跳转。
*'aleph'* *'al'* *aleph* *Aleph*
'aleph' 'al' 数值型 (MS-DOS 的缺省为 128,否则为 224)
全局
{Vi 无此功能}
{only 仅当编译时加入 |+rightleft| 特性才有效}
希伯来字母表的第一个字母的 ASCII 码。希伯来模式下的键盘映射例程,包括
插入模式 (如果置位 hkmap) 和命令行模式 (如果按了 CTRL-_),都使用
[aleph..aleph+26] 范围输出希伯来字符。
aleph=128 适用于 PC 代码,而 aleph=224 适用于 ISO 8859-8。
见 |rileft.txt|。
*'allowrevins'* *'ari'* *'noallowrevins'* *'noari'*
'allowrevins' 'ari' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{only 仅当编译时加入 |+rightleft| 特性才有效}
允许插入和命令行模式使用 CTRL-_。缺省是关闭的,以免用户想输入 SHIFT-_
时不小心输入 CTRL-_ 而进入反向插入模式又不知道怎么退出。见 'revins'。
注意: 如果置位 'compatible',该选项被复位。
*'altkeymap'* *'akm'* *'noaltkeymap'* *'noakm'*
'altkeymap' 'akm' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{only 仅当编译时加入 |+farsi| 特性才有效}
如果打开,第二语言是波斯语。编辑模式下如果打开 'allowrevins' 的话,
CTRL-_ 切换波斯语和英语的键盘映射表。
如果关闭,在希伯来语和英语之间切换键盘映射表。可用于以原始方式,即英语
(从左到右模式),启动 Vim,又可以使用第二语言即波斯语或者希伯来语 (从右
到左模式) 的场合。见 |farsi.txt|。
*'ambiwidth'* *'ambw'*
'ambiwidth' 'ambw' 字符串 (缺省: "single")
全局
{Vi 无此功能}
{only 仅当编译时加入 |+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 无此功能}
{only 只有在编译时加入 Mac OS X 的 GUI 支持才有效}
只有在 Mac OS X v10.2 或以后版本的 Vim 的 GUI 版本上,本选项才有效。如
果打开,Vim 使用平滑 ("反锯齿") 字体。在特定显示上的特定大小的字体,可
能会较易阅读。有时,如果 'guifont' 设为缺省值 (空字符串),置位该选项会
引起问题。
*'autochdir'* *'acd'* *'noautochdir'* *'noacd'*
'autochdir' 'acd' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{only 仅当编译时加入 |+netbeans_intg| 或
|+sun_workshop| 特性才有效}
如果打开,Vim 会在你打开文件、切换缓冲区、删除缓冲区或者打开/关闭窗口
时改变当前工作目录的值。具体来说,就是打开或者选择的文件所在的目录。提
供该选项的目的是和 Sun ONE Studio 4 Enterprise Edition 发行的 Vim 后向
兼容。
*'arabic'* *'arab'* *'noarabic'* *'noarab'*
'arabic' 'arab' 布尔型 (缺省关闭)
局部于窗口
{Vi 无此功能}
{only 仅当编译时加入 |+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 无此功能}
{only 仅当编译时加入 |+arabic| 特性才有效}
如果打开且 'termbidi' 关闭,启动必须的可见字符的校正,以正确显示阿拉伯
语言。本质上它打开了字型重整;这是一个广义的术语,它包括:
a) 根据词内位置 (开头、中间、结尾和单独出现) 改变/调整字符的形状。
b) 启动合成字符的能力
c) 启动一些字符所需的组合
如果关闭,字符显示回复到每个字符单独显示的方式。
阿拉伯语是一个复杂的语言,还需要其他的设置。详见 |arabic.txt|。
*'autoindent'* *'ai'* *'noautoindent'* *'noai'*
'autoindent' 'ai' 布尔型 (缺省关闭)
局部于缓冲区
开启新行时 (插入模式下输入 <CR>,或者使用 "o" 或 "O" 命令),从当前行复
制缩进距离。如果你在新行除了 <BS> 或 CTRL-D 以外不输入任何东西,然后输
入 <Esc> 或 <CR>,缩进又被删除。如果打开自动缩进,排版 (用 "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-^
命令时进行;用 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" 而且你想保留的文件。
只能使用普通的文件名字符。"/\*?[|<>" 都不合法。
*'backupskip'* *'bsk'*
'backupskip' 'bsk' 字符串 (缺省: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*")
全局
{Vi 无此功能}
{only 仅当编译时加入 |+wildignore| 特性才有效}
文件名模式列表。如果其中某个模式匹配要写入的文件名,不建立它的备份文
件。同时测试指定的文件名和它的完整路径名。模式的使用方式和 |:autocmd|
类同,见 |autocmd-patterns|。
小心特殊字符,见 |option-backslash|。
如果没有定义 $TMPDIR、$TMP 或 $TEMP,缺省值就不包含它们。"/tmp/*" 只用
于 Unix。
*'balloondelay'* *'bdlay'*
'balloondelay' 'bdlay' 数值型 (缺省: 600)
全局
{Vi 无此功能}
{only 仅当编译时加入 |+balloon_eval| 特性才有效}
弹出气泡之前以毫秒计的延迟。见 |balloon-eval|。
*'ballooneval'* *'beval'* *'noballooneval'* *'nobeval'*
'ballooneval' 'beval' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{only 仅当编译时加入 |+balloon_eval|,还有
|+sun_workshop| 或 |+netbeans_intg| 特性才有效}
打开 |balloon-eval| 功能。
*'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 无此功能} {only 只适用于 MS-DOS}
如果打开,调用 bios 得到键盘字符。这对检测 CTRL-C 更有效,但只适用于控
制台模式。如果在通过窗口连接的终端上使用,复位此选项。
另见 |'conskey'|。
*'bomb'* *'nobomb'*
'bomb' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
{only 仅当编译时加入 |+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 无此功能}
{only 仅当编译时加入 |+linebreak| 特性才有效}
如果打开 'linebreak',本选项让你选择可以在什么字符上换行。
*'browsedir'* *'bsdir'*
'browsedir' 'bsdir' 字符串 (缺省为 "last")
全局
{Vi 无此功能} {only 只适用于 Motif 和 Win32 GUI}
文件浏览器使用的目录:
last 使用文件浏览器最近访问相同的目录。
buffer 使用相关缓冲区的目录。
current 使用当前目录。
{path} 使用指定目录。
*'bufhidden'* *'bh'*
'bufhidden' 'bh' 字符串 (缺省: "")
局部于缓冲区
{Vi 无此功能}
{only 仅当编译时加入 |+quickfix| 特性才有效}
本选项指定缓冲区不再出现于窗口时的行为:
<empty> 跟随全局 'hidden' 选项
hide 隐藏缓冲区 (不卸载),即使没有置位 'hidden' 也如此
unload 卸载缓冲区,即使置位 'hidden' 或者使用 |:hide| 时也如
此
delete 从缓冲区列表里删除缓冲区,即使置位 'hidden' 或者使用
|:hide| 时也如此,类似于 |:bdelete|
wipe 从缓冲区列表里真正删除缓冲区,即使置位 'hidden' 或者使
用 |:hide| 时也如此,类似于 |:bwipeout|
本选项和 'buftype' 和 'swapfile' 一起使用,指定特殊的缓冲区的类型。见
|special-buffers|。
*'buflisted'* *'bl'* *'nobuflisted'* *'nobl'* *E85*
'buflisted' 'bl' 布尔型 (缺省: 打开)
局部于缓冲区
{Vi 无此功能}
如果置位本选项,缓冲区在缓冲区列表里显示。如果复位,缓冲区不能用
":bnext"、"ls"、Buffers 菜单等访问。
Vim 为只用来记住文件名或位置标记的缓冲区复位本选项。Vim 在开始编辑缓冲
区时置位本选项,但用 ":buffer" 移动到缓冲区时不会。
*'buftype'* *'bt'* *E382*
'buftype' 'bt' 字符串 (缺省: "")
局部于缓冲区
{Vi 无此功能}
{only 仅当编译时加入 |+quickfix| 特性才有效}
本选项的值指定缓冲区的类型:
<empty> 普通缓冲区
nofile 和文件不相关且不会写回的缓冲区
nowrite 不会写回的缓冲区
quickfix quickfix 缓冲区,包含错误列表 |:cwindow|
help 帮助缓冲区 (你不应该手动设置本值)
本选项和 'bufhidden' 和 'swapfile' 一起使用,指定特殊的缓冲区类型。见
|special-buffers|。
修改本选项要小心。它有很多副作用!
"quickfix" 缓冲区用于错误列表。用 |:cwindow| 命令设置本值,不要直接修
改它。
"nofile" 和 "nowrite" 缓冲区很类似:
都是: 缓冲区不写回磁盘。":w" 不能工作 (":w filename" 仍然可
以)。
都是: 缓冲区永远不会认为是 |'modified'| (修改过的)。
没有警告说改变会丢失,即使你退出 Vim 时也是如此。
都是: 交换文件只有在使用超量内存时才会建立 (如果复位
'swapfile',无论如何也不会有交换文件)。
只限 nofile: 缓冲区名是固定的,不被视为文件名来处理。|:cd| 命令也不
会修改它。
*'casemap'* *'cmp'*
'casemap' 'cmp' 字符串 (缺省: "internal,keepascii")
全局
{Vi 无此功能}
指定改变字母大小写的细节。它包含以下单词,以逗号分隔:
internal 使用内部大小写映射函数,当前的 locale 不改变大小写映
射。这只影响 'encoding' 为 Unicode 编码的情况。如果没
有 "internal",使用系统库函数 (如果有的话) towupper()
和 towlower()。
keepascii ASCII 字符 (0x00 到 0x7f),使用美国的大小写映射,当前
locale 不起作用。这可能只影响土耳其语。
*'cdpath'* *'cd'* *E344* *E346*
'cdpath' 'cd' 字符串 (缺省: 等价于 $CDPATH 或 ",,")
全局
{Vi 无此功能}
{only 仅当编译时加入 |+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 无此功能}
{only 仅当编译时加入 |+vertsplit| 特性才有效}
用于命令行模式打开命令行窗口的键。
'compatible' 关闭时,缺省值为 CTRL-F。
只允许不可显示的键。
该键可以用单个字符的形式指定,但不易输入,建议使用 <> 记法。例如:
:set cedit=<C-Y>
:set cedit=<Esc>
|Nvi| 也有该选项,但只使用第一个字符。
见 |cmdwin|。
*'charconvert'* *'ccv'* *E202* *E214* *E513*
'charconvert' 'ccv' 字符串 (缺省为 "")
全局
{only 仅当编译时加入 |+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 无此功能}
{only 仅当编译时加入 |+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 无此功能}
{only 仅当编译时加入 |+cindent| 特性才有效}
键列表,在插入模式输入这些键时,当前行被重新缩进。只有打开 'cindent'
而且 'indentexpr' 为空时才会用到。
本选项的格式见 |cinkeys-format|。
见 |C-indenting|。
*'cinoptions'* *'cino'*
'cinoptions' 'cino' 字符串 (缺省为 "")
局部于缓冲区
{Vi 无此功能}
{only 仅当编译时加入 |+cindent| 特性才有效}
'cinoptions' 影响 'cindent' 重新缩进 C 程序行的方式。
|cinoptions-values| 说明如何设置本选项的值,而 |C-indenting| 提供总体
的 C 缩进方式的信息。
*'cinwords'* *'cinw'*
'cinwords' 'cinw' 字符串 (缺省为 "if,else,while,do,for,switch")
局部于缓冲区
{Vi 无此功能}
{only 仅当编译时同时加入 |+cindent| 和 |+smartindent|
特性才有效}
如果使用 'smartindent' 或 'cindent',这些关键字在下一行开启额外的缩
进。对于 'cindent',只有在合适的地方才会这么做 (在 {} 里)。
注意 'ignorecase' 对 'cinwords' 没有影响。如果希望忽略大小写,包含关键
字所有的大小写: "if,If,IF"。
*'clipboard'* *'cb'*
'clipboard' 'cb' 字符串 (X-windows 的缺省为
"autoselect,exclude:cons\|linux",
其它为 "")
全局
{Vi 无此功能}
{only 只有在 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 无此功能}
{only 仅当编译时加入 |+vertsplit| 特性才有效}
命令行窗口的屏幕行数。|cmdwin|
*'columns'* *'co'* *E594*
'columns' 'co' 数值型 (缺省为 80 或终端宽度)
全局
{Vi 无此功能}
屏幕的列数。通常,它由终端初始化代码设置,不需要手动完成。
如果 Vim 运行 GUI 或者在可改变大小的窗口里,设置此选项可以改变窗口的大
小。如果你只想设置 GUI 的大小,在 |gvimrc| 文件里放入设置命令。
如果你设置此选项而 Vim 无法改变物理的显示列数,显示可能会混乱。
最小值为 12,最大值为 10000。
*'comments'* *'com'* *E524* *E525*
'comments' 'com' 字符串 (缺省
"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-")
局部于缓冲区
{Vi 无此功能}
{only 仅当编译时加入 |+comments| 特性才有效}
逗号分隔的可以开始注释行的字符串列表。见 |format-comments|。
|option-backslash| 说明如何包含空格和使用反斜杠。
*'commentstring'* *'cms'* *E537*
'commentstring' 'cms' 字符串 (缺省为 "/*%s*/")
局部于缓冲区
{Vi 无此功能}
{only 仅当编译时加入 |+folding| 特性才有效}
注释行的样板。该值里面的 "%s" 被注释文本替换。目前,只用于为折叠增加标
志。见 |fold-marker|。
*'compatible'* *'cp'* *'nocompatible'* *'nocp'*
'compatible' 'cp' 布尔型 (缺省打开,如果找到 .vimrc 则为关闭)
全局
{Vi 无此功能}
本选项的效果是使得 Vim 或者更兼容 Vi,或者以更有用的方式工作。
这是一个特殊的选项,因为它的置位与复位影响到其他的设置。非 常 小 心:
置位或者复位本选项会产生很多意想不到的效果: 映射以不同的方式进行解释,
撤销的行为也有所不同,不一而足。如果你在 vimrc 文件里设置此选项,最好
放在相当靠前的位置。
缺省打开本选项,而各种选项使用 Vi 的缺省。本缺省值是为那些希望像 Vi 那
样使用 Vim 的人准备的,他们可能都不 (想) 知道 'compatible' 选项。如果
Vim 启动时找到 ".vimrc" 文件,本选项被关闭,而没有修改的选项都设置为
Vim 的缺省。这意味着,如果 ".vimrc" 文件存在,Vim 使用 Vim 的缺省,否
则,使用 Vi 的缺省。(注意: 这不适用于系统范围的 vimrc 文件)。另见
|compatible-default|。
你也可以用 "-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' 选项给出的文件
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-]| 和普通的扩展)。
*'confirm'* *'cf'* *'noconfirm'* *'nocf'*
'confirm' 'cf' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
如果 'confirm' 打开,一些通常因为缓冲区有未保存的改变而失败的操作,比
如 ":q" 和 ":e",会弹出对话框 |dialog|,询问你是否想保存当前 (一个或多
个) 文件。你仍然可以使用 ! 来无条件放弃 |abandon| 缓冲区。
如果 'confirm' 关闭,你仍然可以通过 |:confirm| 命令为单个命令启动确认
机制 (常用于映射)。
另见 |confirm()| 函数和 'guioptions' 的 'v' 标志位。
*'conskey'* *'consk'* *'noconskey'* *'noconsk'*
'conskey' 'consk' 布尔型 (缺省关闭)
全局
{Vi 无此功能} {only 只适用于 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 的缺省值。
包含 行为
*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-g*
g 没有参数的 ":edit" 会转到第一行。
*cpo-i*
i 如果包含,读入时被中断的文件会使其状态成为已修改。
*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-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-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-y*
y 抽出 (yank) 命令可以用 "." 重复。
*cpo-!*
! 重复过滤命令时,使用最后使用的外部命令,不管它是什么。
否则,使用最近的 -过滤- 命令。
*cpo-$*
$ 对一行进行修改 (change) 时,不重显该行,但在修改文本的
尾部放上 '$'。被修改的文本会被新输入的文本覆盖。如果你
输入任何把光标移开插入点的命令,该行被重显。
*cpo-%*
% "%" 命令执行 Vi 兼容的匹配行为。
不识别 "#if"、"#endif" 等。
不识别 "/*" 和 "*/"。
单引号和双引号里的括号也被计算在内,这使得包含括号的字
符串常数会影响匹配。比如,在 "if (strcmp("foo(", s))"
这样的行里,第一个括号不匹配最后一个。如果不包含本标志
位,单引号和双引号里的括号被特殊处理。如果匹配引号之外
的括号,引号之内的所有内容被忽略。如果匹配引号之内的括
号,会找到它的匹配 (如果有的话)。这对 C 程序很管用。
*cpo-star*
* ":*" 和 ":@" 相同。如果不包含,":*" 是 ":'<,'>" 的别
名,选择可视区域。
*cpo-<*
< 在映射、缩写和菜单命令的 "to" 部分不识别 |<>| 形式的特
别键码。比如,命令 ":map X <Tab>" 使得 X 被映射为:
包含 '<' 时: "<Tab>" (5 个字符)
排除 '<' 时: "^I" (^I 是真正的 <Tab>)
另见上面的 'k' 标志位。
*'cscopepathcomp'* *'cspc'*
'cscopepathcomp' 'cspc' 数值型 (缺省为 0)
全局
{only 仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
决定标签列表里显示多少路径部分。
见 |cscopepathcomp|。
*'cscopeprg'* *'csprg'*
'cscopeprg' 'csprg' 字符串 (缺省为 "cscope")
全局
{only 仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
指定执行 cscope 的命令。见 |cscopeprg|。
为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
*'cscopequickfix'* *'csqf'*
'cscopequickfix' 'csqf' 字符串 (缺省为 "")
全局
{only 仅当编译时加入 |+cscope| 和 |+quickfix| 特性才有
效}
{Vi 无此功能}
设置是否使用 quickfix 窗口来显示 cscope 的结果。
见 |cscopequickfix|。
*'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
'cscopetag' 'cst' 布尔型 (缺省关闭)
全局
{only 仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
让标签命令使用 cscope。见 |cscope-options|。
注意: 如果置位 'compatible',该选项被复位。
*'cscopetagorder'* *'csto'*
'cscopetagorder' 'csto' 数值型 (缺省为 0)
全局
{only 仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
决定 ":cstag" 执行查找的顺序。见 |cscopetagorder|。
注意: 如果置位 'compatible',该选项被设为 0。
*'cscopeverbose'* *'csverb'*
*'nocscopeverbose'* *'nocsverb'*
'cscopeverbose' 'csverb' 布尔型 (缺省关闭)
全局
{only 仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
增加 cscope 数据库时,给出消息。见 |cscopeverbose|。
注意: 如果置位 'compatible',该选项被复位。
*'debug'*
'debug' 字符串 (缺省为 "")
全局
{Vi 无此功能}
如果设为 "msg",别的情况下会忽略的错误信息此时都会给出。可用于调试
'foldexpr' 或 'indentexpr'。
*'define'* *'def'*
'define' 'def' 字符串 (缺省为 "^\s*#\s*define")
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
用以找到宏定义的模式。这是一个搜索模式,和 "/" 命令使用的相同。本选项
用于 "[i" 和 "[d" 等命令 |include-search|。'isident' 选项在该匹配之后
用于识别定义名本身:
{'define' 的匹配}{非标识符字符}{定义名}{非标识符字符}
|option-backslash| 说明如何插入反斜杠以包含空格和反斜杠。
缺省值是为 C 程序设计的。C++ 也可用,但如果也要包含常数类型定义的话:
^\(#\s*define\|[a-z]*\s*const\s*[a-z]*\)
用 ":set" 命令设置时,要加倍反引号!
*'delcombine'* *'deco'* *'nodelcombine'* *'nodeco'*
'delcombine' 'deco' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{only 仅当编译时加入 |+multi_byte| 特性才有效}
如果编辑 Unicode 时打开本选项,退格和普通模式的 "x" 删除单个组合用字
符。如果关闭 (缺省值) 每个字符连同它的组合用字符一并删除。
注意: 置位 'delcombine' 时,"xx" 可能和 "2x" 不一样!
这对阿拉伯语、希伯来语和许多其他语言有用,那里需要在基础字符的上方使用
组合用字符,而有时只想删除组合用的部分。
*'dictionary'* *'dict'*
'dictionary' 'dict' 字符串 (缺省为 "")
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
逗号分隔的文件名列表,用于为关键字补全命令查找单词 |i_CTRL-X_CTRL-K|。
每个文件由单词的列表构成,可以每行一个单词,也可以每行多个,以非关键字
字符分隔 (建议使用空白)。最大的行长为 510 个字节。
要在文件名里包含逗号,在它之前加上反斜杠。逗号之后的空格被忽略,其它情
况下空格视为文件的一部分。|option-backslash| 说明如何使用反斜杠。
什么地方可以找到单词列表呢?
- FreeBSD 上,有文件 "/usr/share/dict/words"。
- Simtel 归档里,在 "msdos/linguist" 目录里找找。
- GNU 工具集里的 "miscfiles"。
建议使用 |:set+=| 和 |:set-=| 来从列表里加减目录。这可以避免未来版本使
用其它缺省值出现的问题。
为了安全原因,反引号不能用于此选项里。
*'diff'* *'nodiff'*
'diff' 布尔型 (缺省关闭)
局部于窗口
{Vi 无此功能}
{only 仅当编译时加入 |+diff| 特性才有效}
加入本窗口到显示文件差异的窗口组里。见 |vimdiff|。
*'dex'* *'diffexpr'*
'diffexpr' 'dex' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{only 仅当编译时加入 |+diff| 特性才有效}
用于计算文件两个不同版本的 ed 风格的差异文件的表达式。见
|diff-diffexpr|。
为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
*'dip'* *'diffopt'*
'diffopt' 'dip' 字符串 (缺省为 "filler")
全局
{Vi 无此功能}
{only 仅当编译时加入 |+diff| 特性才有效}
diff 模式的设置选项。由以下几个项目组成。全都是可选的。项目之间由逗号
分隔。
filler 显示填充行,使得文本和在相同位置多出文本的其它
窗口同步。多用于并排并且置位 'scrollbind' 的窗
口。
context:{n} 在更改和包含未更改行的折叠之间保留的上下文行数
{n} (译者注: 即差异文周围不被折叠的行数)。如果
忽略,使用六行上下文。见 |fold-diff|。