Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
15547 lines (13444 sloc) 688 KB
/*-+ v 系统变量 o 选项 c 命令 f 函数 e 自动命令的事件
+-*/buff _ 缓冲区
+-*/+-*/badd c 增加缓冲区到缓冲区列表
*:bad* *:badd*
:bad[d] [+lnum] {fname}
在缓冲区列表里添加文件名 {fname},但是不把该文件载入内存。
如果指定了 "lnum",那么第一次进入缓冲区时,光标会停留在那一
行。注意 其它 + 后面的命令将被忽略。
+-*/+-*/ball c 为缓冲区列表里的每个缓冲区打开一个窗口
:[N]ba[ll] [N] *:ba* *:ball* *:sba* *:sball*
:[N]sba[ll] [N] 重新排列屏幕,给缓冲区列表中的每一个缓冲区打开一个窗口。如果给
出计数,则计数为打开窗口的最多数目。''winheight' 也限制了打开
窗口的数目 (当前缀 |:vertical| 时则为 'winwidth')。
Buf/Win Enter/Leave 不会在新窗口执行,只有真正进入这些窗口时才
会。
如果使用 |:tab| 修饰符,新窗口在新标签页上打开,直到用完
'tabpagemax' 个标签页为止。
+-*/+-*/bdelete c 从缓冲区列表删除缓冲区
:[N]bd[elete][!] *:bd* *:bdel* *:bdelete* *E516*
:bd[elete][!] [N]
卸载缓冲区 [N] (默认:当前缓冲区) 并且从缓冲区列表里删除该缓冲
区。如果缓冲区被改动过,那么该命令将失败,除非使用 [!],但是这
样所有的改动都会丢失,文件不受影响。该缓冲区的所有窗口都会关
闭。如果缓冲区 [N] 是当前的缓冲区,那么 Vim 会显示另一个缓冲区
来代替。具体来说,Vim 会选择跳转表里最新且已经载入的缓冲区。
实际上,该缓冲区还没有被完全删除,但是缓冲区列表把它除名
|unlisted-buffer|,而且该缓冲区中选项的值、变量、映射和缩写被
清空。
+-*/+-*/bufdo c 为所有列表内缓冲区执行命令
*:bufdo*
:bufdo[!] {cmd} 在缓冲区列表的每一个缓冲区里执行 {cmd}。
就像是: >
:bfirst
:{cmd}
:bnext
:{cmd}
等等……
< 如果当前文件不能被丢弃 |abandon|,并且没有使用 [!],命
令失败。
当在一个缓冲区里检测到错误,剩下的缓冲区不再访问。
跳过列表外缓冲区。
最后一个缓冲区 (或者出错的那个缓冲区) 成为当前缓冲区。
{cmd} 可以包含 '|' 来连接多个命令。
{cmd} 不能删除或添加缓冲区到缓冲区列表。
备注: 此命令执行时,通过把 Syntax 加入 'eventignore'
来屏蔽此自动命令事件。这样大大加快了每个缓冲区的编辑速
度。
{Vi 无此功能} {仅在编译时加入 |+listcmds| 特性才有效}
也参见 |:tabdo|、|:argdo| 和 |:windo|。
+-*/+-*/bufexists f 检查缓冲区是否存在
bufexists({expr}) *bufexists()*
返回数值,如果名为 {expr} 的缓冲区存在的话,返回非零。
如果 {expr} 参数是数值,指定缓冲区号。
如果 {expr} 参数是字符串,缓冲区的名字必须与其完全匹配。该名字
可以是:
- 相对于当前目录。
- 完整路径。
- 'buftype' 设为 "nofile" 的缓冲区名。
- URL 名。
列表外缓冲区也会被找到。
注意 帮助文件在 |:buffers| 里列出的是它们的短名字。但
bufexists() 需要它们的长名字才能找到它们。
bufexists() 可能报告缓冲区存在,但要使其名字可用于 |:buffer|
命令,可能需用到 |expand()|。尤其 MS-Windows 8.3 名字可能形
如 "c:\DOCUME~1"。
使用 "bufexists(0)" 可以测试是否存在轮换文件名。
*buffer_exists()*
已废弃的名字: buffer_exists()。
+-*/+-*/buffers c 列出缓冲区列表里的所有文件
:buffers[!] *:buffers* *:ls*
:ls[!] 显示所有缓冲区。例如:
+-*/+-*/bufhidden o 缓冲区不再在窗口显示时的行为
*'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 f 检查缓冲区是否存在并在列表内
buflisted({expr}) *buflisted()*
返回数值,如果名为 {expr} 的缓冲区在列表内的话 (置位了
'buflisted' 选项),返回非零。
{expr} 参数用法同 |bufexists()|。
+-*/+-*/buflisted o 缓冲区是否显示在缓冲区列表中
*'buflisted'* *'bl'* *'nobuflisted'* *'nobl'* *E85*
'buflisted' 'bl' 布尔型 (缺省: 打开)
局部于缓冲区
{Vi 无此功能}
如果置位本选项,缓冲区在缓冲区列表里显示。如果复位,缓冲区不能用
":bnext"、"ls"、Buffers 菜单等访问。
Vim 为只用来记住文件名或位置标记的缓冲区复位本选项。Vim 在开始编辑缓冲
区时置位本选项,但用 ":buffer" 移动到缓冲区时不会。
+-*/+-*/bufloaded f 检查缓冲区是否存在并已加载
bufloaded({expr}) *bufloaded()*
返回数值,如果名为 {expr} 的缓冲区存在且已载入的话 (在窗口显
示,或者至少被隐藏),返回非零。
{expr} 参数用法同 |bufexists()|。
+-*/+-*/bufname f 取得某缓冲区名
bufname({expr}) *bufname()*
返回缓冲区的名字,如同 ":ls" 命令显示的那样。
如果 {expr} 参数是数值,指定缓冲区号。数值零代表当前窗口的轮换
缓冲区。
如果 {expr} 参数是字符串,它用作 |file-pattern| 来匹配缓冲区名
字。这里总假设置位 'magic' 而 'cpoptions' 为空。如果有超过一个
匹配,返回空字符串。
"" 或 "%" 可用来指定当前缓冲区,"#" 指定轮换缓冲区。
完整的匹配优先,如果没有,也接受在缓冲区名的开始,结束和中间的
匹配。如果你只愿意接受完整的匹配,在模式的开始放上 "^",在结尾
放上 "$"。
先查找列表内缓冲区。如果列出缓冲区有唯一的匹配,返回之。不然,
再查找列表外的缓冲区。
如果 {expr} 是字符串,但你想用作缓冲区号,给它加零可以强制转化
为数值型: >
:echo bufname("3" + 0)
< 如果缓冲区不存在,或者没有名字,返回空字符串。 >
bufname("#") 轮换缓冲区名
bufname(3) 缓冲区 3 的名字
bufname("%") 当前缓冲区名
bufname("file2") 匹配 "file2" 的缓冲区名。
*bufnr()*
+-*/+-*/bufnr f 取得某缓冲区号
bufnr({expr} [, {create}])
返回缓冲区的编号,如同 ":ls" 命令显示的那样。关于 {expr} 的使
用,见上 |bufname()|。
如果不存在符合的缓冲区,返回 -1。或者,如果提供了 {create} 参
数而且非零,建立一个新的列表外缓冲区,并返回其编号。
bufnr("$") 是最后一个缓冲区: >
:let last_buffer = bufnr("$")
< 返回数值,即最大的已有的缓冲区的编号。注意 较小的编号不一定都
对应存在的缓冲区,因为 ":bwipeout" 可能永久地删除了部分的缓冲
区。用 bufexists() 可以测试缓冲区是否存在。
*buffer_number()*
已废弃的名字: buffer_number()。
*last_buffer_nr()*
bufnr("$") 已废弃的名字: last_buffer_nr()。
+-*/+-*/buftype o 缓冲区的特殊类型
*'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| 自动命令。
+-*/+-*/bunload c 卸载指定的缓冲区
:[N]bun[load][!] *:bun* *:bunload* *E515*
:bun[load][!] [N]
卸载缓冲区 [N] (默认:当前缓冲区)。原来占用的内存将被释放。该
缓冲区还保留在缓冲区列表里。
如果缓冲区被改动过,那么该命令将失败,除非使用 [!],但是这样所
有的改动都会丢失。
该缓冲区的所有窗口都会关闭。如果缓冲区 [N] 是当前的缓冲区,那
么 Vim 会显示另一个缓冲区来代替。具体来说,Vim 会选择跳转表里
最新且已经载入的缓冲区。
+-*/+-*/bwipeout c 真正删除一个缓冲区
:[N]bw[ipeout][!] *:bw* *:bwipe* *:bwipeout* *E517*
:bw[ipeout][!] {bufname}
:N,Mbw[ipeout][!]
:bw[ipeout][!] N1 N2 ...
类似 ":bdelete",但真正删除缓冲区。所有和缓冲区相关的信息都丢
失了。所有位置标记失效,选项丢失,诸如此类。除非你确切地知道自
己正在做什么,否则不要使用这个命令。
+-*/+-*/checktime c 检查载入缓冲区的时间标签
*:checkt* *:checktime*
:checkt[ime] 检查是否有缓冲区在 Vim 之外被改变。 该命令检查你是否有
文件的两个版本并给出警告。
如果它在自动命令、":global" 命令或者任何非键盘输入中调
用,实际的检查会延迟,直到副作用 (重新读入文件) 不会有
任何问题。
每个已读入的缓冲区会检查相关的文件是否被改变。如果是,
则 Vim 会采取行动。如果缓冲区没有修改过而且置位了
'autoread',缓冲区被重新读入。否则,你会被询问是否重新
读入文件。如果文件被删除,你会得到一个错误信息。如果文
件过去不存在但现在已经存在,你会得到一个警告。
一旦检查过某个文件,他的修改时间被重置。因而,你不会被
重复警告。
+-*/+-*/enew c 编辑新的无名缓冲区
*:ene* *:enew*
:ene[w] 编辑一个新的无名缓冲区。如果当前缓冲区已被修改,这会失
败,除非置位了 'hidden' 或者 'autowriteall' 并且文件能
够写入。
如果 'fileformats' 非空,其给出的第一个格式将用于新的
缓冲区上。如果 'fileformats' 为空,则使用当前缓冲区的
'fileformat'。
{Vi 无此功能}
+-*/+-*/files c 列出缓冲区列表的所有文件
:files[!] *:files*
:buffers[!] *:buffers* *:ls*
:ls[!] 显示所有缓冲区。例如:
+-*/+-*/getbufline f 得到指定缓冲区的行列表
getbufline({expr}, {lnum} [, {end}])
返回 {expr} 缓冲区的第 {lnum} 到 {end} (包含) 行的 |List|。如
果省略 {end},返回只有一行 {lnum} 的 |List|。
关于 {expr} 的用法,见上 |bufname()|。
{lnum} 和 {end} 可以使用 "$" 来表示缓冲区的最后一行。除此以
外,必须用数值。
如果 {lnum} 小于 1 或大于缓冲区的行数,返回空 |List|。
如果 {end} 大于缓冲区的行数,就把它当成缓冲区的行数。如果
{end} 在 {lnum} 之前,返回空 |List|。
此函数只能用于已经载入的缓冲区。未载入或不存在的缓冲区总是返回
空 |List|。
例如: >
:let lines = getbufline(bufnr("myfile"), 1, "$")
+-*/+-*/hidden o 当缓冲区被放弃 (|abandon|) 时不卸载之
*'hidden'* *'hid'* *'nohidden'* *'nohid'*
'hidden' 'hid' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
如果关闭,|abandon| 放弃时卸载缓冲区。如果打开,|abandon| 放弃时隐藏缓
冲区。当然,如果缓冲区仍然在别的窗口里显示,它不会被隐藏。
在缓冲区列表里移动的命令有时会隐藏缓冲区,即使关闭 'hidden' 选项也是如
此,条件是: 缓冲区被修改过、'autowrite' 关闭或者不能写入、并且使用 '!'
标志位。另见 |windows.txt|。
如果只想隐藏一个缓冲区,使用 'bufhidden' 选项。
":hide {command}" 为单个命令关闭本选项 |:hide|。
警 告: 对隐藏缓冲区的修改很容易忘记。":q!" 或 ":qa!" 时三思而后行!
+-*/+-*/hide c 为一个命令隐藏当前缓冲区
*:hide*
:hid[e] 除非是屏幕上的最后一个窗口,退出当前窗口,缓冲区被隐藏起来
(除非还有另一个窗口正在编辑它,或者 'bufhidden' 设置为
"unload" 或 "delete")。
如果这是当前标签页的最后一个窗口,关闭此标签页。|tab-page|
此命令不受 'hidden' 的值影响。
对缓冲区的改动既不写入文件,也不会丢失,所以这是个 "安全" 的命
令。
+-*/+-*/ls c 列出所有的缓冲区
:buffers[!] *:buffers* *:ls*
:ls[!] 显示所有缓冲区。例如:
+-*/+-*/modifiable o 可否修改文本
*'modifiable'* *'ma'* *'nomodifiable'* *'noma'*
'modifiable' 'ma' 布尔型 (缺省打开)
局部于缓冲区
{Vi 无此功能} *E21*
如果关闭,缓冲区的内容不能修改。'fileformat' 和 'fileencoding' 选项也
不能修改。
用 |-M| 命令行参数可以复位。
+-*/+-*/modified o 缓冲区已被修改
*'modified'* *'mod'* *'nomodified'* *'nomod'*
'modified' 'mod' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
如果打开,缓冲区被认为已修改。本选项在以下情形下被置位:
1. 上次写入后,对文本进行修改。使用 |undo| 命令回到原始的文本就会复位
本选项。但撤销写回缓冲区之前的修改又会打开本选项,因为文本和写入时
已经不同。
2. 'fileformat' 和 'fileencoding' 不同于原值。缓冲区读入或写回时设回原
值。":set nomodified" 命令则把 "原值" 设为当前值,并复位 'modified'
选项。
'buftype' 为 "nowrite" 或 "nofile" 时,本选项也可置位,但会被忽略。
+-*/+-*/readonly o 禁止写入缓冲区
*'readonly'* *'ro'* *'noreadonly'* *'noro'*
'readonly' 'ro' 布尔型 (缺省关闭)
局部于缓冲区
如果打开,除非使用 '!',不允许写入。它保护你不小心覆盖文件。如果 Vim
以只读模式启动 ("vim -R") 或者可执行文件的名字叫 "view",缺省打开。
用 ":w!" 以后,复位当前缓冲区的 'readonly' 选项,除非 'cpoptions' 里包
含 'Z' 标志位。
{Vi 无此功能:} 如果使用 ":view" 命令,新编辑的缓冲区也置位 'readonly'
选项。
+-*/+-*/sunhide c 等同于 "":unhide
:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
:[N]sun[hide] [N]
重新排列屏幕,给缓冲区列表中的每一个载入的缓冲区打开一个窗口。
如果给出计数,则计数为打开窗口的最多数目。
+-*/+-*/tabpagebuflist f 得到标签页里的缓冲区列表
tabpagebuflist([{arg}]) *tabpagebuflist()*
返回 |List|,每个项目是当前标签页里每个窗口相关联的缓冲区的编
号。
{arg} 指定使用的标签页的编号。如果省略,使用当前标签页。
如果 {arg} 非法,返回数值零。
要得到所有标签页里的所有缓冲区的列表,这样用: >
tablist = []
for i in range(tabpagenr('$'))
call extend(tablist, tabpagebuflist(i + 1))
endfor
< 注意 缓冲区可能出现于多于一个窗口里。
+-*/+-*/tabpagenr f 得到标签页号
tabpagenr([{arg}]) *tabpagenr()*
返回数值,当前标签页号。第一个标签页的编号为 1。
如果可选参数为 "$",返回最后一个标签页的编号 (即标签页总数)。
该数值可用于 |:tab| 命令。
+-*/+-*/tabpagewinnr f 类似于特定标签页里的 winnr()
tabpagewinnr({tabarg}, [{arg}]) *tabpagewinnr()*
类似于 |winnr()|,但使用标签页 {tabarg}。
{tabarg} 指定要使用的标签页号。
{arg} 的用法类似于 |winnr()|:
- 如果省略,返回当前窗口号,也就是转到该标签页时会使用的窗口。
- 如果是 "$",返回窗口的总数。
- 如果是 "#",返回上次的窗口编号。
用于的例子: >
tabpagewinnr(1) " 标签页 1 的当前窗口
tabpagewinnr(4, '$') " 标签页 4 的窗口总数
< 如果 {tabarg} 非法,返回零。
*tagfiles()*
+-*/+-*/undolevels o 最多可以撤销的改变个数
*'undolevels'* *'ul'*
'undolevels' 'ul' 数值型 (缺省为 100,Unix、VMS、Win32 和 OS/2 为 1000)
全局
{Vi 无此功能}
可以撤销的最大改变次数。因为撤销需要的信息保存在内存里,更大的数值导致
更多的内存被消耗 (不过,单个改变本来就可能使用不受限制的内存)。
设为 0 和 Vi 兼容: 一层撤销,而 "u" 可以撤销自身: >
set ul=0
< 你可以用在 'cpoptions' 里加入 'u' 标志位得到 Vi 的兼容性,同时可以使用
CTRL-R 来进行多次撤销。
另见 |undo-two-ways|。
设为负数完全关闭撤销功能: >
set ul=-1
< 如果单个改变也能使你内存溢出,这会有帮助。
另见 |clear-undo|。
+-*/+-*/undoreload o 保存缓冲区重载撤销的最大行数
*'undoreload'* *'ur'*
'undoreload' 'ur' 数值型 (缺省 10000)
全局
{Vi 无此功能}
重载缓冲区时为了可撤销,保存整个缓冲区。适用于 ":e!" 命令和在 Vim 之外
改变缓冲区时的情况。|FileChangedShell|
仅当本选项的值为负或行数小于此选项值时,进行保存。
设置此选项为零关闭重载的撤销。
为重载保存撤销时,不读入撤销文件。
注意 这会导致整个缓冲区被保存到内存。如果发生了内存溢出,设置此选项为较
小的值。
+-*/+-*/unhide c 为缓冲区列表里每个载入的文件打开窗口
:[N]unh[ide] [N] *:unh* *:unhide* *:sun* *:sunhide*
:[N]sun[hide] [N]
重新排列屏幕,给缓冲区列表中的每一个载入的缓冲区打开一个窗口。
如果给出计数,则计数为打开窗口的最多数目。
+-*/+-*/switchbuf _ 切换缓冲区
+-*/+-*/+-*/bNext c 转到缓冲区列表里的上一个缓冲区
:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
:[N]bp[revious][!] [N]
至缓冲区列表往前第 [N] 个缓冲区。[N] 默认是 1。如果到了缓冲区
列表的顶端,则从末尾往前循环。
关于 [!] 参见 |:buffer-!| 和 'switchbuf'。
+-*/+-*/+-*/bfirst c 转到缓冲区列表里的第一个缓冲区
*:bf* *:bfirst*
:bf[irst] 与 ":brewind" 相同。
+-*/+-*/+-*/blast c 转到缓冲区列表里的最后一个缓冲区
*:bl* *:blast*
:bl[ast][!] 至缓冲区列表中的最后一个缓冲区。如果列表为空,则转到最后一个列
表外缓冲区。
对于 [!] 参见 |:buffer-!|
+-*/+-*/+-*/bmodified c 转到缓冲区列表里的下一个修改过的缓冲区
:[N]bm[odified][!] [N] *:bm* *:bmodified* *E84*
至往后第 [N] 个修改过的缓冲区。备注: 这一命令同样也能找到列表
外缓冲区。如果没有修改的缓冲区,此命令失败。
+-*/+-*/+-*/bnext c 转到缓冲区列表里的下一个缓冲区
:[N]bn[ext][!] [N] *:bn* *:bnext* *E87*
至缓冲区列表里往后第 [N] 个缓冲区。[N] 默认是 1。如果到了缓冲
区列表的末尾,则从头循环。
关于 [!] 参见 |:buffer-!|。
如果你在帮助缓冲区里,这条命令让你跳到后面的帮助缓冲区 (如果有
的话)。同样,你在一个正常 (非帮助) 缓冲区里,就会使你跳到后面
的正常缓冲区。这样是为了在打开帮助的时候不会影响到浏览正常的代
码或文本。下面三个命令都是如此。
+-*/+-*/+-*/bprevious c 转到缓冲区列表里的上一个缓冲区
:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88*
:[N]bp[revious][!] [N]
至缓冲区列表往前第 [N] 个缓冲区。[N] 默认是 1。如果到了缓冲区
列表的顶端,则从末尾往前循环。
关于 [!] 参见 |:buffer-!| 和 'switchbuf'。
+-*/+-*/+-*/brewind c 转到缓冲区列表里的第一个缓冲区
*:br* *:brewind*
:br[ewind][!]
至缓冲区列表中的第一个缓冲区。如果列表为空,则转到第一个列表外
缓冲区。
对于 [!] 参见 |:buffer-!|
+-*/+-*/+-*/buffer c 转到缓冲区列表里的特定缓冲区
:[N]b[uffer][!] [N] *:b* *:bu* *:buf* *:buffer* *E86*
编辑缓冲区列表中第 [N] 个缓冲区,如果没指定 [N],就编辑当前的
缓冲区。关于 [!] 参见 |:buffer-!|。这个命令同样可以编辑不在列
表里的缓冲区,'buflisted' 不会因而被置位。
+-*/+-*/+-*/switchbuf o 设置切换到别的缓冲区时的行为
*'switchbuf'* *'swb'*
'switchbuf' 'swb' 字符串 (缺省为 "")
全局
{Vi 无此功能}
本选项控制缓冲区切换的行为。可能的值是 (逗号分隔的列表):
useopen 如果包含,跳到第一个打开的包含指定缓冲区的窗口 (如果有
的话)。
否则: 不检查其它窗口。
|quickfix| 命令在跳转到错误时 (":cc"、":cn"、"cp",等
等) 检查此设置。所有缓冲区相关的分割命令也会,比如
":sbuffer"、":sbnext" 或 ":sbrewind"。
usetab 类似于 "useopen",但也考虑其它标签页里的窗口。
split 如果包含,在载入缓冲区之前分割当前窗口。不然: 不分割,
使用当前窗口。在 |quickfix| 命令里用于显示错误。
newtab 类似于 "split",但打开新标签页。如果和 "split" 同时存
在,本值优先。
+-*/cmd _ 命令行
+-*/+-*/cedit o 打开命令行窗口的键
*'cedit'*
'cedit' 字符串 (Vi 缺省: "",Vim 缺省: CTRL-F)
全局
{Vi 无此功能}
{仅当编译时加入 |+vertsplit| 特性才有效}
用于命令行模式打开命令行窗口的键。
'compatible' 关闭时,缺省值为 CTRL-F。
只允许不可显示的键。
该键可以用单个字符的形式指定,但不易输入,建议使用 <> 记法。例如: >
:set cedit=<C-Y>
:set cedit=<Esc>
< |Nvi| 也有该选项,但只使用第一个字符。
见 |cmdwin|。
+-*/+-*/cmdheight o 命令行使用的行数
*'cmdheight'* *'ch'*
'cmdheight' 'ch' 数值型 (缺省为 1)
全局
{Vi 无此功能}
命令行使用的屏幕行数。有助于避免 |hit-enter| 提示。
此选项值保存在每个标签页里,从而每个标签页可有不同的值。
+-*/+-*/cmdwinheight o 命令行窗口的高度
*'cmdwinheight'* *'cwh'*
'cmdwinheight' 'cwh' 数值型 (缺省为 7)
全局
{Vi 无此功能}
{仅当编译时加入 |+vertsplit| 特性才有效}
命令行窗口的屏幕行数。|cmdwin|
+-*/+-*/cmenu c 为命令行模式增加菜单
*:cme* *:cmenu* *:cnoreme* *:cnoremenu*
*E330* *E327* *E331* *E336* *E333*
*E328* *E329* *E337* *E792*
要创建新的菜单项,使用 ":menu" 命令群。它们和 ":map" 命令群非常类似,但是第一
个参数是菜单项名。形式为 '.' 分隔的菜单或子菜单的路径,例如: >
+-*/+-*/cnoremenu c 类似于 "":noremenu"",但用于命令行模式
*:cme* *:cmenu* *:cnoreme* *:cnoremenu*
*E330* *E327* *E331* *E336* *E333*
*E328* *E329* *E337* *E792*
要创建新的菜单项,使用 ":menu" 命令群。它们和 ":map" 命令群非常类似,但是第一
个参数是菜单项名。形式为 '.' 分隔的菜单或子菜单的路径,例如: >
+-*/+-*/comclear c 清除所有用户自定的命令
:comc[lear] *:comc* *:comclear*
删除所有用户定义命令。
+-*/+-*/command c 建立用户自定的命令
:com[mand][!] [{attr}...] {cmd} {rep}
定义一个用户命令。命令的名字是 {cmd},而替换的文本是
{rep}。该命令的属性 (参考下面) 是 {attr}。如果该命令已
存在,报错,除非已经指定了一个 !,这种情况下命令被重定
义。
-nargs=0 不允许有参数 (缺省情况)
-nargs=1 要求一个参数
-nargs=* 允许任何数目的参数 (0,1 或更多)
-nargs=? 允许 0 或 1 个参数
-nargs=+ 必需给出参数,但是数目任意
-range 允许使用范围,缺省为当前行
-range=% 允许使用范围,缺省是整个文件 (1,$)
-range=N 出现在行号位置的一个数量 (缺省是 N) (类似于 |:split|)
-count=N 出现在行号位置或者作为首个参数的一个数量 (缺省是 N) (类似
于 |:Next|)。
指定 -count (不设缺省值) 等价于 -count=0。
-bang 这些命令可以使用一个 ! 修饰符 (和 :q 或 :w 类似)
-bar 这些命令可以跟随一个 "|" 和其它命令。那么命令参数中就
不允许有 "|" 。用一个 " 可以开始一个注释。
-register 给这些命令的第一个参数可以是一个可选的寄存器名
(和 :del,:put,:yank 类似)。
-buffer 这些命令仅在当前缓冲区里有效。
-complete=augroup 自动命令组
-complete=buffer 缓冲区名
-complete=command Ex 命令 (及其参数)
-complete=dir 目录名
-complete=environment 环境变量名
-complete=event 自动命令事件
-complete=expression Vim 表达式
-complete=file 文件和目录名
-complete=filetype 文件类型名 |'filetype'|
-complete=function 函数名
-complete=help 帮助主题
-complete=highlight 高亮组
-complete=mapping 映射名
-complete=menu 菜单
-complete=option 选项
-complete=shellcmd 外壳命令
-complete=syntax 语法文件名 |'syntax'|
-complete=tag 标签
-complete=tag_listfiles 标签,但敲入 CTRL-D 时显示文件名
-complete=var 用户变量
-complete=custom,{func} 用户定制的自动补全,通过 {func} 来定义
-complete=customlist,{func} 用户定制的自动补全,通过 {func} 来定义
注意 -range=N 和 -count=N 是互斥的,只应该指定其中的一个。
+-*/+-*/cunmenu c 删除命令行的菜单
*:cunme* *:cunmenu*
要删除一个菜单项或者整个子菜单,使用 umenu 命令,类似于 unmap 命令。例如: >
:unmenu! Edit.Paste
+-*/+-*/delcommand c 删除用户自定的命令
:delc[ommand] {cmd} *:delc* *:delcommand* *E184*
删除用户定义命令 {cmd}。
+-*/+-*/exusage c Ex 命令总览
*:exu* *:exusage*
:exu[sage] 显示 Ex 命令的帮助。目的是为了模拟对应的 Nvi 命令。
{Vi 无此功能}
+-*/+-*/getcmdline f 得到当前命令行
getcmdline() *getcmdline()*
返回当前命令行。只有在编辑命令行时有效,所以必须在
|c_CTRL-\_e| 或 |c_CTRL-R_=| 里使用。
例如: >
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
< 另见 |getcmdtype()|、|getcmdpos()| 和 |setcmdpos()|。
+-*/+-*/getcmdpos f 得到命令行里的光标位置
getcmdpos() *getcmdpos()*
返回命令行的字节计算的光标位置。第一列为 1。
只有在编辑命令行时有效,所以必须在 |c_CTRL-\_e| 或
|c_CTRL-R_=| 里使用。不然,返回 0。
另见 |getcmdtype()|、|setcmdpos()| 和 |getcmdline()|。
+-*/+-*/getcmdtype f 得到当前命令行的类型
getcmdtype() *getcmdtype()*
返回当前命令行类型。可能的返回值是:
: 普通 Ex 命令
> 调试模式命令 |debug-mode|
/ 正向搜索命令
? 反向搜索命令
@ |input()| 命令
- |:insert| 或 |:append| 命令
只能在编辑命令行时调用,因而必须在 |c_CTRL-\_e| 或
|c_CTRL-R_=| 里使用。否则,返回空字符串。
另见 |getcmdpos()|、|setcmdpos()| 和 |getcmdline()|。
*getcwd()*
+-*/+-*/help c 打开帮助窗口
*help* *<Help>* *:h* *:help* *<F1>* *i_<F1>* *i_<Help>*
<Help> 或
:h[elp] 打开一个窗口并以只读方式显示帮助文件。如果已经打开了一
个帮助窗口,就继续使用那个窗口。不然,如果当前窗口占据
了屏幕的完整宽度或者至少有 80 个字符宽,帮助窗口会出现
在当前窗口的正上方。再不然,新窗口就开在最上方。
如果主帮助文件有多个语言版本,'helplang' 选项选择使用
的语言。
{Vi 无此功能}
+-*/+-*/helpfind c 打开显示帮助窗口的对话框
*:helpfind* *:helpf*
:helpf[ind] 和 |:help| 类似,但用一个对话框来提示输入参数。
这只是为了向后兼容的需要。它现在执行 ToolBar.FindHelp
菜单项而不是内建的对话框。
{仅当编译时加入 |+GUI_GTK| 特性才有效}
{Vi 无此功能}
+-*/+-*/helpgrep c 类似于 "":grep"",但搜索帮助文件
*:helpg* *:helpgrep*
:helpg[rep] {pattern}[@xx]
搜索所有的帮助文本并给出一个匹配 {pattern} 行的列表。
跳转到第一个匹配。
可选的 [@xx] 指定只寻找 "xx" 语言里的匹配。
你可以用 |quickfix| 命令来浏览其它的匹配。例如,
|:cnext| 会跳到下一个。在 quickfix 窗口里,也可以用
|:cwindow| 得到所有的匹配的列表。
{pattern} 视为 Vim 的正规表达式 |pattern|。
不使用 'ignorecase',你可以加上 "\c" 来忽略大小写。
大小写敏感的搜索示例: >
:helpgrep Uganda
< 大小写不敏感的搜索示例: >
:helpgrep uganda\c
< 寻找中文帮助的搜索: >
:helpgrep backspace@cn
< 模式不支持换行符,必须在一行内匹配。为此,可用 |:grep|
代替,但要得到帮助文件的列表就比较复杂了。
后面不能跟其他的命令。其余部分都被当作模式的一部分。如
果需要,可以用 |:execute|。
不会在压缩的帮助文件里搜索 (Fedora 压缩帮助文件)。
{Vi 无此功能}
+-*/+-*/histadd f 在历史记录中加入一项
histadd({history}, {item}) *histadd()*
把字符串 {item} 加到历史 {history} 里。后者可以是:
*hist-names*
"cmd" 或 ":" 命令行历史
"search" 或 "/" 搜索模式历史
"expr" 或 "=" 输入表达式历史
"input" 或 "@" 输入行历史
如果 {item} 已经在历史里存在,它会被调整位置,从而成为最新的一
项。
返回结果为数值: 如果操作成功则为 1,不然返回 0。
例如: >
:call histadd("input", strftime("%Y %b %d"))
:let date=input("Enter date: ")
< 该函数在沙盘里不可用 |sandbox|。
+-*/+-*/histdel f 从历史记录中删除一项
histdel({history} [, {item}]) *histdel()*
清除 {history},换而言之,删除它所有的项目。|hist-names| 解释
{history} 的所有可能值。
如果 {item} 计算结果为字符串,它被看作正规表达式。从历史里删除
所有匹配该模式的项目 (如果有的话)。
必须匹配大小写,除非使用 "\c" |/\c|。
如果 {item} 的计算结果为数值,它被解释为索引值,见
|:history-indexing|。如果该索引存在,删除相应的项目。
返回结果为数值: 如果操作成功则为 1,不然返回 0。
例如:
清除表达式寄存器历史: >
:call histdel("expr")
<
删除所有 "*" 开始的搜索历史: >
:call histdel("/", '^\*')
<
下面三者是等价的: >
:call histdel("search", histnr("search"))
:call histdel("search", -1)
:call histdel("search", '^'.histget("search", -1).'$')
<
要删除最后的搜索模式,并在 "n" 命令和 'hlsearch' 里使用倒数第
二个模式: >
:call histdel("search", -1)
:let @/ = histget("search", -1)
+-*/+-*/histget f 从历史记录中提取一项
histget({history} [, {index}]) *histget()*
返回字符串,即 {history} 历史的第 {index} 项。|hist-names| 解
释 {history} 的所有可能值,而 |:history-indexing| 解释
{index}。如果没有这个项目,返回空字符串。如果忽略 {index},返
回历史里最近使用的项目。
例如:
重做历史里的倒数第二个搜索 >
:execute '/' . histget("search", -2)
< 定义 Ex 命令 ":H {num}",以重新执行 |:history| 输出的第 {num}
项。 >
:command -nargs=1 H execute histget("cmd", 0+<args>)
<
+-*/+-*/histnr f 取得某历史记录的最大索引号
histnr({history}) *histnr()*
返回当前项目在 {history} 里的编号。|hist-names| 解释 {history}
的所有可能值。
如果有错,返回 -1。
例如: >
:let inp_index = histnr("expr")
<
+-*/+-*/history c 显示历史列表
*:his* *:history*
:his[tory] 列出最近执行的命令。
{Vi 无此功能}
{仅当编译时加入 |+cmdline_hist| 特性才可用}
+-*/+-*/lhelpgrep c 类似于 "":helpgrep"",但使用位置列表
*:lh* *:lhelpgrep*
:lh[elpgrep] {pattern}[@xx]
类似于 ":helpgrep",除了使用位置列表代替 quickfix 列表
之外。如果帮助窗口已经打开,使用该窗口的位置列表。不
然,打开新帮助窗口,并设置该窗口的位置列表。当前窗口的
位置列表不改变。
+-*/+-*/list c 显示行
*:l* *:list*
:[range]l[ist] [count] [flags]
和 :print 相同,但是不可显示字符用 '^' 代替,行尾加上
$。这可用 'listchars' 选项改变。
|ex-flags| 说明 [flags]。
+-*/+-*/messages c 显示以前显示的消息
1. 以前的消息 *:messages* *:mes* *message-history*
+-*/+-*/more o 全屏显示时暂停列表
*'more'* *'nomore'*
'more' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
{Vi 无此功能}
如果打开,列表在全屏填满时暂停,并得到 |more-prompt|。如果此选项关闭就
不会有暂停,列表会继续进行直到结束为止。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/print c 显示行
*:p* *:pr* *:print* *E749*
:[range]p[rint][flags]
显示 [range] 范围里的行 (缺省是当前行)。
注意: 如果你要打印你的文本到纸张上,见 |:hardcopy|。
GUI 上可以使用 File.Print 菜单项。
|ex-flags| 说明 [flags]。
+-*/+-*/prompt o 提示符号
*'prompt'* *'noprompt'*
'prompt' 布尔型 (缺省打开)
全局
如果打开,Ex 模式使用 ":" 提示。
+-*/+-*/setcmdpos f 设置命令行里的光标位置
setcmdpos({pos}) *setcmdpos()*
设置命令行的光标位置到字节位置 {pos}。第一个位置为 1。
用 |getcmdpos()| 得到当前的位置。
只有在编辑命令行时有效,所以必须在 |c_CTRL-\_e|、|c_CTRL-R_=|
或带 '=' 的 |c_CTRL-R_CTRL-R| 里使用。对于 |c_CTRL-\_e| 和带
'=' 的 |c_CTRL-R_CTRL-R|,在命令行设为表达式的内容之后才设置位
置。对于 |c_CTRL-R_=|,在计算表达式之后但在插入返回的文本之前
设置位置。
如果数值太大,光标放在行尾。如果小于 1,结果没有定义。
如果成功,返回 0,如果不在编辑命令行,返回 1。
+-*/+-*/viusage c 普通模式命令的总览
*:viu* *:viusage*
:viu[sage] 显示普通命令的帮助。目的是为了模拟对应的 Nvi 命令。
{Vi 无此功能}
+-*/+-*/wildchar o 用于通配符扩展的命令行字符
*'wildchar'* *'wc'*
'wildchar' 'wc' 数值型 (Vim 缺省: <Tab>,Vi 缺省: CTRL-E)
全局
{Vi 无此功能}
在命令行上,用于启动通配符扩展的输入字符。其方式由 'wildmode' 指定。
详情可见: |cmdline-completion|。
不在宏里识别该字符。为此,见 'wildcharm'。
尽管 'wc' 是一个数值选项,你可以设置它为一个特殊键: >
:set wc=<Esc>
< 注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/wildcharm o 同 'wildchar',但对映射情况也适用
*'wildcharm'* *'wcm'*
'wildcharm' 'wcm' 数值型 (缺省: 无 (0))
全局
{Vi 无此功能}
'wildcharm' 和 'wildchar' 完全类似,除了在宏内识别该字符以外。
|ex-edit-index| 里可以找到命令行上 "空余" 的键用于此选项。通常你不会直
接输入 'wildcharm',而只是在映射里用它来自动启动补全模式,例如: >
:set wcm=<C-Z>
:cnoremap ss so $vim/sessions/*.vim<C-Z>
< 这样,输入 :ss 以后,你可以使用 CTRL-P 和 CTRL-N。
+-*/+-*/wildmenu o 命令行自动补全所使用的菜单
*'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
'wildmenu' 'wmnu' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+wildmenu| 特性才有效}
'wildmenu' 打开时,命令行补全以增强模式运行。按下 'wildchar' (通常是
<Tab>) 启动补全。这时,在命令行的上方显示可能的匹配,然后高亮首个匹配
(如果有状态行,覆盖之)。显示前项/后项匹配的热键,如 <Tab> 或
CTRL-P/CTRL-N,移动高亮到合适的匹配上。
使用 'wildmode' 时,指定 "full" 会启用 "wildmenu" 模式。"longest" 和
"list" 则不会启动 "wildmenu" 模式。
如果多个匹配超过一行,在右侧显示 ">" 和/或在左侧显示 "<"。需要的话,滚
动状态行。
按下不用于选择补全项的键时,放弃 "wildmenu" 模式。
"wildmenu" 激活时,下面的键有特殊含义:
<Left> <Right> - 选择前项/后项匹配 (类似于 CTRL-P/CTRL-N)
<Down> - 文件名/菜单名补全中: 移进子目录和子菜单。
<CR> - 菜单补全中,如果光标在句号之后: 移进子菜单。
<Up> - 文件名/菜单名补全中: 上移到父目录或父菜单。
这使得控制台上有菜单可用 |console-menus|。
如果你喜欢 <Left> 和 <Right> 键移动光标而不是选择不同的匹配,用: >
:cnoremap <Left> <Space><BS><Left>
:cnoremap <Right> <Space><BS><Right>
<
"WildMenu" 高亮用于显示当前匹配 |hl-WildMenu|。
+-*/+-*/wildmode o 'wildchar' 命令行扩展所用的模式
*'wildmode'* *'wim'*
'wildmode' 'wim' 字符串 (Vim 缺省: "full")
全局
{Vi 无此功能}
用 'widechar' 指定的字符所用的补全模式。它是逗号分隔的不超过四部分的列
表。每个部分指定每次连续使用的 'widechar' 要完成的动作。第一部分指定第
一次使用时的行为。第二部分指定第二次使用时的,等等。
每个部分的可能值如下:
"" 只用第一个匹配补全。
"full" 用下一个完整的匹配补全。在最后一次匹配之后,使用原来的
字符串,然后又是第一个匹配。
"longest" 用最长的公共子串补全。如果结果没有变长,使用下一个部
分。
"longest:full" 类似于 "longest",但如果 'wildmenu' 打开的话,使用之。
"list" 如果有多于一个补全,列出所有的匹配。
"list:full" 如果有多于一个补全,列出所有的匹配并先用第一个补全。
"list:longest" 如果有多于一个补全,列出所有的匹配并先用最长的子串补
全。
如果只有一个匹配,所有情况下都完整补全。
例如: >
:set wildmode=full
< 用第一个完整的匹配补全,然后下一个匹配,依此类推 (缺省) >
:set wildmode=longest,full
< 用最长的子串补全,然后是每个完整的匹配 >
:set wildmode=list:full
< 列出所有的匹配并用每个完整的匹配补全 >
:set wildmode=list,full
< 列出所有的匹配而不补全,然后是每个完整的匹配 >
:set wildmode=longest,list
< 用最长的子串补全,然后列出所有的可能性。
详情可见: |cmdline-completion|。
+-*/+-*/wildoptions o 指定如何完成命令行补全
*'wildoptions'* *'wop'*
'wildoptions' 'wop' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{仅当编译时加入 |+wildignore| 特性才有效}
单词列表,改变命令行补全的行为。
目前只有一个可以使用的单词:
tagfile 如果用 CTRL-D 列出匹配的标签,列出标签的类型和文件。每
行只显示一个匹配。常用的标签类型是:
d #define
f 函数
另见 |cmdline-completion|。
+-*/+-*/reg _ 寄存器
+-*/+-*/+-*/clipboard o 使用剪贴板作为无名的寄存器
*'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' 标志位相比拟。
html 当剪贴板包含 HTML 时,粘贴时使用 HTML 格式。放置文本到
剪贴板时,标识为 HTML。可用于从 Firefox 复制 HTML 内容
并粘贴原始 HTML 码到 Vim,或从 Vim 选择 HTML 码,然后
粘贴到 Firefox 的富文本编辑框 (rich edit)。
你可能只想暂时包含本选项,例如通过 BufEnter 自动命令。
只支持 GTK 版本 2 或以上。
只有在编译时带 |+multi_byte| 特性才可用。
exclude:{pattern}
定义用来匹配终端名 'term' 的模式。匹配的终端不连接到 X
服务器。可用于以下这种情形:
- 在控制台上运行 Vim,
- $DISPLAY 的设置使得应用程序在另一个显示上打开,
- 不希望在控制台上连接到 X 服务器,但希望在终端模拟器
上如此。
如果永远不想连接到 X 服务器,使用: >
exclude:.*
< 这和 |-X| 参数的效果相同。
注意 如果没有到 X 服务器的连接,窗口标题不会复原,而剪
贴板也无法访问。
忽略 'magic' 的值,{pattern} 的解释总是假定 'magic' 打
开。
选项值的其余部分用于 {pattern},本项目必须是最后一个项
目。
+-*/+-*/+-*/display c 显示寄存器
*:di* *:display*
:di[splay] [arg] 和 :registers 相同。{Vi 无此功能}
+-*/+-*/+-*/getreg f 取得寄存器内容
getreg([{regname} [, 1]]) *getreg()*
返回字符串,寄存器 {regname} 的内容。例如: >
:let cliptext = getreg('*')
< getreg('=') 返回最近一次表达式寄存器计算的返回值 (用于映射)。
getreg('=', 1) 返回表达式自身,以便用 |setreg()| 恢复。对于其
它寄存器,这个额外的参数被忽略,所以给出此参数总是无妨。
如果没有指定 {regname},使用 |v:register|。
+-*/+-*/+-*/getregtype f 取得寄存器类型
getregtype([{regname}]) *getregtype()*
返回字符串,寄存器 {regname} 的类型。
该值会是以下可能之一:
"v" |characterwise| (面向字符) 的文本
"V" |linewise| (面向行) 的文本
"<CTRL-V>{width}" |blockwise-visual| (面向列块) 的文本
0 空或者未知的寄存器
<CTRL-V> 是一个字符,其值为 0x16。
如果没有指定 {regname},使用 |v:register|。
+-*/+-*/+-*/put c 插入寄存器的内容到文本
*:pu* *:put*
:[line]pu[t] [x] 放置文本 [从寄存器 x] 在行号 [line] (缺省为当前行) 之
后。它总是 |linewise| 行动作,因而这个命令可以用来把抽
出的块放置在新行上。
光标停留在新行末行的第一个非空白处。
寄存器也可以是 '=',跟随一个可选的表达式。表达式继续到
该命令结束为止。你需要在 '|' 和 '"' 字符前加上反斜杠不
让它们终止你的命令行。例如: >
:put ='path' . \",/test\"
< 如果 '=' 之后没有表达式,Vim 使用前一个表达式。用
":dis =" 你可以看到它。
+-*/+-*/+-*/registers c 显示寄存器的内容
*:reg* *:registers*
:reg[isters] 显示所有编号和命名寄存器的内容。但不列出用于 |:redir|
目的地的寄存器。
{Vi 无此功能}
+-*/+-*/+-*/setreg f 设定寄存器内容及类型
setreg({regname}, {value} [,{options}])
设置寄存器 {regname} 的值为 {value}。
如果 {options} 包含 "a" 或者 {regname} 为大写,该值被附加于现
有值之后。
{options} 还可以指定寄存器新类型的规格:
"c" 或 "v" |characterwise| (面向字符) 模式
"l" 或 "V" |linewise| (面向行) 模式
"b" 或 "<CTRL-V>" |blockwise-visual| (面向列块) 模式
如果 "b" 或 "<CTRL-V>" 之后紧跟数值,那么该数值用作选择的宽度
- 如果没有指定,那么列块的宽度设为最长的行字符数 (把 <Tab>
看作一个字符)。
如果 {options} 没有寄存器的设置,那么缺省使用面向字符模式,除
非 {value} 以 <NL> 结尾。
不能设置 '=' 寄存器。
返回零代表成功,非零代表失败。
示例: >
:call setreg(v:register, @*)
:call setreg('*', @%, 'ac')
:call setreg('a', "1\n2\n3", 'b5')
< 本例说明如何使用函数来保存和恢复寄存器 >
:let var_a = getreg('a', 1)
:let var_amode = getregtype('a')
....
:call setreg('a', var_a, var_amode)
< 你可以通过附加空串来改变寄存器的类型: >
:call setreg('a', '', 'al')
+-*/+-*/+-*/yank c 抽出行到寄存器
*:y* *:yank*
:[range]y[ank] [x] 抽出 [range] 所指定的行 [到寄存器 x]。
+-*/complete _ 补全
+-*/+-*/complete f 设定要寻找的匹配
complete({startcol}, {matches}) *complete()* *E785*
设置插入模式补全的匹配。
只能用于插入模式。需要使用 CTRL-R = 的映射 |i_CTRL-R|。不能在
CTRL-O 之后或者在表达式映射里使用。
{startcol} 是行内待补全文本开始的字节偏移。直到光标为止的文本
就是原始的文本,它将要被匹配所替代。用 col('.') 会得到空串。而
"col('.') - 1" 将用匹配替换单个字符。
{matches} 必须是 |List|。每个 |List| 项目是一个匹配。
|complete-items| 说明可能的项目类型。
注意 调用此函数后,你不应插入任何使补全停止的内容。
用 CTRL-N 和 CTRL-P 选择匹配,就像普通的插入模式补全那样。如果
指定,会出现弹出菜单,见 |ins-completion-menu|。
示例: >
inoremap <F5> <C-R>=ListMonths()<CR>
func! ListMonths()
call complete(col('.'), ['January', 'February', 'March',
\ 'April', 'May', 'June', 'July', 'August', 'September',
\ 'October', 'November', 'December'])
return ''
endfunc
< 此例并不很有用,但可以说明功能。注意这里返回空串,以免插入零。
+-*/+-*/complete o 指定插入模式的自动补全如何工作
*'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-]| 和普通的扩展)。
+-*/+-*/complete_add f 加入要寻找的匹配
complete_add({expr}) *complete_add()*
把 {expr} 加到匹配的列表里。只能用于 'completefunc' 选项指定的
函数里。
返回 0 代表失败 (空字符串或者内存不足),1 代表加入了匹配,2 代
表匹配已经在列表里。
|complete-functions| 解释 {expr}。它和 'omnifunc' 应该返回的列
表中单个项目相同。
+-*/+-*/complete_check f 检查补全是否被中止
complete_check() *complete_check()*
寻找补全匹配时,检查输入的键。如果寻找匹配需要一定时间时有用。
如果匹配的搜索被中止,返回非零。否则返回零。
只能用于 'completefunc' 选项指定的函数里。
*confirm()*
+-*/+-*/completefunc o 插入模式补全使用的函数
*'completefunc'* *'cfu'*
'completefunc' 'cfu' 字符串 (缺省: empty)
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+eval| 和 |+insert_expand| 特性才有效}
本选项指定插入模式补全 CTRL-X CTRL-U 使用的函数。|i_CTRL-X_CTRL-U|
|complete-functions| 解释如何调用该函数以及它应该返回何值。
+-*/+-*/completeopt o 插入模式补全使用的选项
*'completeopt'* *'cot'*
'completeopt' 'cot' 字符串 (缺省: "menu,preview")
全局
{仅当编译时加入 |+insert_expand| 特性才有效}
{Vi 无此功能}
逗号分隔的选项列表,用于插入模式的补全 |ins-completion|。支持的值是:
menu 使用弹出菜单来显示可能的补全。只有匹配多于一个且有足够的颜
色时才显示该菜单。|ins-completion-menu|
menuone 即使只有一个匹配,也使用弹出菜单。可用于匹配有附加信息的情
况,例如,它来自的文件。
longest 只插入匹配的最长公共文本。如果显示菜单,用 CTRL-L 来插入更
多的字符。是否忽略大小写取决于补全的类型。缓冲区文本使用
'ignorecase' 选项。
preview 在预览窗口里显示当前选择的补全的额外信息。只能和 "menu" 或
"menuone" 搭配使用。
+-*/+-*/dictionary o 关键字自动补全所用的文件名
*'dictionary'* *'dict'*
'dictionary' 'dict' 字符串 (缺省为 "")
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
逗号分隔的文件名列表,用于为关键字补全命令查找单词 |i_CTRL-X_CTRL-K|。
每个文件由单词的列表构成,可以每行一个单词,也可以每行多个,以非关键字
字符分隔 (建议使用空白)。最大的行长为 510 个字节。
如果此选项为空或者给出项目 "spell" 并且打开拼写检查,使用当前激活的拼
写。|spell|
要在文件名里包含逗号,在它之前加上反斜杠。逗号之后的空格被忽略,其它情
况下空格视为文件的一部分。|option-backslash| 说明如何使用反斜杠。
这和 |Dictionary| 变量类型完全无关。
什么地方可以找到单词列表呢?
- FreeBSD 上,有文件 "/usr/share/dict/words"。
- Simtel 归档里,在 "msdos/linguist" 目录里找找。
- GNU 工具集里的 "miscfiles"。
建议使用 |:set+=| 和 |:set-=| 来从列表里加减目录。这可以避免未来版本使
用其它缺省值出现的问题。
为了安全原因,反引号不能用于此选项里。
+-*/+-*/infercase o 关键字自动补全的匹配调整大小写
*'infercase'* *'inf'* *'noinfercase'* *'noinf'*
'infercase' 'inf' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
插入模式里补全关键字时 |ins-completion|,如果同时打开 'ignorecase',匹
配的大小写会根据输入进行调整。如果输入的文本包含小写字母而在那里匹配串
是大写字母,补全部分被换成小写。如果输入文本没有小写字母,而且某个字母
之后有大写字母而在那里匹配串是小写字母,补全部分被换成大写。
如用 'noinfercase',照原样给出匹配。
+-*/+-*/isfname o 文件和路径名可用的字符
*'isfname'* *'isf'*
'isfname' 'isf' 字符串 (MS-DOS、Win32 和 OS/2 缺省为:
"@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,="
AMIGA: "@,48-57,/,.,-,_,+,,,$,:"
VMS: "@,48-57,/,.,-,_,+,,,#,$,%,<,>,[,],:,;,~"
OS/390: "@,240-249,/,.,-,_,+,,,#,$,%,~,="
否则: "@,48-57,/,.,-,_,+,,,#,$,%,~,=")
全局
{Vi 无此功能}
文件名和路径名由此选项指定的字符组成。使用文件名的命令包括 "gf","[i"
还有在标签文件里的那些。它也用于 |pattern| 里的 "\f"。
多字节字符,即 256 及更高的字符,总是包含在内,只有 255 以内的字符需要
在此选项里指定。
对于 UTF-8 而言,也会包含 0xa0 到 0xff 的字符。
给此选项加入空白字符时要三思而行。虽然空格可以出现在文件名中,这么做的
后果使得 Vim 在补全时无法知道文件名何处开始,何处结束。'isfname' 没有
空白字符也许更好些。
注意 在使用反斜杠作为路径分隔符的系统上,Vim 竭尽所能使得它如你期望的
那样工作。但需要点技巧,因为 Vi 原来使用反斜杠来转义特殊字符。在这些系
统上,Vim 不会删除普通文件名字符之前的反斜杠,但在 Unix 和类似的系统上
会。缺省不包含 '&' 和 '^',因为它们对 cmd.exe 有特殊意义。
该选项的格式为逗号分隔的部分的列表。每个部分是单个字符数值或者一个范
围。范围包括两个字符数值,中间以 '-' 相连。字符数值可以是一个 0 到 255
的十进制数,或者是 ASCII 字符自身 (不包括数字字符)。例如:
"_,-,128-140,#-43" (包含 '_' 和 '-' 和 128 到 140 和 '#'
到 43)
如果一个部分以 '^' 开始,则后面的字符数值或范围从选项里被排除。选项
的解释从左到右。排除的字符应放在包含该字符的范围之后。要包含 '^' 自
身,让它成为选项的最后一个字符,或者成为范围的结尾。比如:
"^a-z,#,^" (不包括 'a' 到 'z',包括 '#' 和 '^')
如果字符是 '@',所有 isalpha() 为真的字符都包含在内。通常这包括 a 到 z
和 A 到 Z,加上它们带重音的变形。要包含 '@' 自身,使用 "@-@"。例如:
"@,^a-z" 所有除了小写 ASCII 字母以外的字母表字符。
"a-z,A-Z,@-@" 所有字母加上 '@' 字符。
要包含逗号,在期待使用字符数字的地方使用它。比如:
"48-57,,,_" 数字、逗号和下划线。
逗号可以在它之前加 '^' 来排除。比如:
" -~,^,,9" 从空格到 '~' 的所有字符,排除逗号,加上 <Tab>。
|option-backslash| 说明如何包含空格和反斜杠。
+-*/+-*/isident o 标识符可用的字符
*'isident'* *'isi'*
'isident' 'isi' 字符串 (MS-DOS、Win32 和 OS/2 缺省为:
"@,48-57,_,128-167,224-235"
否则: "@,48-57,_,192-255")
全局
{Vi 无此功能}
标识符由此选项给出的字符组成。标识符用于识别环境变量和 'define' 选项匹
配之后的名字,也用于 |pattern| 里的 "\i"。'isfname' 描述本选项的格式。
小心: 如果改变此选项,环境变量的扩展可能会失败。例如,如果包含 '/',
Vim 会试图扩展 "$HOME/.viminfo"。也许你想改变的是 'iskeyword'。
+-*/+-*/iskeyword o 关键字可用的字符
*'iskeyword'* *'isk'*
'iskeyword' 'isk' 字符串 (Vim MS-DOS 和 Win32 缺省:
"@,48-57,_,128-167,224-235"
其它: "@,48-57,_,192-255"
Vi 缺省: "@,48-57,_")
局部于缓冲区
{Vi 无此功能}
搜索和许多命令识别关键字: "w"、"*"、"[i" 等等。它也用于 |pattern| 里的
"\k"。'isfname' 描述本选项的格式。对于 C 程序来说,你应该使用
"a-z,A-Z,48-57,_,.,-,>"。
对帮助文件,它设置为除了 '*'、'"' 和 '|' 以外所有非空白的可显示字符
(这样在命令上使用 CTRL-] 可以找到该命令的帮助)。
如果打开 'lisp' 选项,总是包含 '-' 字符。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/omnifunc o 文件类型特定补全使用的函数
*'omnifunc'* *'ofu'*
'omnifunc' 'ofu' 字符串 (缺省: 空)
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+eval| 和 |+insert_expand| 特性才有效}
指定插入模式用 CTRL-X CTRL-O 进行全能 (omni) 补全使用的函数
|i_CTRL-X_CTRL-O|。
|complete-functions| 解释如何调用该函数以及它应该返回何值。
该选项通常在文件类型插件里设置: |:filetype-plugin-on|
+-*/+-*/pumheight o 弹出窗口的最大高度
*'pumheight'* *'ph'*
'pumheight' 'ph' 数值型 (缺省为 0)
全局
{仅当编译时加入 |+insert+expand| 特性才有效}
{Vi 无此功能}
决定用于插入模式补全的弹出菜单显示项目的最大数目。如果为零,有多少空间
就用多少。
|ins-completion-menu|。
+-*/+-*/pumvisible f 检查弹出菜单是否显示
pumvisible() *pumvisible()*
如果弹出菜单可见,返回非零,不然返回零。见
|ins-completion-menu|。
可以用来避免一些会删除弹出菜单的动作。
*E726* *E727*
+-*/+-*/showfulltag o 自动补全标签时显示完整的标签匹配模式
*'showfulltag'* *'sft'* *'noshowfulltag'* *'nosft'*
'showfulltag' 'sft' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
插入模式里,用标签文件补全单词时 (见 |ins-completion|),同时显示标签名
和查找模式 (如果有的话) 的整齐格式作为可能的匹配。这样,如果匹配 C 函
数,你会看到一个样板,从中了解到需要什么样的参数 (允许指定编码风格)。
注意 如果 'completeopt' 有 "longest",这不会很好地工作,因为搜索模式的
补全未必会匹配输入的文本。
+-*/+-*/suffixes o 多个匹配所忽略的后缀
*'suffixes'* *'su'*
'suffixes' 'su' 字符串 (缺省为 ".bak,~,.o,.h,.info,.swp,.obj")
全局
{Vi 无此功能}
带这些后缀名的文件在通配符能匹配多个文件时使用较低的优先级。见
|suffixes|。可以用逗号分隔这些后缀,逗号之后的空格被忽略。句号也被看
作是后缀的开始。要避免句号或逗号被识别为分隔符,在它们之前加上反斜杠
(|option-backslash| 说明如何包含空格和反斜杠)。
'wildignore' 说明如何完全忽略某些文件。
建议使用 |:set+=| 和 |:set-=| 来从列表里加减后缀。这可以避免未来版本使
用其它缺省值出现的问题。
+-*/+-*/thesaurus o 关键字自动补全所用的同义词字典
*'thesaurus'* *'tsr'*
'thesaurus' 'tsr' 字符串 (缺省为 "")
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
逗号分隔的文件名列表,用于为同义词补全命令查找单词 |i_CTRL-X_CTRL-K|。
文件里的每行应该包含相近意思的单词,以非关键字字符分隔 (建议使用空
白)。最大的行长为 510 个字节。
要得到能用于此处的文件,查阅 http://www.hyphenologist.co.uk 的
wordlist FAQ。
要在文件名里包含逗号,在它之前加上反斜杠。逗号之后的空格被忽略,其它情
况下空格视为文件的一部分。|option-backslash| 说明如何使用反斜杠。
建议使用 |:set+=| 和 |:set-=| 来从列表里加减目录。这可以避免未来版本使
用其它缺省值出现的问题。
为了安全原因,反引号不能用于此选项里。
+-*/+-*/wildignore o 匹配这些模式的文件不会参与自动补全
*'wildignore'* *'wig'*
'wildignore' 'wig' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{仅当编译时加入 |+wildignore| 特性才有效}
文件模式的列表。文件和目录名的补全中忽略符合其中任何模式的文件,它也同
时影响 |expand()|、|glob()| 和 |globpath()|,除非指定标志位来关闭之。
这些模式的应用方式类似于 |:autocmd|,见 |autocmd-patterns|。
另见 'suffixes'。
例如: >
:set wildignore=*.o,*.obj
< 建议使用 |:set+=| 和 |:set-=| 来从列表里加减模式。这可以避免未来版本使
用其它缺省值出现的问题。
+-*/cscope _
+-*/+-*/cscope c 执行 cscope 命令
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
所有命令都是通过主命令 ":cscope" 的子项完成的。主命令最短的缩写是 ":cs"。
":scscope" 完成同样的功能的同时还可以分割窗口 (缩写: "scs")。
+-*/+-*/cscope_connection f 检查有无与 cscope 的连接
cscope_connection([{num} , {dbpath} [, {prepend}]])
检查 |cscope| 连接是否存在。如果没有参数,则函数返回:
0,如果 cscope 不存在 (编译没有带该特性),或者不存在
cscope 连接;
1,如果至少有一个 cscope 连接。
如果指定了参数,那么 {num} 的值指定如何检查 cscope 连接存在与
否的方式:
{num} 存在检查的方式描述 ~
----- ------------------------------
0 等同于无参数 (例如,"cscope_connection()")。
1 忽略 {prepend},使用 {dbpath} 的字符串部分匹配。
2 忽略 {prepend},使用 {dbpath} 的字符串完整匹配。
3 使用 {prepend},使用 {dbpath} 和 {prepend} 的字符串部
分匹配。
4 使用 {prepend},使用 {dbpath} 和 {prepend} 的字符串完
整匹配。
注意: 所有的字符串比较都对大小写敏感!
示例。假定我们有如下设置 (":cs show" 的输出): >
# pid database name prepend path
0 27664 cscope.out /usr/local
<
启动方式 返回值 ~
---------- ---------- >
cscope_connection() 1
cscope_connection(1, "out") 1
cscope_connection(2, "out") 0
cscope_connection(3, "out") 0
cscope_connection(3, "out", "local") 1
cscope_connection(4, "out") 0
cscope_connection(4, "out", "local") 0
cscope_connection(4, "cscope.out", "/usr/local") 1
<
+-*/+-*/cscopepathcomp o 显示路径多少部分
*'cscopepathcomp'* *'cspc'*
'cscopepathcomp' 'cspc' 数值型 (缺省为 0)
全局
{仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
决定标签列表里显示多少路径部分。
见 |cscopepathcomp|。
+-*/+-*/cscopeprg o 执行 cscope 的命令
*'cscopeprg'* *'csprg'*
'cscopeprg' 'csprg' 字符串 (缺省为 "cscope")
全局
{仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
指定执行 cscope 的命令。见 |cscopeprg|。
为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
+-*/+-*/cscopequickfix o 用 quickfix 窗口得到 cscope 的结果
*'cscopequickfix'* *'csqf'*
'cscopequickfix' 'csqf' 字符串 (缺省为 "")
全局
{仅当编译时加入 |+cscope| 和 |+quickfix| 特性才有效}
{Vi 无此功能}
设置是否使用 quickfix 窗口来显示 cscope 的结果。
见 |cscopequickfix|。
+-*/+-*/cscopetag o 用 cscope 处理标签命令
*'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
'cscopetag' 'cst' 布尔型 (缺省关闭)
全局
{仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
让标签命令使用 cscope。见 |cscope-options|。
注意: 如果置位 'compatible',该选项被复位。
+-*/+-*/cscopetagorder o 决定 "":cstag"" 的搜索顺序
*'cscopetagorder'* *'csto'*
'cscopetagorder' 'csto' 数值型 (缺省为 0)
全局
{仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
决定 ":cstag" 执行查找的顺序。见 |cscopetagorder|。
注意: 如果置位 'compatible',该选项被设为 0。
+-*/+-*/cscopeverbose o 增加 cscope 数据库时给出消息
*'cscopeverbose'* *'csverb'*
*'nocscopeverbose'* *'nocsverb'*
'cscopeverbose' 'csverb' 布尔型 (缺省关闭)
全局
{仅当编译时加入 |+cscope| 特性才有效}
{Vi 无此功能}
增加 cscope 数据库时,给出消息。见 |cscopeverbose|。
注意: 如果置位 'compatible',该选项被复位。
+-*/+-*/cstag c 使用 cscope 来跳转到标签上
*:cstag* *E257* *E562*
如果你同时使用 cscope 和 ctags,|:cstag| 允许你在跳转前对两者都进行查询。例
如,你可以选择先查询 cscope 数据库,如果无法找到匹配,再查询标签文件。这种做法
的次序可以通过 |csto| 的值来调整。参见 |cscope-options|。
+-*/+-*/lcscope c 类似于 "":cscope"",但使用位置列表
*:lcscope* *:lcs*
此命令和 ":cscope" 命令相同,除了在置位选项 'cscopequickfix' 的时候,使用当前
窗口的位置列表而不是 quickfix 列表来显示 cscope 的结果。
+-*/+-*/scscope c 分割窗口并执行 cscope 命令
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
所有命令都是通过主命令 ":cscope" 的子项完成的。主命令最短的缩写是 ":cs"。
":scscope" 完成同样的功能的同时还可以分割窗口 (缩写: "scs")。
+-*/diff _
+-*/+-*/diff o 当前窗口使用 diff 模式
*'diff'* *'nodiff'*
'diff' 布尔型 (缺省关闭)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+diff| 特性才有效}
加入本窗口到显示文件差异的窗口组里。见 |vimdiff|。
+-*/+-*/diffexpr o 得到 diff 文件所用的表达式
*'dex'* *'diffexpr'*
'diffexpr' 'dex' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{仅当编译时加入 |+diff| 特性才有效}
用于计算文件两个不同版本的 ed 风格的差异文件的表达式。见
|diff-diffexpr|。
为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
+-*/+-*/diffget c 删除当前缓冲区的所有差异
*:diffg* *:diffget*
:[range]diffg[et] [bufspec]
用另一个缓冲区来修改当前的缓冲区,消除不同之处。除非只有另外一
个比较模式下的缓冲区, [bufspec] 必须存在并指定那个缓冲区。
如果 [bufspec] 指定的是当前缓冲区,则为空动作。
[range] 可以参考下面。
+-*/+-*/diffoff c 关闭 diff 模式
*:diffo* *:diffoff*
:diffoff 为当前窗口关闭比较模式。
+-*/+-*/diffopt o 使用 diff 模式的选项
*'dip'* *'diffopt'*
'diffopt' 'dip' 字符串 (缺省为 "filler")
全局
{Vi 无此功能}
{仅当编译时加入 |+diff| 特性才有效}
diff 模式的设置选项。由以下几个项目组成。全都是可选的。项目之间由逗号
分隔。
filler 显示填充行,使得文本和在相同位置多出文本的其它
窗口同步。多用于并排并且置位 'scrollbind' 的窗
口。
context:{n} 在更改和包含未更改行的折叠之间保留的上下文行数
{n} (译者注: 即差异文周围不被折叠的行数)。如果
忽略,使用六行上下文。见 |fold-diff|。
icase 忽略文本大小写的更改。"a" 和 "A" 视为等同。如
果 'diffexpr' 为空,在 "diff" 命令里加入 "-i"
标志位。
iwhite 忽略空白字符数目的更改。如果 'diffexpr' 为空,
在 "diff" 命令里加入 "-b" 标志位。查阅 "diff"
文档了解该标志位具体的行为。比如,它应该忽略行
尾的空白,但不忽略行首的。
horizontal 以水平分割启动 diff 模式 (除非显式指定不要如
此)。
vertical 以垂直分割启动 diff 模式 (除非显式指定不要如
此)。
foldcolumn:{n} 启动 diff 模式时设置 'foldcolumn' 选项为 {n}。
如果不存在,用 2。
示例: >
:set diffopt=filler,context:4
:set diffopt=
:set diffopt=filler,foldcolumn:3
<
+-*/+-*/diffpatch c 应用补丁然后显示差异
:diffpatch {patchfile} *E816* *:diffp* *:diffpatch*
使用当前的缓冲区,用 {patchfile} 给它打上补丁并打开一个缓冲区
显示结果。两个缓冲区都将设定为和 "vimdiff" 同样的参数。
{patchfile} 可以是任何一种 "patch" 程序认识的或 'patchexpr' 可
以处理的格式。
注意: {patchfile} 只能包含一个文件的比较结果: 当前文件。如果
{patchfile} 也包含了其他文件的比较,结果将不可预知。Vim 改变当
前目录到 /tmp, 以避免当前目录下的文件被意外的打补丁。但它仍不
能避免若干 ".rej" 文件产生。当绝对路径名出现时,这些文件也不能
避免被打补丁。
+-*/+-*/diffput c 删除另外一个缓冲区的差异
*:diffpu* *:diffput* *E793*
:[range]diffpu[t] [bufspec]
用当前缓冲区来修改另一个缓冲区,消除不同之处。不同于
":diffget" 之处仅在于被更改的是另一个缓冲区。
如果忽略 [bufspec],而多于一个缓冲区处于比较模式并置位
'modifiable' 的话,此命令失败。
[range] 可以参考下面。
+-*/+-*/diffsplit c 显示和另外一个文件的差异
:diffsplit {filename} *:diffs* *:diffsplit*
对 {filename} 开一个新窗口。当前的和新开的窗口将设定和
"vimdiff" 一样的参数。另见 'diffexpr'。
+-*/+-*/diffthis c 使得当前窗口成为 diff 窗口
*:difft* *:diffthis*
:diffthis 使当前窗口参与比较。本命令设定和 "vimdiff" 同样的选项。
+-*/+-*/diffupdate c 更新 'diff' 缓冲区
*:diffu* *:diffupdate*
:diffu[pdate] 刷新比较结果的高亮和折叠。
+-*/+-*/patchexpr o 用于给文件打补丁的表达式
*'pex'* *'patchexpr'*
'patchexpr' 'pex' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{仅当编译时加入 |+diff| 特性才有效}
用来给文件打补丁并生成文件新版本的表达式。见 |diff-patchexpr|。
+-*/display _ 显示
+-*/+-*/ascii c 显示光标所在的字符的 ascii 值
:as[cii] 或 *ga* *:as* *:ascii*
ga 显示光标下字符的 ascii 值,分别以十进制、十六进制和八
进制显示。例如,如果光标下是 'R':
+-*/+-*/binary o 二进制方式读/写/编辑文件
*'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' 选项。
+-*/+-*/breakat o 可以在此断行的字符
*'breakat'* *'brk'*
'breakat' 'brk' 字符串 (缺省为 " ^I!@*-+;:,./?")
全局
{Vi 无此功能}
{仅当编译时加入 |+linebreak| 特性才有效}
如果打开 'linebreak',本选项让你选择可以在什么字符上换行。只能用 ASCII
字符,但如果 'encoding' 是 8 位编码,也可以用 8 位的字符。
+-*/+-*/display o 如何显示文本的标志位列表
*'display'* *'dy'*
'display' 'dy' 字符串 (缺省为 "")
全局
{Vi 无此功能}
改变文件显示的方式。这是逗号分隔的标志位的列表:
lastline 如果包含,显示窗口末行尽量多的内容。如果不包含,不能在
窗口完全放入的末行会以 "@" 行代替。
uhex 显示不可显示字符的十六进制值,形如 <xx>,而不是用 ^C
和 ~C 这样的形式。
+-*/+-*/fillchars o 显示特殊项目所使用的字符
*'fillchars'* *'fcs'*
'fillchars' 'fcs' 字符串 (缺省为 "vert:|,fold:-")
全局
{Vi 无此功能}
{仅当编译时加入 |+windows| 和 |+folding| 特性才有效}
填充状态行和垂直分割线的字符。
它是逗号分隔的项目列表:
项目 缺省 用于 ~
stl:c ' ' 或 '^' 当前窗口的状态行
stlnc:c ' ' 或 '-' 非当前窗口的状态行
vert:c '|' 垂直分割线 |:vsplit|
fold:c '-' 填充 'foldtext'
diff:c '-' 'diff' 选项里的被删除行
任何不提供的项目使用其缺省值。"stl" 和 "stlnc" 在有高亮的地方使用空
格,否则使用 '^' 或 '-'。
例如: >
:set fillchars=stl:^,stlnc:-,vert:\|,fold:-,diff:-
< 除了在高亮时也使用那些字符以外,这类似于缺省值。
"stl" 和 "stlnc" 只支持单字节的值。
这些项目使用的高亮:
项目 高亮组 ~
stl:c StatusLine |hl-StatusLine|
stlnc:c StatusLineNC |hl-StatusLineNC|
vert:c VertSplit |hl-VertSplit|
fold:c Folded |hl-Folded|
diff:c DiffDelete |hl-DiffDelete|
+-*/+-*/isprint o 可显示的字符
*'isprint'* *'isp'*
'isprint' 'isp' 字符串 (MS-DOS、Win32、OS/2 和 Macintosh 缺省为: "@,~-255";
否则: "@,161-255")
全局
{Vi 无此功能}
此选项给出的字符在屏幕上能直接显示。|pattern| 里的 "\p" 也使用此选项。
从空格 (ASCII 32) 到 '~' (ASCII 126) 的字符总是可以直接显示的,即使它
们没有包含在 'isprint' 里,甚至被排除也是如此。此选项的格式可见
'isfname' 处的描述。
不可显示字符使用两个字符显示:
0 - 31 "^@" - "^_"
32 - 126 总是单个字符
127 "^?"
128 - 159 "~@" - "~_"
160 - 254 "| " - "|~"
255 "~?"
如果 'encoding' 是某个 Unicode 编码,128 到 255 的非法字符显示为
<xx>,其中给出该字节的十六进制值。
如果 'display' 包含 "uhex",所有的不可显示字符都显示为 <xx>。
不可显示字符使用 SpecialKey 高亮。|hl-SpecialKey|
多字节字符,即 256 及更高的字符,总是包含在内,只有 255 以内的字符才需
要在此选项里指定。如果字符可显示但当前字体没有包含该字符,显示一个替代
字符。
不可显示并且零宽度的 Unicode 字符都显示为 <xxxx>。没有指定这些字符的选
项。
+-*/+-*/laststatus o 当最近的窗口有状态行时提示
*'laststatus'* *'ls'*
'laststatus' 'ls' 数值型 (缺省为 1)
全局
{Vi 无此功能}
本选项的值影响最后一个窗口何时有状态行:
0: 永不
1: 只有在有至少两个窗口时
2: 总是
如果你有多个窗口,有状态行会使屏幕看起来好一些,但它会占据一个屏幕行。
|status-line|
+-*/+-*/linebreak o 在空白处回绕长行
*'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
'linebreak' 'lbr' 布尔型 (缺省关闭)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+linebreak| 特性才有效}
如果打开,Vim 会在 'breakat' 里的字符上,而不是在屏幕上可以显示的最后
一个字符上回绕长行。和 'wrapmargin' 和 'textwidth' 不同,此处不会插入
<EOL>,它只影响文件的显示方式,而不是其内容。'showbreak' 的值会出现在
回绕行的前面。
如果 'wrap' 选项关闭或 'list' 打开,不使用本选项。
注意 <EOL> (屏幕上的) 之后的 <Tab> 字符在多数情况下,不会显示正确数量
的空格。
+-*/+-*/list o 显示 <Tab> 和 <EOL>
*'list'* *'nolist'*
'list' 布尔型 (缺省关闭)
局部于窗口
列出方式: 像显示 CTRL-I 那样显示制表,行尾之后显示 $。用于看到制表和空
格的区别以及拖尾的空白。'listchars' 选项可以进一步指定改变。
光标显示在制表占据的空白的开始位置,而不是像通常在普通模式那样显示在最
后位置。要用空格来显示制表并同时把光标放在空白开始位置,可用: >
:set list lcs=tab\ \
<
(译者注: 原文如此,似应为: >
:set list lcs=tab:\ \
< )
注意 如果 'cpoptions' 里包含 'L',本选项也影响排版 (用 'textwidth' 或
'wrapmargin' 方法设置的)。'listchars' 说明如何改变制表显示的方式。
+-*/+-*/listchars o list 模式下显示用的字符
*'listchars'* *'lcs'*
'listchars' 'lcs' 字符串 (缺省为 "eol:$")
全局
{Vi 无此功能}
'list' 模式和 |:list| 命令使用的字符串。这是逗号分隔的字符串设置的列
表。
eol:c 行尾显示的字符。如果忽略,行尾没有额外的字符。
tab:xy 用于显示制表的两个字符。使用第一个字符一次。然后重复第
二个字符来填充制表通常填充的位置。
"tab:>-" 会显示占据四个空格的制表 ">---"。
如果忽略,制表显示为 ^I。
trail:c 拖尾空白显示的字符。如果忽略,拖尾空白显示为空格。
extends:c 如果 'wrap' 关闭,而行在屏幕右边界之后还要继续时,最后
一列显示的字符。
precedes:c 如果 'wrap' 关闭,而行在可视范围第一列之前还有内容时,
第一列显示的字符。
conceal:c 用于替代隐藏文本的字符,用于 'conceallevel' 为 1 时。
nbsp:c 显示不可间断空格的字符 (字符 0xA0,160)。如果忽略,留
出一个空格。
不应该使用字符 ':' 和 ','。如果 'encoding' 为 "utf-8",可以使用 UTF-8
字符,不然只能使用可显示的字符。所有字符必须使用单倍宽度。
示例: >
:set lcs=tab:>-,trail:-
:set lcs=tab:>-,eol:<,nbsp:%
:set lcs=extends:>,precedes:<
< "NonText" 高亮会用于 "eol"、"extends" 和 "precedes"。"SpecialKey" 用于
"nbsp"、"tab" 和 "trail"。
|hl-NonText| |hl-SpecialKey|
+-*/+-*/matchtime o 显示匹配括号的时间 (以十分之一秒计)
*'matchtime'* *'mat'*
'matchtime' 'mat' 数值型 (缺省为 5)
全局
{Vi 无此功能}{Nvi 有}
如果置位 'showmatch',显示配对括号的十分之一秒数。注意 这不是毫秒数,
和其它设置时间的选项不同。这是为了和 Nvi 兼容。
+-*/+-*/nrformats o CTRL-A 命令识别的数字格式
*'nrformats'* *'nf'*
'nrformats' 'nf' 字符串 (缺省为 "octal,hex")
局部于缓冲区
{Vi 无此功能}
本选项定义 Vim 使用 CTRL-A 和 CTRL-X 命令分别加减数值时使用的数值的基
底;关于这些命令的更多的信息,见 |CTRL-A|。
alpha 如果包含,单个字母会被递增和递减。这可以用于使用字母索引的列表
a)、b),等等。 *octal-number*
octal 如果包含,零开始的数值认为是八进制。例如: 在 "007" 上用 CTRL-A
得到 "010"。
hex 如果包含,"0x" 或 "0X" 开始的数值认为是十六进制。例如: "0x100"
上用 CTRL-X 得到 "0x0ff"。
简单的以 1-9 的数字开始的数值总被认为是十进制的。这也包括不能识别为八
进制或十六进制的数值。
+-*/+-*/number o 行前显示行号
*'number'* *'nu'* *'nonumber'* *'nonu'*
'number' 'nu' 布尔型 (缺省关闭)
局部于窗口
在每行前面显示行号。如果 'cpoptions' 里没有 'n' 选项,回绕的行不使用行
号所在的列 (如果没有置位 'compatible',这是缺省)。
'numberwidth' 选项可以用来设置行号使用的空间。
如果长的回绕的行不从第一个字符开始,'-' 字符出现在行号前面。
|hl-LineNr| 说明行号使用的高亮。
置位此选项时,关闭 'relativenumber' 选项。
+-*/+-*/number c 显示文本行时给出行号
*:nu* *:number*
:[range]nu[mber] [count] [flags]
和 :print 相同,但每行之前显示行号 (也参见 'highlight'
和 'numberwidth' 选项)。
|ex-flags| 说明 [flags]。
+-*/+-*/numberwidth o 行号使用的列数
*'numberwidth'* *'nuw'*
'numberwidth' 'nuw' 数值型 (Vim 缺省: 4 Vi 缺省: 8)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+linebreak| 特性才有效}
行号使用的最小列数。只有置位 'number' 或 'relativenumber' 选项或者带行
号打印时才有意义。因为行号和文本之间总有一个空格,实际的字符数比该数值
小一。
该值是最小的宽度。取决于使用 'number' 还是 'relativenumber',如果为适
应缓冲区最大的行号或窗口的行数而有必要的话,会使用更大的宽度。这样,
Vim 缺省值 4 可以容纳最大行号为 999。若缓冲区有 1000 行,会使用五列。
最小值为 1,最大值为 10。
注意: 如果置位 'compatible',该选项被复位为 0。
+-*/+-*/relativenumber o 每行前显示相对行号
*'relativenumber'* *'rnu'* *'norelativenumber'* *'nornu'*
'relativenumber' 'rnu' 布尔型 (缺省关闭)
局部于窗口
{Vi 无此功能}
在每行前显示相对于光标所在的行的行号。相对行号帮助你给出某些垂直移动命
令 (如 j k + -) 时需要的计数值 |count|,省得你自己去计算。和其它若干命
令组合使用时会更有用 (如 y d c < > gq gw =)。
如果 'cpoptions' 排除 'n' 选项,回绕行不使用行号所占的列 (如果没有置位
'compatible',这是缺省情况)。
可用 'numberwidth' 选项设置行号所需的空间。
经回绕的长行如果不是从首个字符开始,行号之前会加上 '-' 字符。
行号使用的高亮见 |hl-LineNr|。
如果置位此选项,关闭 'number' 选项。
+-*/+-*/report o 报告行改变的行数下限
*'report'*
'report' 数值型 (缺省为 2)
全局
报告改变行数的阈值。如果多于 'report' 的行发生改变,多数 ":" 命令会给
出消息。如果你总是想得到这个消息,设定 'report' 为零。
对于 ":substitute" 命令而言,使用替代的数目,而不是行数。
+-*/+-*/ruler o 标尺,在状态行里显示光标的行号和列号
*'ruler'* *'ru'* *'noruler'* *'noru'*
'ruler' 'ru' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+cmdline_info| 特性才有效}
标尺。显示光标位置的行号和列号,逗号分隔。如果还有空间,在最右端显示文
本在文件中的相对位置:
Top 首行可见
Bot 末行可见
All 首末两行都可见
45% 文件中的相对位置
如果设置 'rulerformat',它决定标尺的内容。
每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示
在屏幕的最后一行上。如果通过 'statusline' 给出状态行 (亦即,非空),该
选项优先于 'ruler' 和 'rulerformat'。
如果显示的字符数不同于文本的字节数 (比如,TAB 或者多字节字符),同时显
示文本列号 (字节数) 和屏幕列号,以连字符分隔。
空行显示 "0-1"。
空缓冲区的行号也为零: "0,0-1"。
如果置位 'paste' 选项,本选项被复位。
如果你不想一直看到标尺但想知道现在在哪里,使用 "g CTRL-G" |g_CTRL-G|。
注意: 如果置位 'compatible',该选项被复位。
+-*/+-*/rulerformat o 定制标尺格式
*'rulerformat'* *'ruf'*
'rulerformat' 'ruf' 字符串 (缺省为空)
全局
{Vi 无此功能}
{仅当编译时加入 |+statusline| 特性才有效}
如果本选项非空,它决定 'ruler' 选项要显示的标尺字符串的内容。
本选项的格式和 'statusline' 类同。
缺省的标尺宽度是 17 个字符。要使标尺 15 个字符宽,在开始加上 "%15(",
在最后加入 "%)"。
例如: >
:set rulerformat=%15(%c%V\ %p%%%)
<
+-*/+-*/shortmess o 缩短消息长度的标志位列表
*'shortmess'* *'shm'*
'shortmess' 'shm' 字符串 (Vim 缺省 "filnxtToO",Vi 缺省: "",
POSIX 缺省: "A")
全局
{Vi 无此功能}
本选项有助于避免文件信息的所有 |hit-enter| 提示,比如用 CTRL-G 的时
候。它还用于避免或减少一些其它消息。以下是标志位的列表:
标志位 存在时的意义 ~
f 用 "(3 of 5)" 代替 "(file 3 of 5)"
i 用 "[noeol]" 代替 "[Incomplete last line]"
l 用 "999L, 888C" 代替 "999 lines, 888 characters"
m 用 "[+]" 代替 "[Modified]"
n 用 "[New]" 代替 "[New File]"
r 用 "[RO]" 代替 "[readonly]"
w 用 "[w]" 代替文件写入消息的 "written",
还有用 "[a]" 代替 ':w >> file' 命令的 "appended"
x 用 "[dos]" 代替 "[dos format]"、
用 "[unix]" 代替 "[unix format]"、
还有用 "[mac]" 代替 "[mac format]"。
a 所有以上的缩写。
o 后续文件的读入信息覆盖文件的写回消息 (":wn" 或打开 'autowrite'
时有用)。
O 文件的读入信息覆盖任何前面消息,包括 quickfix 消息 (比如,
":cn")。
s 不给出 "search hit BOTTOM, continuing at TOP" 或 "search hit
TOP, continuing at BOTTOM" 消息。
t 如果文件消息不能完整放在命令行上,从开头截短该消息。最左列给出
"<"。Ex 模式忽略此标志位。
T 如果其它的消息不能完整放在命令行上,从中间截短该消息。中间给出
"<"。Ex 模式忽略此标志位。
W 写入文件时,不给出 "written" 或 "[w]"。
A 如果发现交换文件已存在,不给出 "ATTENTION" 消息。
I 启动 Vim 时不给出介绍消息 |:intro|。
这给你一个机会,避免在缓冲区之间切换要按 <Enter>,但仍然能够在可用的空
间里得到有用的消息。要得到 'shm' 为空时的完整消息,使用 ":file!"。
有用的值:
shm= 没有消息缩写。
shm=a 有缩写,但不丢失消息。
shm=at 有缩写,必要时截短消息。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/showbreak o 用于提示回绕行开始的字符串
*'showbreak'* *'sbr'* *E595*
'showbreak' 'sbr' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{仅当编译时加入 |+linebreak| 特性才有效}
回绕行放置在开头的字符串。有用的值如 "> " 或 "+++ ": >
:set showbreak=>\
< 注意 要用反斜杠来转义拖尾的空格。下面的就容易些: >
:let &showbreak = '+++ '
< 只允许可显示且只占用一个单元位置的字符,不包括 <Tab> 和逗号 (将来的版
本里,逗号可能用来分隔行首和行尾显示的不同部分)。
这些字符的高亮由 'highlight' 的 '@' 标志位决定。
注意 showbreak 之后的制表使用不同的显示方式。
如果要 'showbreak' 出现在行号之间,在 'cpoptions' 里加上 "n" 标志位。
+-*/+-*/showcmd o 在状态行里显示 (部分) 命令
*'showcmd'* *'sc'* *'noshowcmd'* *'nosc'*
'showcmd' 'sc' 布尔型 (Vim 缺省: 打开,Unix 关闭,Vi 缺省: 关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+cmdline_info| 特性才有效}
在屏幕最后一行显示 (部分的) 命令。如果你的终端很慢,关闭此选项。
可视模式里,显示选择区域的大小,即:
- 在行内选择若干字符时,字符数。如果字节数不同,同时显示字节数: "2-6"
代表 2 个字符和 6 个字节。
- 选择多于一行时,行数。
- 选择可视列块时,屏幕字符的数目: {lines} 乘以 {columns}。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复
位 'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/showmatch o 插入括号时短暂跳转到匹配的括号
*'showmatch'* *'sm'* *'noshowmatch'* *'nosm'*
'showmatch' 'sm' 布尔型 (缺省关闭)
全局
插入括号时,短暂地跳转到匹配的对应括号。只有在屏幕上能看到匹配时才会进
行跳转。显示匹配的时间用 'matchtime' 设置。
如果没有匹配会响铃 (和匹配能否看到无关)。置位 'paste' 时,复位本选项。
如果 'cpoptions' 里没有 'm' 标志位,接着输入字符会立即把光标移动到它应
该在的位置。
'guicursor' 的 "sm" 域说明显示匹配时,如何设置光标形状和闪烁。
'matchpairs' 选项可指定显示匹配所用的字符。用 'rightleft' 和 'revins'
查找反方向的匹配。
移动时要高亮匹配,另见 matchparen 插件 |pi_paren.txt|。
备注: 要使用短形式,建议加强家长指导 (译者注: :-))。
+-*/+-*/showmode o 在状态行上显示当前模式的消息
*'showmode'* *'smd'* *'noshowmode'* *'nosmd'*
'showmode' 'smd' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
在插入、替换和可视模式里,在最后一行提供消息。
'highlight' 的 'M' 标志位设置此消息的高亮类型。
如果可能使用 |XIM|,消息里会包含 "XIM"。但这不意味着实际激活了 XIM,尤
其是可能还没有设置 'imactivatekey'。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/sign c 操作标号
2. 命令 *sign-commands* *:sig* *:sign*
+-*/+-*/statusline o 状态行的定制格式
*'statusline'* *'stl'* *E540* *E541* *E542*
'statusline' 'stl' 字符串 (缺省为空)
全局或局部于窗口 |global-local|
{Vi 无此功能}
{仅当编译时加入 |+statusline| 特性才有效}
如果非空,本选项决定状态行的内容。另见 |status-line|。
此选项包含 printf 风格的 '%' 项目,中间可以间杂普通文本。每个状态行项
目有如下形式:
%-0{minwid}.{maxwid}{item}
除了 {item} 以外,每个字段都是可选的。单个百分号可以用 "%%" 给出。最多
可给出 80 个项目。
如果此选项以 "%!" 开始,它用作表达式。计算此表达式的结果用作选项值。例
如: >
:set statusline=%!MyStatusLine()
< 返回值可以包含 %{} 项目,它还会被继续计算下去。
如果计算选项时有错误,会把它清空以防将来继续出错。否则屏幕更新会陷入循
环。
注意 如果设置本选项 (并且 'laststatus' 为 2 的话),'ruler' 的唯一效果
是控制 |CTRL-G| 的输出。
域 含义 ~
- 左对齐项目。如果 minwid 大于项目的长度,缺省是右对齐。
0 数值项目前面用零填补。'-' 更优先。
minwid 项目的最小宽度,以 '-' 和 '0' 补空。该值不能超过 50。
maxwid 项目的最大宽度。如果超过,在文本项目的左侧截短,以 '<' 代
替。数值项目则往下移到 maxwid-2 个数位,然后跟 '>'number,
其中的 number 是丢失的数位,这非常类似于指数记法。
item 单个字符的代码,下面给出描述。
下面是可能状态行项目的描述。其中,"项目" 的第二个字符代表类型:
N 代表数值型
S 代表字符串型
F 代表下面描述的标志位
- 不适用
项目 含义 ~
f S 缓冲区的文件路径,保持输入的形式或相对于当前目录。
F S 缓冲区的文件完整路径。
t S 缓冲区的文件的文件名 (尾部)。
m F 修改标志位,文本是 "[+]";若 'modifiable' 关闭则是 "[-]"。
M F 修改标志位,文本是 ",+" 或 ",-"。
r F 只读标志位,文本是 "[RO]"。
R F 只读标志位,文本是 ",RO"。
h F 帮助缓冲区标志位,文本是 "[help]"。
H F 帮助缓冲区标志位,文本是 ",HLP"。
w F 预览窗口标志位,文本是 "[Preview]"。
W F 预览窗口标志位,文本是 ",PRV"。
y F 缓冲区的文件类型,如 "[vim]"。见 'filetype'。
Y F 缓冲区的文件类型,如 ",VIM"。见 'filetype'。
{仅当编译时加入 |+autocmd| 特性才有效}
q S "[Quickfix List]"、"[Location List]" 或空。
k S "b:keymap_name" 的值或使用 |:lmap| 映射时的 'keymap':
"<keymap>"。
n N 缓冲区号。
b N 光标所在字节的值。
B N 同上,以十六进制表示。
o N 光标所在字节在文件中的字节偏移,第一个字节为 1。
助记: 从文件开始的偏移 (Offset) (加上 1)
{仅当编译时加入 |+byte_offset| 特性才有效}
O N 同上,以十六进制表示。
N N 打印机页号。(只用于 'printheader' 选项。)
l N 行号。
L N 缓冲区里的行数。
c N 列号。
v N 虚拟列号。
V N 虚拟列号,表示为 -{num}。如果等于 'c' 的值,不显示。
p N 行数计算在文件位置的百分比,如同 |CTRL-G| 给出的那样。
P S 显示窗口在文件位置的百分比,类似于 'ruler' 描述的百分比。长度总
是为 3。
a S 参数列表状态,就像缺省标题里的那样。({current} of {max})
如果参数列表里的文件数为零或一,空字符串。
{ NF 计算 '%{' 和 '}' 之间的表达式,并返回其结果替代。注意 结束的 '}'
之前没有 '%'。
( - 项目组的开始。可以用来为某组项目设置宽度和对齐。后面某处必须有
%)。
) - 项目组的结束。不能指定宽度域。
T N 用于 'tabline': 标签页 N 标签的开始。最后一个标签之后用 %T。鼠标
点击时用此信息。
X N 用于 'tabline': 关闭标签页 N 标签的开始。最后一个标签之后用 %T。
例如: %3Xclose%X,用 %999X 来代表 "关闭当前标签页" 那个符号。鼠
标点击时用此信息。
< - 如果行过长,在什么地方截短。缺省是在开头。不能指定宽度域。
= - 左对齐和右对齐项目之间的分割点。不能指定宽度域。
# - 设置高亮组。必须后面跟名字,然后又是 #。这样,%#HLname# 代表高亮
组 HLname。包括非当前窗口的状态行都使用相同的高亮组。
* - 设置高亮组为 User{N},其中的 {N} 取自 minwid 域,比如 %1*。用 %*
或者 %*0 可以恢复 normal 高亮。User{N} 和 StatusLine 的区别也会
应用到非当前窗口的状态行使用的 StatusLineNC 上。
数字 N 必须从 1 到 9。见 |hl-User1..9|
显示标志位时,如果它紧跟在普通文本之后,Vim 删除之前的前导逗号。这使得
下面例子里使用的标志位显示看起来很舒服。
如果组内的所有项目都是空字符串 (比如,标志位没有设置) 而该组没有设置
minwid,整个组成为空字符串。这使得下面这样的组完全从状态行上消失,如果
没有标志位被置位的话。 >
:set statusline=...%(\ [%M%R%H]%)...
<
要小心,每次显示状态行时都要计算此表达式。当前缓冲区和当前窗口会临时设
为目前要显示的状态行所属的窗口 (缓冲区),而表达式会使用此上下文计算。
变量 "actual_curbuf" 被设为实际的当前缓冲区的 'bufnr()' 号。
可能在沙盘 |sandbox| 里计算 'statusline' 选项。见 |sandbox-option|。
计算 'statusline' 时不允许修改文本或者跳到其它窗口 |textlock|。
如果状态行在你希望时没有更新 (如在设置完表达式里使用的某变量之后),设
置选项可以强制进行更新而无须更改其值。例如: >
:let &ro = &ro
< 如果结果全是数字,用作显示时把它作为数值处理。否则结果作为文本,并应用
上面描述的规则。
小心表达式里的错误。它们可能使 Vim 不可用!
如果你被困住,按住 ':' 或 'Q' 来得到提示,然后退出并用 "vim -u NONE"
来编辑 .vimrc 或者别的什么地方,以修正问题。
示例:
模拟 'ruler' 设置的标准状态行 >
:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
< 类似,但加上光标所在字符的 ASCII 值 (类似于 "ga") >
:set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
< 显示字节偏移和字节值,用红色标记已修改标志位。 >
:set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'
:hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red
< 如果载入的是压缩文件,显示 ,GZ 标志 >
:set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h...
< 并在 |:autocmd| 里: >
:let b:gzflag = 1
< 或: >
:unlet b:gzflag
< 还要定义此函数: >
:function VarExists(var, val)
: if exists(a:var) | return a:val | else | return '' | endif
:endfunction
<
+-*/+-*/terse o 简化部分消息
*'terse'* *'noterse'*
'terse' 布尔型 (缺省关闭)
全局
如果置位: 在 'shortmess' 选项里加入 's' 标志位 (这使得遭遇文件首部和尾
部的搜索不会给出消息)。如果复位: 从 'shortmess' 选项里删除 's' 标志
位。{Vi 缩短很多消息}
+-*/+-*/wrap o 长行回绕并在下一行继续
*'wrap'* *'nowrap'*
'wrap' 布尔型 (缺省打开)
局部于窗口
{Vi 无此功能}
该选项改变文本显示的方式。它不改变缓冲区里的文本,'textwidth' 会。
如果打开,超过窗口宽度的行会回绕,并在下一行继续显示。如果关闭,行不会
回绕。长行只有一部分会显示。如果光标移动到不显示的部分,屏幕会水平滚
动。
如果需要的话,行会在单词的中间断开。'linebreak' 说明如何在单词边界上断
行。
要使得水平滚动稍微更有用些,试设: >
:set sidescroll=5
:set listchars+=precedes:<,extends:>
< 见 'sidescroll'、'listchars' 和 |wrap-off|。
如果 'diff' 选项置位,不能从 |modeline| 中设置。
+-*/+-*/wrapmargin o 使 (硬) 回绕开始的从右侧起算的字符数
*'wrapmargin'* *'wm'*
'wrapmargin' 'wm' 数值型 (缺省为 0)
局部于缓冲区
使 (硬) 回绕开始的从右窗口边界起算的字符数。如果输入的文本超过此限制,
<EOL> 会被插入,而插入从下一行继续。
增加边距的选项,比如 'number' 和 'foldcolumn',会使得文本宽度被进一步
限缩。这是 Vi 兼容行为。
如果 'textwidth' 非零,不使用本选项。
另见 'formatoptions' 和 |ins-textwidth|。{Vi: 行为不同,可用性也差}
+-*/+-*/wrapscan o 搜索在文件尾折回文件头
*'wrapscan'* *'ws'* *'nowrapscan'* *'nows'*
'wrapscan' 'ws' 布尔型 (缺省打开) *E384* *E385*
全局
搜索在文件末回绕回文件首。也用于 |]s| 和 |[s|,搜索拼写错误。
+-*/+-*/z c 显示一些行
*:z* *E144*
:{range}z[+-^.=]{count} 显示包围 {range} 指定行的若干行文本,如果没有 {range},
这显示当前行上下的文本。如果有 {count},它指定你能看到
的行数。否则,如果只有一个窗口,使用 'window' 选项。不
然,使用当前的窗口大小。
+-*/edit _ 编辑
+-*/+-*/append f 附加行或行的列表到缓冲区
append({lnum}, {expr}) *append()*
当 {expr} 为 |List|: 把每个 |List| 项目作为文本行,附加到当前
缓冲区第 {lnum} 行之下。
否则,把 {expr} 作为单个文本行,附加于当前缓冲区第 {lnum} 行之
下。
{lnum} 可以为零,用于在第一行前插入一行。如果失败 ({lnum} 越
界),返回 1,成功则返回 0。例如: >
:let failed = append(line('$'), "# THE END")
:let failed = append(0, ["Chapter 1", "the beginning"])
<
*argc()*
+-*/+-*/append c 附加文本
*:a* *:append*
:{range}a[ppend][!] 在指定行下方添加若干行。如果没有给出 {range},文本会在
当前行之后插入。
加入 [!] 切换此命令执行时的 'autoindent'。
+-*/+-*/backspace o 在一行开头按退格键如何处理
*'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',该选项被设为 ""。
+-*/+-*/center c 排版行,使其居中对齐
:[range]ce[nter] [width] *:ce* *:center*
在 [range] 指定范围的行和 [width] 限定的列 (缺省为
'textwidth',如其为 0,则取 80) 范围内的文本居中对齐。
{Vi 无此功能}
只有在编译时加入 |+ex_extra| 特性时才有此功能。
+-*/+-*/change c 替换一行或若干行
*:c* *:ch* *:change*
:{range}c[hange][!] 用另外的文本替换若干文本行。输入只包含 "." 的行结束替
换。如果没有 {range},该命令只置换当前行。
加上 [!] 后,在本命令的执行期间切换 'autoindent'。
+-*/+-*/copy c 复制行
:[range]co[py] {address} *:co* *:copy*
把 [range] 指定的行复制到 {address} 给出的行之下。
+-*/+-*/delete c 删除行
*:d* *:de* *:del* *:delete*
:[range]d[elete] [x] 删除 [range] 范围的行 (缺省: 当前行) [到寄存器 x 里]。
+-*/+-*/earlier c 回到旧的改变,撤销
*:ea* *:earlier*
:earlier {count} 转到 {count} 次较早的文本状态。
:earlier {N}s 转到大约 {N} 秒钟之前的较早的文本状态。
:earlier {N}m 转到大约 {N} 分钟之前的较早的文本状态。
:earlier {N}h 转到大约 {N} 小时之前的较早的文本状态。
:earlier {N}d 转到大约 {N} 天之前的较早的文本状态。
+-*/+-*/esckeys o 插入模式下识别功能键
*'esckeys'* *'ek'* *'noesckeys'* *'noek'*
'esckeys' 'ek' 布尔型 (Vim 缺省: 打开,Vi 缺省: 关闭)
全局
{Vi 无此功能}
插入模式识别 <Esc> 开始的功能键。如果关闭此选项,光标和功能键,如果它
们以 <Esc> 开头的话,不能用于插入模式。它的优点是,单个 <Esc> 可以被马
上识别,而不用等待一秒。除了复位此选项以外,你也可以改变 'timeoutlen'
和 'ttimeoutlen' 的值。注意如果 'esckeys' 关闭,你仍然可以建立相关的映
射,但缺省情况下无法使用光标键。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/expandtab o 键入 <Tab> 时使用空格
*'expandtab'* *'et'* *'noexpandtab'* *'noet'*
'expandtab' 'et' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能}
插入模式里: 插入 <Tab> 时使用合适数量的空格。如果 'autoindent' 打开,
'>' 和 '<' 命令使用空格进行缩进。'expandtab' 打开时,要插入实际的制
表,可用 CTRL-V<Tab>。另见 |:retab| 和 |ins-expandtab|。
注意: 如果置位 'compatible',该选项被复位。
+-*/+-*/fixdel c 设置 <Del> 的键码
*:fix* *:fixdel*
:fix[del] 设置 't_kD' 的值,如果:
+-*/+-*/getline f 从缓冲区中取一行
getline({lnum} [, {end}])
如果没有 {end},返回字符串,即当前缓冲区第 {lnum} 行文本。
例如: >
getline(1)
< 如果 {lnum} 是不以数字开始的字符串,调用 line() 来把该字符串转
化成数值。要得到光标所在的行: >
getline(".")
< 如果 {lnum} 小于 1 或者大于缓冲区的总行数,返回空字符串。
如果给出 {end},返回 |List|,其中每个项目是当前缓冲区从 {lnum}
到 {end} (包含) 范围的一行。
{end} 的用法同 {lnum}。
安静地忽略不存在的行。
如果 {end} 在 {lnum} 之前,返回空 |List|。
例如: >
:let start = line('.')
:let end = search("^$") - 1
:let lines = getline(start, end)
< 要获取其它缓冲区的文本行,见 |getbufline()|。
+-*/+-*/global c 对匹配的行执行命令
*:g* *:global* *E147* *E148*
:[range]g[lobal]/{pattern}/[cmd]
在 [range] 界定的匹配模式 {pattern} 的文本行上执行
Ex 命令 |cmd| (缺省是 ":p")。
+-*/+-*/insert c 插入文本
*:i* *:in* *:insert*
:{range}i[nsert][!] 在指定行上方添加若干行。如果没有给出 {range},文本会在
当前行之前插入。
加入 [!] 切换此命令执行时的 'autoindent'。
+-*/+-*/join c 连接行
*:j* *:join*
[range]j[oin][!] [flags]
连接 [range] 范围的行。和 "J" 相同,但如有 [!] 时,连
接不插入或删除任何空格。如果 [range] 包括相同的开始和
结束行,该命令不做任何事。缺省行为是连接当前行与下一
行。{Vi: 没有 !}
[flags] 部分可参见 |ex-flags|。
+-*/+-*/joinspaces o 连接命令在句号之后加两个空格
*'joinspaces'* *'js'* *'nojoinspaces'* *'nojs'*
'joinspaces' 'js' 布尔型 (缺省打开)
全局
{Vi 无此功能}
使用连接命令时,在 '.'、'?' 和 '!' 之后插入两个空格。如果 'cpoptions'
包含 'j' 标志位,只在 '.' 之后插入空格。
如果不置位,只插入一个空格。
注意: 置位 'compatible' 时,也置位此选项。
+-*/+-*/keepalt c 跟随的命令保持轮换文件不变
*:keepalt* *:keepa*
:keepalt {cmd} 执行 {cmd},在此期间保持当前轮换文件名不变。注意 间接
调用的命令 (比如通过函数) 仍然可以设置轮换文件名。
{Vi 无此功能}
+-*/+-*/later c 转到新的改变,重做
*:lat* *:later*
:later {count} 转到 {count} 次较新的文本状态。
:later {N}s 转到大约 {N} 秒钟之后的较新的文本状态。
:later {N}m 转到大约 {N} 分钟之后的较新的文本状态。
:later {N}h 转到大约 {N} 小时之后的较新的文本状态。
:later {N}d 转到大约 {N} 天之后的较新的文本状态。
+-*/+-*/left c 左对齐行
*:le* *:left*
:[range]le[ft] [indent]
在 [range] 指定范围的行的文本靠左对齐。其缩进的距离可
由 [indent] 设置 (缺省为 0)。
{Vi 无此功能}
+-*/+-*/mode f 取得当前编辑状态
mode([expr]) 返回指示当前模式的字符串。
如果指定 [expr] 并且其值为非零的数值或非空的字符串
(|non-zero-arg|),返回完整模式,不然,返回第一个字母。注意 " "
和 "0" 都是非空字符串。
n 普通模式
no 操作符等待模式
v 面向字符的可视模式
V 面向行的可视模式
CTRL-V 面向列块的可视模式
s 面向字符的选择模式
S 面向行的选择模式
CTRL-S 面向列块的选择模式
i 插入模式
R 替换模式 |R|
Rv 虚拟替换模式 |gR|
c 命令行模式
cv Vim Ex 模式 |gQ|
ce 普通 Ex 模式 |Q|
r 输入回车的提示
rm -- more -- 提示
r? |:confirm| 等等的询问
! 执行外壳或外部命令时
可用于 'statusline' 选项或 |remote_expr()|。在其它的多数地方,
它总是返回 "c" 或 "n"。
另见 |visualmode()|。
+-*/+-*/move c 移动行
:[range]m[ove] {address} *:m* *:mo* *:move* *E134*
把 [range] 指定的行移动到 {address} 给出的行之下。
+-*/+-*/quoteescape o 字符串里使用的转义字符
*'quoteescape'* *'qe'*
'quoteescape' 'qe' 字符串 (缺省为 "\")
局部于缓冲区
{Vi 无此功能}
字符串里用以转义引号的字符。用于 a'、a" 和 a` |a'| 这样的文本对象。
如果字符串里找到本选项里任何一个字符,跳过下一个字符。缺省值使得文本
"foo\"bar\\" 被认为是单个字符串。
+-*/+-*/read c 读入文件到文本
*:r* *:re* *:read*
:r[ead] [++opt] [name]
在光标下方插入文件 [name] (缺省: 当前文件)。
|++opt| 说明 [++opt] 可能的取值。
+-*/+-*/redo c 重做一次撤销的改变
*:red* *:redo* *redo*
:red[o] 重做一个被撤销的更改。 {Vi: 没有 redo}
+-*/+-*/retab c 改变制表大小
*:ret* *:retab*
:[range]ret[ab][!] [new_tabstop]
把所有包含 <Tab> 的空白序列替代成由新的制表位
[new_tabstop] 确定的空白序列。如果你不指定新的制表位,
或者它为 0,Vim 使用原来的制表位 'tabstop'。
已有的 Tab 的宽度总是用 'tabstop' 的当前值来计算。
如果有 !,Vim 也在合适的时候,把只包含正常空格的字符串
换成 Tab。
如果置位了 'expandtab',Vim 把所有的 Tab 换成相当的空
格。
该命令把 'tabstop' 设为新值。如果按照缺省的情况,在全
文件上进行处理,视觉上应该不会有任何改变。
小心: 该命令修改 C 程序中的字符串里的任何 <Tab> 字符。
要避免这一点,用 "\t" (无论如何,应该养成这个好的习
惯)。
":retab!" 也把空格序列换成 <Tab>,这可能会使 printf()
引起混淆。
{Vi 无此功能,仅在编译时加入 |+ex_extra| 特性才有效}
+-*/+-*/right c 右对齐文本
:[range]ri[ght] [width] *:ri* *:right*
在 [range] 指定范围的行和 [width] 限定的列 (缺省为
'textwidth',如其为 0,则取 80) 范围内的文本靠右对齐。
{Vi 无此功能}
只有在编译时加入 |+ex_extra| 特性时才有此功能。
+-*/+-*/rundo c 从文件里读入撤销信息
*:wundo* *:rundo*
:wundo[!] {file}
把撤销历史写入 {file}。
如果 {file} 已存在而看起来不像撤销文件 (文件头部的魔术数字不
符),此命令失败。除非加上 !。
如果文件存在且看起来像撤销文件,覆盖之。
{Vi 无此功能}
+-*/+-*/setline f 替换缓冲区中的一行
setline({lnum}, {text}) *setline()*
设置当前缓冲区第 {lnum} 行的内容为 {text}。
{lnum} 的用法同 |getline()|。
如果 {lnum} 刚刚在末行之下,{text} 用来增加新行。
如果成功,返回 0。如果失败 (多数是因为 {lnum} 不合法) 返回 1。
例如: >
:call setline(5, strftime("%c"))
< 如果 {text} 为 |List|,那么第 {lnum} 行和其后的行被设为列表里
的项目。例如: >
:call setline(5, ['aaa', 'bbb', 'ccc'])
< 等价于: >
:for [n, l] in [[5, 6, 7], ['aaa', 'bbb', 'ccc']]
: call setline(n, l)
:endfor
< 注意: 这里不会设置 '[ 和 '] 位置标记。
+-*/+-*/shiftround o 缩进列数对齐到 shiftwidth 的整数倍
*'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
'shiftround' 'sr' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
缩进取整到 'shiftwidth' 的倍数。应用于 > 和 < 命令。插入模式里的
CTRL-T 和 CTRL-D 总是把缩进取整到 'shiftwidth' 的倍数 (和 Vi 兼容)。
注意: 如果置位 'compatible',该选项被复位。
+-*/+-*/shiftwidth o (自动) 缩进使用的步进单位,以空白数目计
*'shiftwidth'* *'sw'*
'shiftwidth' 'sw' 数值型 (缺省为 8)
局部于缓冲区
(自动) 缩进每一步使用的空白数目。用于 |'cindent'|、|>>|、|<<| 等。
+-*/+-*/smarttab o 插入 <Tab> 时使用 'shiftwidth'
*'smarttab'* *'sta'* *'nosmarttab'* *'nosta'*
'smarttab' 'sta' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
如果打开,行首的 <Tab> 根据 'shiftwidth' 插入空白。'tabstop' 或
'softtabstop' 用在别的地方。<BS> 删除行首 'shiftwidth' 那么多的空白。
如果关闭,<Tab> 总是根据 'tabstop' 或 'softtabstop' 决定插入空白的数
目。'shiftwidth' 只用于文本左移或右移 |shift-left-right|。
插入空白的具体方式 (制表还是空格) 取决于 'expandtab' 选项。另见
|ins-expandtab|。如果没有置位 'expandtab',通过使用 <Tab>,使空格数目
减到最小。
注意: 如果置位 'compatible',该选项被复位。
+-*/+-*/softtabstop o 编辑时 <Tab> 使用的空格数
*'softtabstop'* *'sts'*
'softtabstop' 'sts' 数值型 (缺省为 0)
局部于缓冲区
{Vi 无此功能}
执行编辑操作,如插入 <Tab> 或者使用 <BS> 时,把 <Tab> 算作空格的数目。
"感觉上" 你就像使用单个 <Tab> 一样,而实际上使用的是空格和 <Tab> 的混
合。这可以用来维持 'ts' 的设置为标准值 8 不变,但编辑时感觉就像它被设
为 'sts' 那样。不过,"x" 这样的命令仍然会在实际的字符上操作。
如果 'sts' 为零,关闭此特性。
如果置位 'paste' 选项,'softtabstop' 被设为 0。
另见 |ins-expandtab|。如果没有置位 'expandtab',通过使用 <Tab>,使空格
数目减到最小。
'cpoptions' 里的 'L' 标志位改变制表在 'list' 置位时的使用方式。
注意: 如果置位 'compatible',该选项被设为 0。
+-*/+-*/sort c 给行排序
*:sor* *:sort*
:[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]
给 [range] 里的行排序。如果没有给出行范围,给所有行排
序。
+-*/+-*/startgreplace c 开始虚拟替换模式
*:startgreplace*
:startg[replace][!] 和 |:startreplace| 完全类似,用虚拟替换模式,和使用
|gR| 类似。
{Vi 无此功能}
{仅当编译时带 |+ex_extra| 特性时才可用}
+-*/+-*/startinsert c 开始插入模式
*:start* *:startinsert*
:star[tinsert][!] 在执行完本命令后,启动插入模式。和普通模式下输入 "i"
类似。如果包含 !,和 "A" 类似,附加到行后。否则,就从
光标当前位置开始插入。
注意 在函数或者脚本里使用本命令时,插入只会在函数和脚
本结束的时候才会开始。
此命令不能在 |:normal| 里使用。
{Vi 无此功能}
{仅当编译时带 |+ex_extra| 特性时才可用}
+-*/+-*/startreplace c 开始替换模式
*replacing-ex* *:startreplace*
:startr[eplace][!] 在执行完本命令后,启动替换模式。和普通模式下输入 "R"
类似。如果包含 !,和 "$R" 类似 (也就是,从行尾开始替换
模式)。否则,从光标当前位置开始替换。
注意 在函数或者脚本里使用本命令时,替换只会在函数和脚
本结束的时候才会开始。
{Vi 无此功能}
{仅当编译时带 |+ex_extra| 特性时才可用}
+-*/+-*/stopinsert c 退出插入模式
*:stopi* *:stopinsert*
:stopi[nsert] 尽快停止插入模式。和在插入模式时输入 <Esc> 类似。可以
用在自动命令里。示例: >
:au BufEnter scratch stopinsert
<
*replacing-ex* *:startreplace*
:startr[eplace][!] 在执行完本命令后,启动替换模式。和普通模式下输入 "R"
类似。如果包含 !,和 "$R" 类似 (也就是,从行尾开始替换
模式)。否则,从光标当前位置开始替换。
注意 在函数或者脚本里使用本命令时,替换只会在函数和脚
本结束的时候才会开始。
{Vi 无此功能}
{仅当编译时带 |+ex_extra| 特性时才可用}
+-*/+-*/t c 等同于 "":copy
*:t*
:t 和 :copy 等价。
+-*/+-*/tabstop o <Tab> 在文件里使用的空格数
*'tabstop'* *'ts'*
'tabstop' 'ts' 数值型 (缺省为 8)
局部于缓冲区
文件里的 <Tab> 代表的空格数。另见 |:retab| 命令和 'softtabstop' 选项。
注意: 设置 'tabstop' 为不同于 8 的值可能使你的文件在很多地方看起来不正
确 (比如,打印时)。
Vim 里有四个主要的使用制表的方法:
1. 总是保持 'tabstop' 为 8,设置 'softtabstop' 和 'shiftwidth' 为 4
(或 3 或任何你想要的) 然后用 'noexpandtab'。这时,Vim 使用制表和空
格的混合,但输入 <Tab> 或 <BS> 键就像每个制表占用 4 (或 3) 个字符一
样。
2. 设置 'tabstop' 和 'shiftwidth' 为想要的任何值,然后用 'expandtab'。
这样,你总是插入空格。改变 'tabstop' 时绝不会影响排版。
3. 设置 'tabstop' 和 'shiftwidth' 为想要的任何值,然后用 |modeline|,
再次编辑时就会重新设置这些值。这只适用于总是使用 Vim 进行文件编辑的
情况。
4. 永远把 'tabstop' 和 'shiftwidth' 设为相同的值,并用 'noexpandtab'。
这样,就可以 (只适用于行首的缩进) 使用任何别人的制表位设置。不过,
如果你这么做,最好在第一个非空白字符之后想插入制表时以空格代替。否
则,改变 'tabstop' 时,注释等的对齐会不正确。
+-*/+-*/textwidth o 插入文本的最大宽度
*'textwidth'* *'tw'*
'textwidth' 'tw' 数值型 (缺省为 0)
局部于缓冲区
{Vi 无此功能}
插入文本的最大宽度。更长的行会在空白之后截断,以达到此宽度。设为零关闭
此项功能。置位 'paste' 选项把 'textwidth' 设为 0。如果 'textwidth' 为
零,可以使用 'wrapmargin'。另见 'formatoptions' 和 |ins-textwidth|。
如果置位 'formatexpr',用它来断开行。
注意: 如果置位 'compatible',该选项被设为 0。
+-*/+-*/undo c 撤销最近的改变
*:u* *:un* *:undo*
:u[ndo] 撤销一次更改。 {Vi: 仅有一级}
+-*/+-*/undojoin c 将下一个改变和上一个撤销块合并
*:undoj* *:undojoin* *E790*
:undoj[oin] 把其后的改变和以前的撤销块进行合并。
警告: 小心使用。它会阻止用户合理地撤销改变。不要在撤销
或重做后使用。
{Vi 无此功能}
+-*/+-*/undolist c 列出撤销树的叶结点
*:undol* *:undolist*
:undol[ist] 列出改变树的所有叶结点。例如:
+-*/+-*/vglobal c 对不匹配的行,执行命令
*:v* *:vglobal*
:[range]v[global]/{pattern}/[cmd]
等同于 :g!。
+-*/+-*/virtualedit o 何时使用虚拟编辑
*'virtualedit'* *'ve'*
'virtualedit' 've' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{仅当编译时加入 |+virtualedit| 特性才有效}
逗号分隔的下面单词的列表:
block 允许可视列块模式的虚拟编辑。
insert 允许插入模式的虚拟编辑。
all 允许所有模式的虚拟编辑。
onemore 允许光标移动到刚刚超过行尾的位置
虚拟编辑意味着光标可以定位在没有实际字符的地方。这可以是制表的中间,也
可以是行尾之后的位置。可用于在可视模式下选择一个方块,还有表格的编辑。
"onemore" 不同,它只允许光标移动到刚刚超过行尾字符之后的位置。这使得有
些命令更加一致。以前,在空行上光标总是刚刚超过行尾。但这和 Vi 远远不兼
容,而且也有可能使一些插件或 Vim 脚本不能工作,比如因为 |l| 可以移动光
标到行尾字符之后。小心使用!
|$| 命令总是移动到行尾字符上,而不是超过它。这使光标可能实际向左移动!
组合使用 "all" 和 "onemore" 没有意义,但你不会因此得到警告。
+-*/+-*/visualmode f 最近一次使用过的可视模式
visualmode([expr]) *visualmode()*
返回字符串,它描述当前缓冲区最近使用的可视模式。一开始,它返回
空字符串,一旦使用了可视模式,返回 "v"、"V" 或 "<CTRL-V>" (单
个 CTRL-V 字符),分别代表面向字符、面向行、和面向列块的可视模
式。
例如: >
:exe "normal " . visualmode()
< 进入和上次相同的可视模式。也可以用于在脚本里根据最近的可视模式
采取不同的行动。
如果当前正处于可视模式中,|mode()| 可得到具体的可视模式 (例如
在 |:vmap| 中可用)。
*non-zero-arg*
如果提供 [expr] 并且计算结果是非零数值或者是非空字符串,那么将
清除可视模式,并返回旧的值。注意 " " 和 "0" 也是非空字符串,所
以也会清除该模式。列表、字典或浮点数不是数值或字符串,所以不会
清除该模式。
*winbufnr()*
+-*/+-*/wundo c 把撤销信息写入文件
*:wundo* *:rundo*
:wundo[!] {file}
把撤销历史写入 {file}。
如果 {file} 已存在而看起来不像撤销文件 (文件头部的魔术数字不
符),此命令失败。除非加上 !。
如果文件存在且看起来像撤销文件,覆盖之。
{Vi 无此功能}
+-*/file _ 文件
+-*/+-*/X c 请求加密密钥
*:X*
:X 提示加密密钥。输入时不会反显输入的内容。别人即使看到屏幕,也不能看见你
的密钥。输入的字符保存在 'key' 选项里,它的值用来在写入文件时加密该文
件。在写入之前,该文件保持不变。另见 |-x|。
+-*/+-*/all c 为参数列表的每个文件打开一个窗口
:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
:[N]sal[l][!] [N]
重新整理屏幕,为每一个参数打开一个窗口。其它窗口统统关闭。如果
使用了计数,则其数值为窗口数目的最大值。
如果带 |:tab| 修饰符,为每个参数打开一个标签页。如果参数数目多
于 'tabpagemax',多余参数成为最后一个标签页的分割窗口。
如果设置了 'hidden',所有要关闭的窗口变为隐藏。
如果没有设置 'hidden',但是设置了 'autowrite',那么所有改动
的缓冲区被写入文件。否则,包含更改过的缓冲区的窗口不会被删除,
除非你用 [!] 使它们隐藏。更改过的缓冲区永远不会被丢弃,所以改
动不会丢失。
[N] 是最大可以打开的窗口数。'winheight' 也限制打开的窗口数。
(如果前加了 |:vertical| 的话 'winwidth')。
Buf/Win Enter/Leave 自动命令不会被这里的新窗口执行,只有在它
们真正进入时才会执行。
+-*/+-*/argument c 转到参数列表一个指定的文件
*:argu* *:argument*
:[count]argu[ment] [count] [++opt] [+cmd]
编辑参数列表里的第 [count] 个文件。在忽略 [count] 的时
候,编辑当前入口项。如果已经作了修改而 vim 不能放弃
|abandon| 当前的缓冲区,该命令失败。
另见 |++opt| 和 |+cmd|。
{Vi 无此功能} {仅当编译时加入 |+listcmds| 特性才有效}
+-*/+-*/autoread o 有 Vim 之外的改动时自动重读文件
*'autoread'* *'ar'* *'noautoread'* *'noar'*
'autoread' 'ar' 布尔型 (缺省关闭)
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
如果发现文件在 Vim 之外修改过而在 Vim 里面没有的话,自动重新读入。
如果文件在外部被删除,不会这么做。|timestamp|
如果该选项有局部值,使用下面的命令切换回直接使用全局值: >
:set autoread<
<
+-*/+-*/autowrite o 有改动时自动写回文件
*'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 o 类似于 'autowrite',但适用于更多命令
*'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
'autowriteall' 'awa' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
和 'autowrite' 类似,但也适用于 ":edit"、":enew"、":quit"、":qall"、
":exit"、":xit"、":recover" 和关闭 Vim 窗口。
置位本选项也意味着 Vim 的行为就像打开 'autowrite' 一样。
+-*/+-*/backup o 覆盖文件时保留备份文件
*'backup'* *'bk'* *'nobackup'* *'nobk'*
'backup' 'bk' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
覆盖文件前创建一个备份。文件成功写入后保留该备份。如果你不想保留备份文
件,但希望写入期间能有备份,复位该选项并置位 'writebackup' 选项
(这是缺省行为)。如果你完全不想要备份文件,同时复位两个选项 (如果你的文
件系统差不多满了,这会有用)。更多的解释可见 |backup-table|。
如果匹配 'backupskip' 模式,无论如何都不会建立备份。
如果设置 'patchmode',备份文件会换名成为文件的旧版本。
注意: 如果置位 'compatible',该选项被复位。
+-*/+-*/backupcopy o 文件备份使用复制而不是换名
*'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 o 备份文件使用的目录列表
*'backupdir'* *'bdir'*
'backupdir' 'bdir' 字符串 (Amiga 的缺省: ".,t:",
MS-DOS 和 Win32: ".,c:/tmp,c:/temp"
Unix: ".,~/tmp,~/")
全局
{Vi 无此功能}
逗号分隔的备份文件的目录名列表。
- 备份文件会在第一个可能的目录里建立。该目录必须已经存在,Vim 不会帮你
建立该目录。
- 空意味着不会建立备份文件 ('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 o 备份文件使用的扩展名
*'backupext'* *'bex'* *E589*
'backupext' 'bex' 字符串 (缺省为 "~",VMS 上: "_")
全局
{Vi 无此功能}
附加到文件名后面的字符串,以构造备份文件的名字。缺省值很特别,因为它可
以避免不小心覆盖已有的且带有备份的文件。你可能喜欢使用 ".bak",但要确
保不存在已经带有 ".bak" 而且你想保留的文件。
只能使用普通的文件名字符。"/\*?[|<>" 都不合法。
如果你喜欢保留很多备份,可以用 BufWritePre 自动命令,使之在写入文件前
改变 'backupext',以包含写入的时间。 >
:au BufWritePre * let &bex = '-' . strftime("%Y%b%d%X") . '~'
< 'backupdir' 可用来把备份放在不同的目录里。
+-*/+-*/backupskip o 匹配这些模式的文件不予备份
*'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|。
+-*/+-*/confirm o 询问如何处理未保存/只读的文件
*'confirm'* *'cf'* *'noconfirm'* *'nocf'*
'confirm' 'cf' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
如果 'confirm' 打开,一些通常因为缓冲区有未保存的改变而失败的操作,比
如 ":q" 和 ":e",会弹出对话框 |dialog|,询问你是否想保存当前 (一个或多
个) 文件。你仍然可以使用 ! 来无条件放弃 |abandon| 缓冲区。
如果 'confirm' 关闭,你仍然可以通过 |:confirm| 命令为单个命令启动确认
机制 (常用于映射)。
另见 |confirm()| 函数和 'guioptions' 的 'v' 标志位。
+-*/+-*/cryptmethod o 文件写入时所用的加密方法
*'cryptmethod'* *'cm'*
'cryptmethod' 字符串 (缺省为 "zip")
全局或局部于缓冲区 |global-local|
{Vi 无此功能}
把缓冲区写入到文件时所用的加密方法:
*pkzip*
zip PkZip 兼容方法。加密较弱。和 Vim 7.2 和之前版本兼容。
*blowfish*
blowfish Blowfish 方法。加密较强。需要 Vim 7.3 或之后版本,文件
_不_能用 Vim 7.2 或之前版本读出。文件中包含一个加密用
的 "种子",所以每次写入文件时加密后的字节都会不相同。
读入加密文件时,'cryptmethod' 会自动设为检测到的读入文件所用之方法。这
样在写入文件时,如果不手动改变 'cryptmethod',会采用之前的方法。
改变 'cryptmethod' 并不会自动使文件标为已改动,你需要显式写入文件才会
生效。除非有其它修改,你不会得到警告。另见 |:X|.
如果设置全局值为空字符串,等同 "zip"。如果设置局部值为空字符串,使用全
局值。
如果新版本 Vim 加入其它加密方法而当前版本不支持的话,会得到 *E821* 。
需要使用更新的 Vim 版本来编辑该文件。
+-*/+-*/did_filetype f 检查某文件类型自动命令是否已经使用
did_filetype() 如果执行自动命令时,激活 FileType 事件至少一次,则返回非零。可
以用于防止在检测文件类型的脚本里再次激活 FileType 事件。
|FileType|
如果编辑另外一个文件,该计数被复位,因而这只能检查 FileType 事
件是否在当前缓冲区里激活过。它允许开始编辑另一个缓冲区的自动命
令设置 'filetype' 并载入语法文件。
+-*/+-*/edit c 编辑文件
*:e* *:edit*
:e[dit] [++opt] [+cmd] 编辑当前文件。可用于在它被 Vim 之外的程序所改变的时候
重新编辑当前文件。 如果当前缓冲区已经被修改而且没有置
位 'autowriteall',或者文件不能被写入,本命令失败。
另见 |++opt| 和 |+cmd|。
{Vi: 无 ++opt}
+-*/+-*/endofline o 文件最后一行写入换行符 <EOL>
*'endofline'* *'eol'* *'noendofline'* *'noeol'*
'endofline' 'eol' 布尔型 (缺省打开)
局部于缓冲区
{Vi 无此功能}
写入文件时如果关闭本选项并且打开 'binary' 选项,文件的末行不写入
<EOL>。编辑新文件时自动打开本选项,除非该文件的末行本没有 <EOL>,那时
本选项被复位。通常你不需要自己置位或者复位本选项。如果 'binary' 关闭,
写入文件时不使用本值。如果 'binary' 打开,本值被用于记住文件末行是否存
在 <EOL>,这样在写回文件时,就不会改变原来文件的使用方式。不过如果你愿
意改变之,可自便。
+-*/+-*/ex c 等同于 "":edit
*:ex*
:ex [++opt] [+cmd] [file]
和 |:edit| 相同。
+-*/+-*/file c 显示或者设置当前文件名
CTRL-G 或 *CTRL-G* *:f* *:fi* *:file*
:f[ile] 显示当前文件名 (如同输入的那样,除非使用过 ":cd")、光
标位置 (除非置位了 'ruler' 选项) 和文件状态 (只读、已
修改、读入错误、新文件)。参见 'shortmess' 选项,了解如
何可以简化该消息。 {Vi 不包括列号}
+-*/+-*/fileformat o 文件输入输出使用的格式
*'fileformat'* *'ff'*
'fileformat' 'ff' 字符串 (MS-DOS、MS-Windows、OS/2 的缺省: "dos",
Unix 缺省: "unix",
Macintosh 缺省: "mac")
局部于缓冲区
{Vi 无此功能}
给出当前缓冲区的 <EOL> 格式,用于从文件读入缓冲区和把缓冲区写回文件:
dos <CR> <NL>
unix <NL>
mac <CR>
如果使用 "dos",文件尾的 CTRL-Z 被忽略。
见 |file-formats| 和 |file-read|。
文件使用的字符编码见 'fileencoding'。
如果设置 'binary',忽略 'fileformat' 的值。文件输入/输出如同它被设为
"unix' 那样。
文件开始编辑时,如果 'fileformats' 非空而 'binary' 关闭,本选项被自动
设置。
开始编辑文件后,如果设置该选项,'modified' 选项被置位,因为文件被认为
和当初写入时已经不同。
本选项在 'modifiable' 关闭时不能改变。
为了后向兼容: 如果本选项设为 "dos",置位 'textmode',否则,复位之。
+-*/+-*/fileformats o 参与自动检测的 'fileformat' 的格式
*'fileformats'* *'ffs'*
'fileformats' 'ffs' 字符串 (缺省:
Vim+Vi MS-DOS、MS-Windows OS/2: "dos,unix",
Vim Unix: "unix,dos",
Vim Mac: "mac,unix,dos",
Vi Cygwin: "unix,dos",
Vi 其它: "")
全局
{Vi 无此功能}
给出换行符 (<EOL>) 的格式,开始编辑新缓冲区或者读入文件到已有的缓冲区
时,尝试这些格式:
- 如果为空,总是使用 'fileformat' 定义的格式。不自动设置该选项。
- 如果设为一个名字,总是为打开的新缓冲区使用该格式,也为该缓冲区相应地
设置 'fileformat'。文件读入已有的缓冲区时,使用 'fileformats' 给出的
名字,不管该缓冲区设定的 'fileformat' 是什么。
- 如果给出多于一个以逗号分隔的名字,读入文件时会进行自动 <EOL> 检测。
开始编辑文件时,这样检查 <EOL>:
1. 如果所有行都以 <CR><NL> 结尾,而 'fileformats' 包含 "dos" 的话,
'fileformat' 设为 "dos"。
2. 如果找到一个 <NL> 而 'fileformats' 包含 "unix" 的话,'fileformat'
设为 "unix"。注意 如果找到的 <NL> 没有前导 <CR>,"unix" 比 "dos"
优先。
3. 如果 'fileformats' 包含 "mac",'fileformat' 设为 "mac"。这意味着
"mac" 只有在没有给出 "unix" 或者在文件里没有找到 <NL>,并且没有给
出 "dos" 或者没有在文件里找到 <CR><NL> 时才会使用。
如果先选择 "unix",但第一个 <CR> 出现在第一个 <NL> 之前,而文件里
的 <CR> 比 <NL> 多的话,'fileformat' 也设为 "mac"。
4. 如果还是不能设置 'fileformat',使用 'fileformats' 的第一个名字。
读入文件到已有的缓冲区时,完成相同的步骤,但如同 'fileformat' 已经为
该文件合适地设置过,不改变该选项。
如果置位 'binary',不使用 'fileformats' 的值。
对于使用 DOS 类型的 <EOL> (<CR><NL>) 的系统来说,读入待执行的脚本
(":source") 或者 vimrc 文件时,可能进行自动 <EOL> 的检测:
- 如果 'fileformats' 为空,没有自动检测。使用 DOS 格式。
- 如果 'fileformats' 设为一到多个名字,进行自动检测。它基于文件中的第
一个 <NL>: 如果在它之前有一个 <CR>,使用 DOS 格式,不然,使用 Unix
格式。
另见 |file-formats|。
为了后向兼容: 如果设置此选项为空字符串或者单一格式 (没有包含逗号),复
位 'textauto',否则置位 'textauto'。
注意: 如果置位 'compatible',本选项被设为 Vi 的缺省值。相反,如果复位
'compatible',本选项被设为 Vim 的缺省值。
+-*/+-*/filetype o 自动命令使用的文件类型
*'filetype'* *'ft'*
'filetype' 'ft' 字符串 (缺省: "")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+autocmd| 特性才有效}
如果设置此选项,激活 FileType 自动命令事件。执行所有匹配本选项值的自动
命令。这时,使用 'filetype' 的值匹配而不是文件名。
否则,本选项不总是反映当前的文件类型。
通常,在检测到文件类型时设置此选项。要打开这一功能,使用 ":filetype
on" 命令。|:filetype|
对于不能自动识别文件类型的文件而言,在模式行里设置此选项是最有用的。比
如对于 IDL 文件:
/* vim: set filetype=idl : */ ~
|FileType| |filetypes|
如果选项值里有句号,它分隔两个名字。例如:
/* vim: set filetype=c.doxygen : */ ~
先使用 "c" 文件类型,再使用 "doxygen" 文件类型。这既适用于文件类型插
件,也适用于语法文件。句号可以多于一个。
不要把本选项和 'osfiletype' 混淆。后者设定实际和文件一起存贮的文件类
型。
不管 'cpoptions' 里是否包含 's' 或 'S' 标志位,本选项不会复制到别的缓
冲区。
只能使用普通的文件名字符。"/\*?[|<>" 都不合法。
+-*/+-*/filetype c 切换文件类型检测的打开/关闭
*:filetype* *:filet*
要打开文件类型的检测,在你的 vimrc 里加入以下命令: >
:filetype on
每次一个新的或者已经存在的文件被编辑时,Vim 会试图识别文件的类型,并设置
'filetype' 选项。同时,也触发 FileType 事件。该事件可以设置语法高亮,特定选
项,等等。
+-*/+-*/find c 在 'path' 里找寻文件并编辑之
*:fin* *:find*
:fin[d][!] [++opt] [+cmd] {file}
在 'path' 里找到 {file},然后编辑 |:edit| 它。
{Vi 无此功能} {仅当编译时加入 |+file_in_path| 特性才有
效}
+-*/+-*/fnamemodify f 改变文件名
fnamemodify({fname}, {mods}) *fnamemodify()*
根据 {mods} 修改文件名 {fname}。{mods} 是一个字符序列组成的字符串,
就像命令行上使用的文件名那样。
例如: >
:echo fnamemodify("main.c", ":p:h")
< 返回: >
/home/mool/vim/vim/src
< 注意: 环境变量不能用于 {fname},需要先用 |expand()| 扩展。
:p 给出文件名的全路径。
:8 将路径转换为 8.3 短格式 (目前仅适用于 win32)。
:~ 如果可能,路径名缩减为基于主目录的相对路径。
:. 如果可能,路径名缩减为基于当前目录的相对路径。
要想尽可能缩减,可使用 ":~:." 。
:h 文件名的头部 (除去文件名的最后一部分以及路径分隔符)。
不能与 :e,:r 或 :t 一起使用。
可以被重复使用来删除后面的多个部分。
如果文件名以一个路径分隔符结尾,仅删除该分隔符。这样一个目录
名的 ":p:h" 结果是目录名本身 (没有后面的斜杠)。
:t 文件名的尾部 (文件名的最后一部分)。必须在 :r 或 :e 之前。
:r 文件名的根部 (除去最后的扩展名)。如果只有扩展名 (文件名以 '.'
开始,例如,".vimrc"),则不会被删除。可以重复使用,以删除多个
扩展名 (最后一个先被删除)。
:e 扩展名。只有单独使用时才有意义。
:s?pat?sub?
用 "sub" 代替第一次出现的 "pat"。这类似于 |:s| 命令。"pat" 是
一个正则表达式。
可以用其它字符代替 '?',只要该字符不出现在 "pat" 或 "sub" 里。
在此之后,上述的修饰符可以再次使用。例如 ":p",是替换之后的完
整路径。
:gs?pat?sub?
用 "sub" 替换所有的 "pat"。其余和 ":s" 一样。
+-*/+-*/haslocaldir f 检查当前窗口是否使用过 |:lcd|
haslocaldir() *haslocaldir()*
返回数值,如果当前窗口用 |:lcd| 设置过本地路径则为 1,不然为
零。
+-*/+-*/key o 加密密钥
*'key'*
'key' 字符串 (缺省为 "")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+cryptv| 特性才有效}
用于加密和解密当前缓冲区的密钥。见 |encryption| 和 'cryptmethod'。
小心: 不要手动设置 key 的值,别人也许看到你输入的密钥。用 |:X| 命令。
不过你可以手动设 'key' 为空: >
:set key=
< 不能用 ":set key" 或 "echo &key" 得到本选项的值。以防本来不应该知道的
人能够看到。这也意味着一旦设置以后,你自己也无法看到,小心不要输错!
+-*/+-*/modeline o 在文件开头或结尾识别模式行
*'modeline'* *'ml'* *'nomodeline'* *'noml'*
'modeline' 'ml' 布尔型 (Vim 缺省: 打开 (root 用户则为关闭)
Vi 缺省: 关闭)
局部于缓冲区
+-*/+-*/modelines o 模式行的检查行数
*'modelines'* *'mls'*
'modelines' 'mls' 数值型 (缺省为 5)
全局
{Vi 无此功能}
如果 'modeline' 打开,'modelines' 给出检查 set 等命令的行数目。如果
'modeline' 关闭或者 'modelines' 为零,不检查任何行。见 |modeline|。
注意: 如果置位 'compatible','modeline' 被设为 Vi 的缺省值。相反,如果
复位 'compatible',它被设为 Vim 的缺省值。
+-*/+-*/patchmode o 保留文件最老的版本
*'patchmode'* *'pm'* *E206*
'patchmode' 'pm' 字符串 (缺省为 "")
全局
{Vi 无此功能}
如果非空,文件的旧版本被保存。在源代码发布中可以用来修改文件并保持文件
的旧版本。只有第一次写入文件时,才保存原始文件的备份。备份的名字是原始
文件的名字加上 'patchmode' 选项的值。该选项必须是以句号开始的字符串,
形如 ".org"。需要 'backupdir' 不为空 (细节: 新文件成功写入后,备份文件
被换名为 patchmode 文件。这就是为什么必须可以写备份文件的原因)。如果没
有文件需要备份 (原来文件不存在),建立空文件。
如果匹配 'backupskip' 模式,不建立 patchmode 文件。
在压缩文件上使用 'patchmode' 会把后缀附加在压缩文件名的后面 (比如,
"file.gz.orig"),产生的文件名不一定能被识别为压缩文件。
只能使用普通的文件名字符。"/\*?[|<>" 都不合法。
+-*/+-*/pathshorten f 缩短路径里的目录名
pathshorten({expr}) *pathshorten()*
缩短路径 {expr} 里的目录名,返回其结果。路径的尾部,即文件名,
保持不变。路径的其余部分被缩短为单个字符。保持每个部分引导的
'~' 和 '.' 字符不变。例如: >
:echo pathshorten('~/.vim/autoload/myfile.vim')
< ~/.v/a/myfile.vim ~
该路径实际存在与否并不相干。
+-*/+-*/preserve c 写入所有文本到交换文件
*:pre* *:preserve* *E313* *E314*
:pre[serve] 把缓冲区中的所有文本写入交换文件中。这样在文件恢复时就
不再需要原文件了。
本命令设置了当前缓冲区的一个标志位。如果 'cpoptions'
里有 '&' 标志位而且 Vim 退出时如果此缓冲区还处于载入状
态,不删除此缓冲区的交换文件 |cpo-&|。
{Vi: 也可能退出}
+-*/+-*/readfile f 读入文件到一个行列表
readfile({fname} [, {binary} [, {max}]])
读入文件 {fname} 并返回 |List|。,文件每行一项。在 NL 字符处断
开行。以 CR 分隔的 Macintosh 文件会返回单个长行 (除非某处出现
了 NL)。
所有的 NUL 字符被 NL 字符替代。
如果 {binary} 等于 "b",使用二进制模式:
- 如果末行以 NL 结尾,附加额外的一个空列表项。
- 不删除 CR 字符。
否则:
- NL 之前的 CR 字符被删除。
- 末行是否以 NL 结尾没有影响。
- 'encoding' 如是 Unicode 编码,删除文本可能有的 UTF-8 字节顺
序标识。
如果给出 {max},指定读入的最大行数。可用于只想检查文件开始十行
这样的场合: >
:for line in readfile(fname, '', 10)
: if line =~ 'Date' | echo line | endif
:endfor
< 如果 {max} 为负,返回从文件尾部起算 -{max} 行,有多少算多少。
如果 {max} 为零,返回空列表。
注意 如果没有 {max},把整个文件读到内存。
也要 注意 这里不识别编码。如果需要,把文件读到缓冲区里。
如果文件不能打开,给出错误信息,并返回空列表。
另见 |writefile()|。
+-*/+-*/recover c 从交换文件里恢复文件
*:rec* *:recover* *E305* *E306* *E307*
:rec[over] [file] 试图从交换文件中恢复 [file]。如果没有指定 [file],使用
当前缓冲区的文件名。当前缓冲区中的内容会丢失。如果缓冲
区已经被修改,此命令失效。
+-*/+-*/saveas c 用别的名字保存文件。
*:sav* *:saveas*
:sav[eas][!] [++opt] {file}
用文件名 {file} 保存当前缓冲区,并设置当前缓冲区的文件
名为 {file}。前一个名字用作轮换文件名。[!] 用以覆盖已
存在的文件。
如果 'filetype' 为空,在写入文件前用新名字进行文件类型
检测。
如果写操作成功,复位 'readonly'。
{Vi 无此功能}
+-*/+-*/setfiletype c 设置 'filetype',除非已经设置过
:setf[iletype] {filetype} *:setf* *:setfiletype*
把 'filetype' 选项设为 {filetype}。但如果已经在 (嵌套)
自动命令序列中设置过,就不再进行。
等价于下面代码的缩写: >
:if !did_filetype()
: setlocal filetype={filetype}
:endif
< 在一个 filetype.vim 里使用该命令可避免设置 'filetype'
选项两次,导致不同的设置和语法文件被载入。
{Vi 无此功能}
+-*/+-*/simplify f 简化路径,不改变其含义
simplify({filename}) *simplify()*
在不改变含义的前提下,尽可能简化文件名。快捷方式 (MS-Windows
上) 或者符号链接 (Unix 上) 不会被解析。如果 {filename} 第一个
路径部分指定了当前目录,结果也会是如此。而结尾的路径分隔符也不
会被删除。
示例: >
simplify("./dir/.././/file/") == "./file/"
< 注意: 组合 "dir/.." 只有在 "dir" 是可以遍历的或者不存在的目录
才会被删掉。Unix 上,如果 "dir" 是同一目录下的符号链接,也会删
除该组合。为了在简化路径名之前解析所有牵涉到的符号链接,使用
|resolve()|。
+-*/+-*/swapfile o 缓冲区是否使用交换文件
*'swapfile'* *'swf'* *'noswapfile'* *'noswf'*
'swapfile' 'swf' 布尔型 (缺省打开)
局部于缓冲区
{Vi 无此功能}
缓冲区使用交换文件。如果不想为特定缓冲区使用交换文件,可以复位本选项。
例如,包含即使 root 也不应得到的机密信息。要小心: 所有的文本都在内存:
- 不要在大文件里使用。
- 无法恢复!
交换文件只有在 |'updatecount'| 不为零并且置位 'swapfile' 时才会存在。
复位 'swapfile' 时,立即删除当前缓冲区的交换文件。如果置位 'swapfile'
并且 'updatecount' 非零,立即建立交换文件。
另见 |swap-file| 和 |'swapsync'|。
此选项可以和 'bufhidden' 和 'buftype' 一起使用,指定特殊类型的缓冲区。
见 |special-buffers|。
+-*/+-*/swapname c 显示当前交换文件的名字
:sw[apname] *:sw* *:swapname*
+-*/+-*/swapsync o 和交换文件同步的方式
*'swapsync'* *'sws'*
'swapsync' 'sws' 字符串 (缺省为 "fsync")
全局
{Vi 无此功能}
如果此选项非空,写入交换文件后同步到磁盘上。这需要一点时间,尤其在繁忙
的 unix 系统上。
如果此选项为空,交换文件的部分内容可能在内存里,还没写回磁盘上。如果系
统崩溃,你可能会丢失更多的工作。
Unix 上,系统时不时进行同步,无须 Vim 请求。所以关闭此选项的缺点很少。
有的系统上,交换文件完全不会被写入。在 Unix 系统上,设置它为 "sync" 会
使用 sync() 调用而不是缺省的 fsync(),在有的系统上这样做可能效果更好。
'fsync' 选项用于实际文件上。
+-*/+-*/undofile f 取得相关的撤销文件名
undofile({name}) *undofile()*
返回用于名为 {name} 的文件的撤销文件名。使用 'undodir' 选项并
寻找实际存在的目录。并不检查该撤销文件是否存在。
{name} 总是扩展为完整路径,因为内部是这么使用的。
可用于 |:wundo| 和 |:rundo|。
如果编译时没有 +persistent_undo 选项,总是返回空字符串。
+-*/+-*/undotree f 撤销文件树
undotree() *undotree()*
返回撤销树的当前状态。返回值是包含以下项目的字典:
"seq_last" 最大使用的撤销序列号。
"seq_cur" 撤销树中当前位置的序列号。如果有撤销过的改变,
和 "seq_last" 会有不同。
"time_cur" 最近用于 |:earlier| 和相关命令的时间。
可用 |strftime()| 转换成可读的格式。
"save_last" 最后的文件写入编号。如果没有写入,返回零。
"save_cur" 撤销树当前位置的编号。
"synced" 如果最后的撤销块已经同步,返回非零值。等待用户
输入时会发生。见 |undo-blocks|。
"entries" 关于撤销块的信息的字典的列表。
"entries" 列表的第一个值是最老的撤销项目。每个列表项目是一个包
含以下项目的字典:
"seq" 撤销序列号。和 |:undolist| 显示的相同。
"time" 改变发生的时间。可用 |strftime()| 转换成可读的
格式。
"newhead" 只出现在最后加入的项目。标识最后的改变,并指示
将来的改变加入所在的位置。
"curhead" 只出现在最后撤销的项目。表示撤销树当前的位置,
该块可用于 redo 命令。如果最后改变之后没有撤销
动作,此项目不出现。
"save" 只出现在文件写入前最后的块。该值为写入计数。首
次写入的编号为 1,最后一次是上面提及的
"save_last"。
"alt" 替代项。这又是一个撤销块的列表。每个项目又可以
有 "alt" 项目。
+-*/+-*/update c 如果有修改,写回缓冲区
*:up* *:update*
:[range]up[date][!] [++opt] [>>] [file]
和 ":write" 类似,但只有在缓冲区已修改的时候才写入。
{Vi 无此功能}
+-*/+-*/view c 以只读方式编辑文件
*:vie* *:view*
:vie[w][!] [++opt] [+cmd] file
用于 Ex 模式时: 退出 |Ex-mode|,回到普通模式。否则和
|:edit| 相同,但为本缓冲区置位 'readonly' 选项。{Vi 无
此功能}
+-*/+-*/visual c 等同于 "":edit"",但关掉 ""Ex"" 模式
*:vi* *:visual*
:vi[sual][!] [++opt] [+cmd] [file]
用于 Ex 模式时: 退出 |Ex-mode|,回到普通模式。否则和
|:edit| 相同。
+-*/+-*/wall c 写回所有 (改变的) 缓冲区
*:wa* *:wall*
:wa[ll] 保存所有已修改的缓冲区。没有文件名或者只读的缓冲区不在
此列。{Vi 无此功能}
+-*/+-*/wq c 写回文件,然后退出窗口或者 Vim
*:wq*
:wq [++opt] 写回当前的文件并且退出。如果文件只读或者该缓冲区无名,
写回操作将失败。如果参数列表的最后一个文件还没有编辑,
那么退出操作将会失败。
+-*/+-*/wqall c 写回所有 (改变的) 缓冲区然后退出 Vim
:wqa[ll] [++opt] *:wqa* *:wqall* *:xa* *:xall*
:xa[ll] 保存所有修改过的缓冲区并退出 Vim。如果其中有无名的、只读的、
或者其他原因写入失败的缓冲区,Vim 不会退出。{Vi 无此功能}
+-*/+-*/write c 写回文件
*:w* *:write*
*E502* *E503* *E504* *E505*
*E512* *E514* *E667* *E796*
:w[rite] [++opt] 将整个缓冲区写入当前文件。这是保存文件更动最普通的方
式。如果置位了 'readonly' 选项或者其他原因不能写入文
件,它会失败。
关于 ++opt 可见 |++opt|,但只有 ++bin、++nobin、++ff
和 ++enc 有效。
+-*/+-*/writeany o 写入文件不需 ""!"" 强制
*'writeany'* *'wa'* *'nowriteany'* *'nowa'*
'writeany' 'wa' 布尔型 (缺省关闭)
全局
允许写入文件,而无需 "!" 覆盖缺省行为。
+-*/+-*/writebackup o 覆盖文件时建立备份
*'writebackup'* *'wb'* *'nowritebackup'* *'nowb'*
'writebackup' 'wb' 布尔型 (有 |+writebackup| 特性时缺省打开,否则缺省关
闭)
全局
{Vi 无此功能}
覆盖文件前建立备份。文件成功写入后,除非 'backup' 选项也被打开,删除
该备份。如果你的文件系统几乎已满,复位此选项。|backup-table| 还有相关
的解释。
如果 'backupskip' 模式匹配,无论如何都不会建立备份。
注意: 如果置位 'compatible',该选项被设为缺省值。
+-*/+-*/writefile f 把一个行列表写到文件里
writefile({list}, {fname} [, {binary}])
把 |List| {list} 写到文件 {fname} 里。列表的项目间以 NL 分隔。
每个列表项必须是字符串或数值。
如果 {binary} 等于 "b",使用二进制模式: 最后一个列表项目之后没
有 NL,最后的空项目使得文件的末行以 NL 结尾。
所有的 NL 字符被 NUL 字符代替。
CR 字符的插入需要在把 {list} 传递给 writefile() 之前先做好。
如果可能,覆盖已有的文件。
如果写入失败,返回 -1,否则返回 0。如果文件不能建立或者写入失
败,会有错误信息。
另见 |readfile()|。
要按字节复制文件: >
:let fl = readfile("foo", "b")
:call writefile(fl, "foocopy", "b")
<
+-*/+-*/xit c 如果缓冲区被改动,写入之。然后退出窗口或者 Vim
*:x* *:xit*
:[range]x[it][!] [++opt] [file]
和 ":wq" 类似, 但只有文件已修改时写入才会实际进行。
如果 'hidden' 被设置并且还有其他窗口,当前缓冲区会在
写入后被隐藏。
+-*/+-*/arg _ 参数
+-*/+-*/+-*/argadd c 增加项目到参数列表中
:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
将若干文件名 {name} 等加到参数列表里。
如果忽略 [count], {name} 等加入到参数列表的当前项之
后。不然,加到第 [count] 个文件之后。如果参数列表是
"a b c",而 "b" 是当前参数,那么以下命令会导致:
+-*/+-*/+-*/argc f 参数列表项数
argc() 返回当前窗口参数列表的文件数目。见 |arglist|。
*argidx()*
+-*/+-*/+-*/argdelete c 从参数列表中删除项目
:argd[elete] {pattern} .. *:argd* *:argdelete* *E480*
从参数列表里删除匹配 {pattern} (可有多个) 的文件。
{pattern} 为文件模式,见 |file-pattern|。"%" 可以用来
删除当前入口项。
即使该命令从参数列表里删除了当前编辑文件,该文件保持被
编辑。
例如: >
:argdel *.obj
< {Vi 无此功能} {仅当编译时加入 |+listcmds| 特性才有效}
+-*/+-*/+-*/argdo c 在参数列表上的所有项目上执行一个命令
*:argdo*
:argdo[!] {cmd} 对参数列表里的每个文件执行 {cmd}。
它的工作方式大致如下: >
:rewind
:{cmd}
:next
:{cmd}
等等
< 如果当前文件不能被放弃 |abandon| 而且不存在 [!],该命
令失败。
如果一个文件检测到错误,参数列表里的其余文件将不再被操
作。
参数列表里的最后一个文件 (或发生错误的那个) 成为当前文
件。
{cmd} 可以包含 '|',从而连接多个命令。
{cmd} 不可修改参数列表。
注意: 当命令执行时,Syntax 自动命令事件被加到
'eventignore' 里,从而被屏蔽。这样显著提高了编辑每个文
件的速度。
{Vi 无此功能} {仅当编译时加入 |+listcmds| 特性才有效}
另见 |:windo|、|:tabdo| 和 |:bufdo|。
+-*/+-*/+-*/argedit c 增加项目到参数列表中并编辑之
:[count]arge[dit][!] [++opt] [+cmd] {name} *:arge* *:argedit*
将 {name} 加到参数列表里,并编辑之。
如果 {name} 已经在参数列表里存在,只编辑之。
这和用 |:argadd| 然后 |:edit| 类似。
注意 这里只允许单个文件名,文件名里的空格是允许的,就
像 |:edit| 一样。
[count] 的用法和 |:argadd| 一样。
如果当前文件不能被放弃 |abandon|,[!] 是必需的。
另见 |++opt| 和 |+cmd|。
{Vi: 无 ++opt}
+-*/+-*/+-*/argglobal c 定义全局参数列表
*:argglobal*
:argg[lobal] 当前窗口使用全局参数列表。并不开始编辑另外一个文件。
+-*/+-*/+-*/argidx f 参数列表中的当前位置
argidx() 返回参数列表的当前索引。0 是第一个文件。argc() - 1 是最后一
个。见 |arglist|。
*argv()*
+-*/+-*/+-*/arglocal c 定义本地参数列表
*:arglocal*
:argl[ocal] 复制一个全局参数列表的局部备份。并不开始编辑另外一个文
件。
+-*/+-*/+-*/args c 显示参数列表
*:ar* *:args*
:ar[gs] 显示参数列表,当前文件以方括号表示。
+-*/+-*/+-*/argv f 从参数列表中取得一项
argv([{nr}]) 返回当前窗口参数列表第 {nr} 个参数。见 |arglist|。"argv(0)" 是
第一个参数。
例如: >
:let i = 0
:while i < argc()
: let f = escape(fnameescape(argv(i)), '. ')
: exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
: let i = i + 1
:endwhile
< 如果没有 {nr} 参数,返回完整的 {arglist} 的 |List|。
+-*/+-*/+-*/first c 转到参数列表的第一个文件
*:fir* *:first*
:fir[st][!] [++opt] [+cmd]
":rewind" 的别名。{Vi 无此功能}
+-*/+-*/+-*/last c 转到参数列表的最后一个文件
*:la* *:last*
:la[st] [++opt] [+cmd]
开始编辑参数列表的最后一个文件。如果已经作了修改而 vim
不能放弃 |abandon| 当前的缓冲区,该命令失败。另见
|++opt| 和 |+cmd|。{Vi 无此功能}
+-*/+-*/+-*/next c 跳转到参数列表的下一个文件
:[count]n[ext] [++opt] [+cmd] *:n* *:ne* *:next* *E165* *E163*
编辑向后第 [count] 个文件。如果已经作了修改而 vim 不能
放弃 |abandon| 当前的缓冲区,该命令失败。另见 |++opt|
和 |+cmd|。{Vi 没有 count 和 ++opt}
+-*/+-*/+-*/previous c 跳转到参数列表里的上一个文件
:[count]prev[ious] [count] [++opt] [+cmd] *:prev* *:previous*
和 :Next 相同。另见 |++opt| 和 |+cmd|。{Vi: 只有在某些
版本存在}
+-*/+-*/+-*/rewind c 转到参数列表的第一个文件
*:rew* *:rewind*
:rew[ind] [++opt] [+cmd]
开始编辑参数列表的第一个文件。如果已经作了修改而 vim
不能放弃 |abandon| 当前的缓冲区,该命令失败。另见
|++opt| 和 |+cmd|。{Vi 没有 ++opt}
+-*/+-*/+-*/sNext c 分割窗口并转到参数列表的前一个文件
:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
这是 ":split | [N]Next" 命令的简写。分割窗口并切换到向前第 N
个参数。但是如果该参数不存在,窗口不会分割。参见 |++opt| 和
|+cmd|。
+-*/+-*/+-*/sall c 为参数列表的每个文件打开窗口
:[N]al[l][!] [N] *:al* *:all* *:sal* *:sall*
:[N]sal[l][!] [N]
重新整理屏幕,为每一个参数打开一个窗口。其它窗口统统关闭。如果
使用了计数,则其数值为窗口数目的最大值。
如果带 |:tab| 修饰符,为每个参数打开一个标签页。如果参数数目多
于 'tabpagemax',多余参数成为最后一个标签页的分割窗口。
如果设置了 'hidden',所有要关闭的窗口变为隐藏。
如果没有设置 'hidden',但是设置了 'autowrite',那么所有改动
的缓冲区被写入文件。否则,包含更改过的缓冲区的窗口不会被删除,
除非你用 [!] 使它们隐藏。更改过的缓冲区永远不会被丢弃,所以改
动不会丢失。
[N] 是最大可以打开的窗口数。'winheight' 也限制打开的窗口数。
(如果前加了 |:vertical| 的话 'winwidth')。
Buf/Win Enter/Leave 自动命令不会被这里的新窗口执行,只有在它
们真正进入时才会执行。
+-*/+-*/+-*/sargument c 分割窗口并转到参数列表的某一个文件
:[N]sa[rgument][!] [++opt] [+cmd] [N] *:sa* *:sargument*
这是 ":split | argument [N]" 命令的简写。分割窗口并切换至第 N
号参数。但是如果该参数不存在,窗口不会分割。参见 |++opt| 和
|+cmd|。
+-*/+-*/+-*/sfirst c 分割窗口并转到参数列表的第一个文件
*:sfir* *:sfirst*
:sfir[st] [++opt] [+cmd]
与 ":srewind" 相同。
+-*/+-*/+-*/slast c 分割窗口并转到参数列表的最后一个文件
*:sla* *:slast*
:sla[st][!] [++opt] [+cmd]
这是 ":split | last" 命令的简写。分割窗口并切换到最后一个参
数。但是如果没有参数列表,窗口不会分割。参见 |++opt| 和
|+cmd|。
*:dr* *:drop*
:dr[op] [++opt] [+cmd] {file} ..
在一个窗口内编辑第一个 {file}。
- 如果该文件已经被打开,切换至该文件所在窗口。
- 如果该文件尚未被打开,在当前窗口内打开该文件。如果当前窗口
无法被放弃 |abandon|,窗口会先被分割。
参数列表 |argument-list| 会被象使用 |:next| 命令一样被设定。
此命令的目的在于:允许 debugger 之类的程序里让 Vim 编辑另一个
文件。
如果使用 |:tab| 修饰符,为每个参数打开一个标签页。如果为空,使
用最后一个窗口。
另见 |++opt| 和 |+cmd|。
{仅当编译时有 GUI 才可用}
+-*/+-*/+-*/snext c 分割窗口并转到参数列表的下一个文件
:[N]sn[ext][!] [++opt] [+cmd] [file ..] *:sn* *:snext*
这是 ":split | [N]next" 命令的简写。分割窗口并切换到向后第 N
个参数。但是如果该参数不存在,窗口不会分割。参见 |++opt| 和
|+cmd|。
+-*/+-*/+-*/sprevious c 分割窗口并转到参数列表的前一个文件
:[N]spr[evious][!] [++opt] [+cmd] [N] *:spr* *:sprevious*
:[N]sN[ext][!] [++opt] [+cmd] [N] *:sN* *:sNext*
这是 ":split | [N]Next" 命令的简写。分割窗口并切换到向前第 N
个参数。但是如果该参数不存在,窗口不会分割。参见 |++opt| 和
|+cmd|。
+-*/+-*/+-*/srewind c 分割窗口并转到参数列表的第一个文件
*:sre* *:srewind*
:sre[wind][!] [++opt] [+cmd]
这是 ":split | rewind" 命令的简写。分割窗口并切换到第一个参
数。但是如果没有参数列表,窗口不会分割。参见 |++opt| 和
|+cmd|。
+-*/+-*/+-*/wNext c 写回文件,然后跳转到参数列表的前一个文件
:[count]wN[ext][!] [++opt] [file] *:wN* *:wNext*
:[count]wp[revious][!] [++opt] [file] *:wp* *:wprevious*
和 :wnext 相同,向前编辑而不是向后。{Vi 无此功能}
+-*/+-*/+-*/wnext c 写回文件,然后跳转到参数列表的下一个文件
*:wn* *:wnext*
:[count]wn[ext] [++opt]
写回当前文件并开始编辑向后第 [count] 个文件。另见
|++opt| 和 |+cmd|。{Vi 无此功能}
+-*/+-*/+-*/wprevious c 写回文件,然后跳转到参数列表的前一个文件
:[count]wp[revious][!] [++opt] [file] *:wp* *:wprevious*
和 :wnext 相同,向前编辑而不是向后。{Vi 无此功能}
+-*/+-*/os _ 系统
+-*/+-*/+-*/cd c 改变目录
*:cd* *E747* *E472*
:cd[!] 在非 Unix 系统上: 显示当前目录名。在 Unix 系统上: 改变
当前目录到主 (home) 目录。在所有的系统上,用 |:pwd| 可
以显示当前目录。
+-*/+-*/+-*/cdpath o "":cd"" 搜索的目录列表
*'cdpath'* *'cd'* *E344* *E346*
'cdpath' 'cd' 字符串 (缺省: 等价于 $CDPATH 或 ",,")
全局
{Vi 无此功能}
{仅当编译时加入 |+file_in_path| 特性才有效}
这是一个目录列表。使用 |:cd| 和 |:lcd| 命令时,如果查找的是相对路径,
而不是以 "/"、"./" 或 "../" 开始的绝对路径,在这里搜索目录。绝对路径不
使用 'cdpath' 选项。
'cdpath' 选项的值和 |'path'| 有相同的形式和语义。另见
|file-searching|。
缺省值取自 $CDPATH,并在前面附加 ",",以便先搜索当前目录。
如果取自 $CDPATH 的缺省值不是你想要的,在 vimrc 文件里加入下面命令的修
改版本以覆盖之: >
:let &cdpath = ',' . substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
< 为了安全原因,本选项不能在 |modeline| 或 |sandbox| 里设置。
('cdpath' 的内容可传递给外壳以便扩展文件名)。
+-*/+-*/+-*/chdir c 改变当前目录
*:chd* *:chdir*
:chd[ir][!] [path] 和 |:cd| 相同。
+-*/+-*/+-*/delete f 删除文件
delete({fname}) *delete()*
删除名为 {fname} 的文件。返回类型为数值。如果成功删除文件,返
回 0,如果删除失败,返回非零。
从 |List| 里删除项目请用 |remove()|。
*did_filetype()*
+-*/+-*/+-*/executable f 检查一个可执行程序是否存在
executable({expr}) *executable()*
本函数检查名字由 {expr} 指定的可执行文件存在与否。{expr} 必须
是程序不带任何参数的名字。
executable() 使用 $PATH 的值和/或程序的普通的搜索路径。
*PATHEXT*
MS-DOS 和 MS-Windows 上,可以可选地包含 ".exe"、".bat" 等。为
此,$PATHEXT 里的扩展名会被尝试。这样,如果 "foo.exe" 不存在,
可能会找到 "foo.exe.bat"。如果没有设置 $PATHEXT,使用的是
".exe;.com;.bat;.cmd"。$PATHEXT 里可以使用单独的句号,以尝试没
有扩展名的名字。如果 'shell' 看起来像 Unix 外壳,那么也尝试没
有扩展名的名字。
MS-DOS 和 MS-Windows 上,只检查是否文件存在且不是目录,并不检
查它是否真的可以执行。
MS-Windows 上,和 Vim 在同一目录的可执行文件总能找到。因为这个
目录加到了 $PATH 里,执行应该也没有问题 |win32-PATH|。
返回数值:
1 存在
0 不存在
-1 此系统中没有实现
*exists()*
+-*/+-*/+-*/filereadable f 检查一个文件可读与否
filereadable({file}) *filereadable()*
返回数值,如果名为 {file} 的文件存在且可读,则为真。如果
{file} 不存在,或者是一个目录,返回假。{file} 可以是任何返回字
符串的表达式。
如果你不关心文件是否可读,可用 |glob()|。
*file_readable()*
已废弃的名字: file_readable()。
+-*/+-*/+-*/filewritable f 检查一个文件可写与否
filewritable({file}) *filewritable()*
返回数值,如果名为 {file} 的文件存在且可写,则为 1。如果
{file} 不存在,或者不可写,返回 0。如果 {file} 是一个目录但是
可写,返回 2。
+-*/+-*/+-*/finddir f 在目录列表里查找目录
finddir({name}[, {path}[, {count}]]) *finddir()*
在 {path} 里查找目录 {name}。支持向下和向上的递归目录搜索。
{path} 的语法参见 |file-searching|。
返回第一个找到的路径。如果找到的
路径在当前目录之下,返回相对路径。否则,返回完整路径。
如果省略 {path},使用 'path'。
如果给出可选的 {count},寻找 {path} 里 {name} 第 {count} 次出
现,而不是第一次。
如果 {count} 为负,返回所有的匹配的列表。
这和 ex 命令 |:find| 非常类似。
{仅当编译时加入 |+file_in_path| 特性才有效}
+-*/+-*/+-*/findfile f 在目录列表里查找文件
findfile({name}[, {path}[, {count}]]) *findfile()*
类似于 |finddir()|,不过寻找文件而不是目录。
使用 'suffixesadd'。
例如: >
:echo findfile("tags.vim", ".;")
< 从当前文件所在的目录开始往上搜索,直到找到文件 "tags.vim" 为
止。
+-*/+-*/+-*/fsync o 文件写回后是否激活 fsync()
*'fsync'* *'fs'*
'fsync' 'fs' 布尔型 (缺省打开)
全局
{Vi 无此功能}
如果打开,写入文件后调用库函数 fsync()。它会把文件刷新到磁盘上,确保文
件即使在只做元数据 (metadata) 日志 (journaling) 的文件系统上也会被安全
写入。Linux 系统的笔记本模式下,它会强迫硬盘转上一会儿,有时候你不想这
样。但要警告你,关闭此选项增加崩溃时数据丢失的机率。没有 fsync() 实现
的系统上,此选项总是关闭的。
另见 'swapsync',说明如何控制交换文件的 fsync()。
+-*/+-*/+-*/getcwd f 取得当前工作路径
getcwd() 返回字符串,当前工作目录的名字。
+-*/+-*/+-*/getfperm f 得到文件权限
getfperm({fname}) *getfperm()*
返回字符串,给定文件 {fname} 的读、写、执行权限。
如果 {fname} 不存在或者它所在的目录无法读取,返回空字符串。
返回值的形式是 "rwxrwxrwx",其中每组 "rwx" 标志位分别代表文件
所有者、文件所属组和其它用户的权限。如果用户没有某权限,相应的
标志位被字符串 "-" 代替。例如: >
:echo getfperm("/etc/passwd")
< 希望它会 (从安全角度而言) 显示字符串 "rw-r--r--" 或者甚至
"rw-------"。
+-*/+-*/+-*/getfsize f 取得文件大小
getfsize({fname}) *getfsize()*
返回数值,文件 {fname} 以字节数计算的大小。
如果 {fname} 是目录,返回 0。
如果找不到文件 {fname},返回 -1。
如果 {fname} 文件过大,超出了 Vim 的数值的范围,返回 -2。
+-*/+-*/+-*/getftime f 得到文件的最近修改时间
getftime({fname}) *getftime()*
返回数值,给定文件 {fname} 的最新修改时间。该时间为 1970 年 1
月 1 日开始计算的秒数,可以传给 strftime()。
另见 |localtime()| 和 |strftime()|。
如果找不到文件 {fname},返回 -1。
+-*/+-*/+-*/getftype f 得到文件类型
getftype({fname}) *getftype()*
返回字符串,给定文件 {fname} 的文件类型的描述。
如果 {fname} 不存在,返回空字符串。
下表列出各种不同文件类型的返回值:
普通文件 "file"
目录 "dir"
符号链接 "link"
块设备 "bdev"
字符设备 "cdev"
套接字 "socket"
FIFO "fifo"
其它 "other"
例如: >
getftype("/home")
< 注意 只有在能支持的系统上才会返回 "link" 这样的类型。有的系统
只支持 "dir" 和 "file"。
*getline()*
+-*/+-*/+-*/glob f 展开通配符
glob({expr} [, {flag}]) *glob()*
扩展 {expr} 里的文件通配符。|wildcards| 说明其中特殊字符的使用
方法。
结果是字符串。
如果返回多个匹配,以 <NL> 字符分隔。
除非给出可选的 {flag} 参数且非零,应用 'suffixes' 和
'wildignore' 选项: 跳过匹配任何 'wildignore' 模式的名字,而
'suffixes' 影响匹配结果的排序。
如果扩展失败,返回空字符串。
扩展结果不包含不存在文件的名字。
多数系统上,可以用反引号从外部命令得到文件名。例如: >
:let tagfiles = glob("`find . -name tags -print`")
:let &tags = substitute(tagfiles, "\n", ",", "g")
< 反引号包围的程序的输出结果必须每个项目一行。项目内部可以使用空
格。
特殊 Vim 变量的扩展见 |expand()|。|system()| 说明如何得到外部
命令的原始输出。
+-*/+-*/+-*/globpath f 在几个路径中展开通配符
globpath({path}, {expr} [, {flag}]) *globpath()*
在 {path} 的所有目录下执行 glob() 并连接所有的返回结果。例
如: >
:echo globpath(&rtp, "syntax/c.vim")
< {path} 是逗号分隔的目录名的列表。每个目录名都附加在 {expr} 之
前,然后如同 |glob()| 那样被扩展。必要的话,插入路径分隔符。
要在目录名字里加上逗号,可以使用反斜杠转义。注意 在 MS-Windows
上目录的最后可能有一个反斜杠。如果你要在后面加上逗号进行分隔,
先把反斜杠去掉。
如果某个目录下的扩展失败,不会有错误信息。
除非给出可选的 {flag} 参数且非零,应用 'suffixes' 和
'wildignore' 选项: 跳过匹配任何 'wildignore' 模式的名字,而
'suffixes' 影响匹配结果的排序。
可以用 "**" 项目来搜索目录树。例如,寻找在 'runtimepath' 和它
之下所有目录里的 "README.txt" 文件: >
:echo globpath(&rtp, "**/README.txt")
< 不支持向上搜索和 "**" 的深度限制,所以 'path' 的使用不一定总能
正确工作。
*has()*
+-*/+-*/+-*/hostname f 系统的名称
hostname() *hostname()*
返回字符串,即 Vim 运行的机器名字。超过 256 字符串长度的机器名
被截短。
+-*/+-*/+-*/isdirectory f 检查一个目录是否存在
isdirectory({directory}) *isdirectory()*
返回数值,如果名为 {directory} 的目录存在,返回非零。如果
{directory} 不存在或者不是目录,返回假值。{directory} 可以是任
何表达式,最终用作字符串。
+-*/+-*/+-*/lcd c 改变本地的目录
*:lc* *:lcd*
:lc[d][!] {path} 和 |:cd| 类似,但只设置当前窗口的当前目录。别的窗口的
当前目录保持不变。{Vi 无此功能}
+-*/+-*/+-*/lchdir c 改变本地的目录
*:lch* *:lchdir*
:lch[dir][!] 和 |:lcd| 相同。{Vi 无此功能}
+-*/+-*/+-*/mkdir f 建立新目录
mkdir({name} [, {path} [, {prot}]])
建立目录 {name}。
如果 {path} 为 "p",必要时建立中间的目录。否则它必须是 ""。
如果给出 {prot},它用于设置新目录的权限。缺省为 0755
(rwxr-xr-x: 用户自己可读写,其它人可读)。用 0700 使其它人不可
读。这只用于 {name} 的最后部分。所以,如果建立 /tmp/foo/bar,
/tmp/foo 创建时的权限是 0755。
示例: >
:call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
< 该函数在沙盘里不可用 |sandbox|。
不一定在所有系统上都可用。要检查这一点,使用: >
:if exists("*mkdir")
<
*mode()*
+-*/+-*/+-*/osfiletype o 操作系统特定的文件格式信息
*'osfiletype'* *'oft'* *E366*
'osfiletype' 'oft' 字符串 (RISC-OS 缺省: "Text",
其它的缺省: "")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+osfiletype| 特性才有效}
有的操作系统保存除了名字、时间标记和权限之外的附加文件信息。本选项包含
这些附加的信息。很自然的,这些信息因系统而异。本选项的值通常在文件读入
时设置,而在写入时可以使用本值设置操作系统文件类型。
它可以影响自动命令的模式匹配。|autocmd-osfiletypes|
+-*/+-*/+-*/pwd c 显示当前目录
*:pw* *:pwd* *E187*
:pw[d] 显示当前目录名。{Vi: 没有 pwd}
另见 |getcwd()|。
+-*/+-*/+-*/rename f 重命名文件
rename({from}, {to}) *rename()*
把文件名 {from} 换成 {to}。这也可用来在文件系统间移动文件。返
回数值,如果文件成功换名,返回零,如果换名失败,返回非零。
注意 如果 {to} 已存在,它被覆盖且没有提示。
该函数在沙盘里不可用 |sandbox|。
+-*/+-*/+-*/resolve f 找到一个快捷方式所指
resolve({filename}) *resolve()* *E655*
在 MS-Windows 上,如果 {filename} 是一个快捷方式 (.lnk 文件),
返回简化的快捷方式指向的路径。
在 Unix 上,反复分析 {filename} 的所有路径部分的符号链接的真正
路径,直到返回最简化的结果为止。为了处理循环链接的问题,符号链
接的分析在 100 次叠代之后停止。
在其它系统上,返回简化了的 {filename}。
简化的工作通过 |simplify()| 完成。
resolve() 保留指向当前目录的首个路径部分 (保证结果仍然是相对路
径名),也保留出现在尾部的路径分隔符。
*reverse()*
+-*/+-*/+-*/shortname o 非 MS-DOS: 文件名假定为 8.3 字符
*'shortname'* *'sn'* *'noshortname'* *'nosn'*
'shortname' 'sn' 布尔型 (缺省关闭)
局部于缓冲区
{Vi 无此功能,MS-DOS 版本也没有}
假定文件名为 8 字符加 3 字符的扩展。文件名不能有多个句号。如果打开此选
项,在附加扩展名时,文件名里的句号被下划线替换 (".~" 或 ".swp")。此选
项在 MS-DOS 上不可用,因为那里它总应该是打开的。此选项用于编辑 MS-DOS
兼容的文件系统的文件,比如,messydos 或 crossdos。运行 Win32s 上的
Win32 GUI 版本时,缺省总是打开此选项。
+-*/+-*/+-*/tempname f 取得一个临时文件的名称
tempname() *tempname()* *temp-file-name*
返回字符串,它是一个不存在的文件名。可以用作临时文件。该文件在
至少 26 个接连的调用内不会重复。例如: >
:let tmpfile = tempname()
:exe "redir > " . tmpfile
< Unix 上,文件会在用户个人的目录中 |tempfile|。
MS-Windows 上,如果置位了 'shellslash' 选项或者 'shellcmdflag'
以 '-' 开始的时候,使用正斜杠。
+-*/fold _ 折叠
+-*/+-*/commentstring o 注释的样板;用于折叠的标志
*'commentstring'* *'cms'* *E537*
'commentstring' 'cms' 字符串 (缺省为 "/*%s*/")
局部于缓冲区
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
注释行的样板。该值里面的 "%s" 被注释文本替换。目前,只用于为折叠增加标
志。见 |fold-marker|。
+-*/+-*/fold c 创建折叠
:{range}fo[ld] *:fold* *:fo*
对 {range} 内的行创建折叠。其余同 "zf" 。
+-*/+-*/foldclose o 当光标离开时关闭折叠
*'foldclose'* *'fcl'*
'foldclose' 'fcl' 字符串 (缺省为 "")
全局
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
如果设为 "all",不包含光标且级别高于 'foldlevel' 的折叠被关闭。用于光
标移出后,自动关闭折叠。
+-*/+-*/foldclose c 关闭折叠
*:foldc* *:foldclose*
:{range}foldc[lose][!]
在 {range} 内关闭折叠。当加上 [!] 时,所有的折叠都被关闭。对隐
藏在 {range} 内的所有文本很有用。没有 [!] 时,关闭一级折叠。
+-*/+-*/foldclosed f 检查某一行是否被折叠起来
foldclosed({lnum}) *foldclosed()*
返回数值,如果行 {lnum} 在关闭的折叠中,返回该折叠开始的行号。
如果行 {lnum} 不在关闭的折叠中,返回 -1。
+-*/+-*/foldclosedend f 类似 foldclosed() 但同时返回最后一行
foldclosedend({lnum}) *foldclosedend()*
返回数值,如果行 {lnum} 在关闭的折叠中,返回该折叠结束的行号。
如果行 {lnum} 不在关闭的折叠中,返回 -1。
+-*/+-*/foldcolumn o 设定指示折叠的列宽度
*'foldcolumn'* *'fdc'*
'foldcolumn' 'fdc' 数值型 (缺省为 0)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
如果非零,指定宽度的列在窗口的一侧显示,指示折叠的打开和关闭。最大值为
12。
见 |folding|。
+-*/+-*/folddoclosed c 对所有在关闭折叠的行执行命令
:[range]folddoc[losed] {cmd} *:folddoc* *:folddoclosed*
对所有在关闭的折叠里的行,执行 {cmd}。
其它同 ":folddoopen" 命令。
+-*/+-*/folddoopen c 对所有不在关闭折叠的行执行命令
:[range]foldd[oopen] {cmd} *:foldd* *:folddoopen*
对所有不在关闭的折叠中的行执行 {cmd}。
给定 [range] 时,仅对范围内那些行起作用。
每次命令被执行时,光标会被定位在要被操作的行上。
就如 ":global" 命令:首先标记出所有不在关闭的折叠中的行。然后
对所有标记过的行,执行 {cmd}。所以当 {cmd} 改变了文本的折叠
时,对命令执行的位置没有影响 (当然,删除行例外)。
如: >
:folddoopen s/end/loop_end/ge
< 使用标志位 "e" 避免了当 "end" 不匹配时得到错误消息。
+-*/+-*/foldenable o 设置为显示所用打开的折叠
*'foldenable'* *'fen'* *'nofoldenable'* *'nofen'*
'foldenable' 'fen' 布尔型 (缺省打开)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
如果关闭,所有的折叠都被打开。本选项用于在文本显示的完全打开折叠和保留
折叠之间 (包括手动打开或关闭的折叠) 快速切换。|zi| 命令切换本选项。
如果 'foldenable' 关闭,'foldcolumn' 会保持空白。
建立新折叠或者关闭折叠的命令置位本选项。见 |folding|。
+-*/+-*/foldexpr o 当 'foldmethod' 为 ""expr"" 时使用的表达式
*'foldexpr'* *'fde'*
'foldexpr' 'fde' 字符串 (缺省: "0")
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 和 |+eval| 特性才有效}
'foldmethod' 为 "expr" 时使用的表达式。每行使用它计算折叠级别。见
|fold-expr|。
可能在沙盘 |sandbox| 里计算此表达式。见 |sandbox-option|。
如果 'diff' 选项置位,不能从 |modeline| 中设置。
计算 'foldexpr' 时不允许修改文本或者跳到其它窗口 |textlock|。
表 达 式 *fold-expr*
就象用 "indent" 方式一样,表达式方式的折叠也是由折叠级别自动定义的。对每行,通
过计算选项 'foldexpr' 的值来并得到它的折叠级别。如:
对所有以制表符开始的连续的几行,创建折叠: >
:set foldexpr=getline(v:lnum)[0]==\"\\t\"
调用一函数来计算折叠级别: >
:set foldexpr=MyFoldLevel(v:lnum)
用空白行分开的段落构成折叠: >
:set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1
同上: >
:set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1
备注: ":set" 要特殊处理的字符必须用反斜杠转义。(空格,反斜杠,双引号等等,参考
|option-backslash|)
这些是表达式的计算条件:
- 当前缓冲区和窗口值依所在行而定
- 变量 "v:lnum" 被定为该行行号
- 计算结果将用以下方式解释:
值 代表 ~
0 这行不折叠
1, 2, .. 这行的折叠级别 1,2 等
-1 折叠级别没有定义,使用这行之前或之后一行的级别值,取其
中较小的一个。
"=" 使用上一行的折叠级别。
"a1", "a2", .. 上一行的折叠级别加 1,2,..
"s1", "s2", .. 上一行的折叠级别减 1,2,..
"<1", "<2", .. 此折叠级别在本行结束
">1", ">2", .. 此折叠级别在本行开始
不需要用 ">1" ("<1") 标志折叠的开始 (结束)。当这行折叠级别高于 (低于) 上一行的
级别时,折叠将开始 (结束)。
表达式必须没有副作用。在缓冲区里的文字,光标位置,查找模式,选项等等,不能被改
动。如果你非常小心,改动并恢复这些设置还是可以的。
表达式中有错误或者计算结果不能识别时,Vim 不会产生错误消息,而是将折叠级别设为
0。所以当需要调试时,可将 'debug' 选项设为 "msg",错误消息就可以被见到了。
备注: 由于每一行关于表达式的值都要被计算,这一折叠方式可能会很慢!
最好避免使用 "=" , "a" 和 "s" 作为返回值,因为 Vim 不得不经常向后回溯以得到折
叠级别。这会降低执行速度。
+-*/+-*/foldignore o 当 'foldmethod' 为 ""indent"" 时忽略的行
*'foldignore'* *'fdi'*
'foldignore' 'fdi' 字符串 (缺省: "#")
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
只有 'foldmethod' 为 "indent" 时才用到。以 'foldignore' 里的字符开始的
行会从包围它的行里取得折叠级别。检查字符时,跳过空白。缺省的 "#" 对于
C 程序非常适用。见 |fold-indent|。
+-*/+-*/foldlevel f 检查某行的折叠级别
foldlevel({lnum}) *foldlevel()*
返回数值,当前缓冲区第 {lnum} 行的折叠级别。如果在嵌套的折叠
里,返回最深的那层。如果行 {lnum} 没有折叠,返回零。这和折叠是
打开还是关闭无关。在更新折叠时 (在 'foldexpr' 里),如果折叠还
在更新而相应的折叠级别未知,返回 -1。一个特例是前一行的级别通
常总是知道的。
*foldtext()*
+-*/+-*/foldlevel o 当折叠级别高于此值时关闭折叠
*'foldlevel'* *'fdl'*
'foldlevel' 'fdl' 数值型 (缺省: 0)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
设置折叠级别: 高于此级别的折叠会被关闭。
设置此选项为零关闭所有的折叠。更高的数字关闭更少的折叠。
|zm|、|zM| 和 |zR| 等命令设置此选项。
见 |fold-foldlevel|。
+-*/+-*/foldlevelstart o 开始编辑文件的 'foldlevel'
*'foldlevelstart'* *'fdls'*
'foldlevelstart' 'fdls' 数值型 (缺省: -1)
全局
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
在窗口里开始编辑一个缓冲区时设置 'foldlevel'。用于开始编辑时总是关闭所
有的折叠 (值为零),关闭某些折叠 (1) 或者没有折叠 (99)。
它在读入任何模式行之前进行,因此模式行里的设置可以否决本选项的设定。开
始编辑 |diff-mode| 的文件也忽略本选项,并关闭所有折叠。
它也在 BufReadPre 自动命令之前完成,使得自动命令可以为特定文件重新设定
'foldlevel' 的值。
如果值为负,不使用本选项。
+-*/+-*/foldmarker o 当 'foldmethod' 为 ""marker"" 时的标志
*'foldmarker'* *'fmr'* *E536*
'foldmarker' 'fmr' 字符串 (缺省: "{{{,}}}")
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
'foldmethod' 为 'marker' 时使用的开始和结束标志。必须有一个逗号分隔开
始和结束标志。标志是一个按本义出现的字符串 (正规表达式太慢了)。
见 |fold-marker|。
+-*/+-*/foldmethod o 折叠的类型
*'foldmethod'* *'fdm'*
'foldmethod' 'fdm' 字符串 (缺省: "manual")
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
当前窗口使用的折叠方式。可能的值是:
|fold-manual| manual 手动建立折叠。
|fold-indent| indent 相同缩进距离的行构成折叠。
|fold-expr| expr 'foldexpr' 给出每行的折叠级别。
|fold-marker| marker 标志用于指定折叠。
|fold-syntax| syntax 语法高亮项目指定折叠。
|fold-diff| diff 没有改变的文本构成折叠。
+-*/+-*/foldminlines o 折叠关闭所需的最少行数
*'foldminlines'* *'fml'*
'foldminlines' 'fml' 数值型 (缺省: 1)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
设置会显示为关闭折叠的最少屏幕行数。也适用于手动关闭的折叠。
注意 这只对显示的效果有影响。使用 "zc" 关闭折叠以后,如果该折叠比
'foldminlines' 小,会显示为打开。但接下来的 "zc" 就可能会关闭包含该折
叠的折叠。
+-*/+-*/foldnestmax o 最大折叠深度
*'foldnestmax'* *'fdn'*
'foldnestmax' 'fdn' 数值型 (缺省: 20)
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
设置 "indent" 和 "syntax" 方法的最大折叠嵌套层数。它避免建立过多的折
叠。本值不能超过 20,因为内部的限制就是 20 层。
+-*/+-*/foldopen o 打开折叠所使用的命令
*'foldopen'* *'fdo'*
'foldopen' 'fdo' 字符串 (缺省: "block,hor,mark,percent,quickfix,
search,tag,undo")
全局
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
如果某个命令移动光标到关闭的折叠,本选项指定该命令是什么类型时会打开折
叠。这是一个逗号分隔的项目列表。
项目 命令 ~
all 任何
block "("、"{"、"[["、"[{" 等。
hor 水平移动: "l"、"w"、"fx" 等。
insert 任何插入模式下的命令
jump 远距离跳转: "G"、"gg" 等。
mark 跳转到位置标记: "'m"、CTRL-O 等。
percent "%"
quickfix ":cn"、":crew"、":make" 等。
search 模式搜索: "/"、"n"、"*"、"gd" 等。
(不适用于 ":" 命令里的模式搜索)
也用于 |[s| 和 |]s|。
tag 跳转到标签: ":ta"、CTRL-T 等。
undo 撤销或重做: "u" 和 CTRL-R
如果命令是映射的一部分,不使用本选项。要达到相同的效果,在映射里加入
|zv| 命令。
如果移动命令用作操作符 (比如,"dl" 或 "y%"),不使用本选项。这意味着操
作符会包含整个关闭的折叠。
注意 这里不包括垂直移动命令,否则移过关闭的折叠会非常困难。
插入模式下,插入文本时总会打开光标所在的折叠。
要关闭折叠,你可以用 |zx| 命令重新应用 'foldlevel',或者把 'foldclose'
选项设为 "all"。
+-*/+-*/foldopen c 打开折叠
*:foldo* *:foldopen*
:{range}foldo[pen][!]
在 {range} 内打开折叠。当加上 [!] 时,所有的折叠都被打开。对查
看在 {range} 内的所有文本很有用。没有 [!] 时,打开一级折叠。
+-*/+-*/foldtext f 产生折叠关闭时所显示的行
foldtext() 返回关闭的折叠所显示的行。这是 'foldtext' 选项使用的缺省函数,
而且也只应该在计算 'foldtext' 时使用。它使用 |v:foldstart|、
|v:foldend| 和 |v:folddashes| 变量。
返回的字符串看起来像: >
+-- 45 lines: abcdef
< 连字符的数目取决于折叠级别。"45" 是折叠的行数。"abcdef" 是折叠
第一个非空白行的文本。开头的空白、"//" 和 "/*" 还有
'foldmarker' 和 'commentstring' 选项的文本都被去除。
{仅当编译时加入 |+folding| 特性才有效}
+-*/+-*/foldtext o 显示关闭的折叠所用的表达式
*'foldtext'* *'fdt'*
'foldtext' 'fdt' 字符串 (缺省: "foldtext()")
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
用来指定替代关闭折叠的显示文本的表达式。见 |fold-foldtext|。
可能在沙盘 |sandbox| 里计算此表达式。见 |sandbox-option|。
计算 'foldtext' 时不允许修改文本或者跳到其它窗口 |textlock|。
+-*/+-*/foldtextresult f 得到关闭折叠显示的文本
foldtextresult({lnum}) *foldtextresult()*
返回行 {lnum} 所在的关闭的折叠显示的文本。在合适的上下文里计算
'foldtext'。
如果 {lnum} 没有关闭的折叠,返回空字符串。
{lnum} 的用法类似于 |getline()|。所以 "." 是当前行,"'m" 是位
置标记 m,等等。
可用于输出折叠文本,例如,到 HTML 格式。
{仅当编译时加入 |+folding| 特性才有效}
*foreground()*
+-*/gui _ gvim
+-*/+-*/antialias o Mac OS X: 用平滑反锯齿的字体
*'antialias'* *'anti'* *'noantialias'* *'noanti'*
'antialias' 'anti' 布尔型 (缺省: 关闭)
全局
{Vi 无此功能}
{仅当编译时加入 Mac OS X 的 GUI 支持才有效}
只有在 Mac OS X v10.2 或以后版本的 Vim 的 GUI 版本上,本选项才有效。如
果打开,Vim 使用平滑 ("反锯齿") 字体。在特定显示上的特定大小的字体,可
能会较易阅读。有时,如果 'guifont' 设为缺省值 (空字符串),置位该选项会
引起问题。
+-*/+-*/balloondelay o 弹出气泡之前的延迟 (以毫秒计)
*'balloondelay'* *'bdlay'*
'balloondelay' 'bdlay' 数值型 (缺省: 600)
全局
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
弹出气泡之前以毫秒计的延迟。见 |balloon-eval|。
+-*/+-*/ballooneval o 打开气泡表达式求值功能
*'ballooneval'* *'beval'* *'noballooneval'* *'nobeval'*
'ballooneval' 'beval' 布尔型 (缺省关闭)
全局
{Vi 无此功能}
{仅当编译时加入 |+balloon_eval| 特性才有效}
打开 |balloon-eval| 功能。
+-*/+-*/balloonexpr o 计算气泡显示内容的表达式
*'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
<