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*
        数值型          值为数值
        字符串          值为字符串


1. 设置选项 *set-option* *E764*

*: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-HCTRL-? 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 要使之生效,你需要重启。

2. 自动设置选项 *auto-setting*

除了用 ":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" 行的文件做一些事。

3. 选项总结 *option-summary*

下表给出所有选项,包括全名和,如果有的话,它们的缩写。可任意使用两种形式。 本文档里,布尔型选项的 "置位" 意味着输入 ":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-OCTRL-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-WCTRL-U 在插入模式下的工作方式。它是逗号分 隔的项目列表。每个项目允许一种退格删除的内容: 值 效果 indent 允许在自动缩进上退格 eol 允许在换行符上退格 (连接行) start 允许在插入开始的位置上退格;CTRL-WCTRL-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-PCTRL-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-NCTRL-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-$*<