增强的vi文本编辑器
vim [-bCdDeELmMnNrRTvxXZ] [--] [files]
vim [-h|--help] [--version]
vi
ex
view
vim是一个文本编辑器,完全兼容传统的vi编辑器。可用于编辑任何类型的文本文件,尤其是编辑程序。
其中,files是欲编辑或创建的一个或多个文件名,其中第一个文件将成为当前文件,并立即读入缓冲区。进入vim编辑器之后,光标将定位在缓冲区第一行的第一个字符位置。在编辑过程中,可以使用“:next”或缩写的“:n”命令编辑下一个文件(以命令行文件参数的顺序为准)。如果未指定文件名参数,直接进入vim编辑器,从一个空文件(缓冲区)开始编辑。如果指定的文件名为“-”,则编辑的文件来自标准输入,编辑命令来自标准错误输出(重定向到一个tty设备)。
在vi的基础上,vim提供大量的增强功能,如多级撤销功能、多窗口与缓冲区、语法高亮显示、命令行编辑、文件名补缺、联机帮助、可视化选择等。在vim中,利用“:help syntax.txt”等类似的命令,可以查阅所有的vim文档;利用“:help vi_diff.txt”,可以查阅vim与vi差别的汇总与说明。
在运行vim期间,输入“:help”命令可以从联机帮助系统中获取大量的帮助信息。输入“:help subject”命令可以获取特定主题的说明信息。例如,输入“:help ZZ”可以获得ZZ命令的说明信息。此外,使用制表键可以补齐不完整的主题。例如,输入“:help vi_”命令后按下制表键即可自动补缺,“:help vi_diff.txt”。
利用/usr/share/vim/vimrc文件,可以定义系统范围的初始化设置,定制vim编辑器。利用“~/.vimrc”文件,可以定制每个用户自己的初始化设置。
vim分为命令和输入两种工作模式。任何时刻,vim编辑器总是处于命令和输入两种工作模式之一。当启动vim编辑器、打开或创建一个文件时,vim即处于命令模式。通过发布vim命令,可使vim处于输入模式。在输入模式下,可以输入数据,编写文档或源程序。在命令模式下,可以输入vim命令,执行特定的vim编辑功能。命令模式是vim的默认工作模式。通过使用vim命令和Esc键,可以在两种工作模式之间相互转换。
第一次使用vim打开文件时,vim总是处于命令模式。在能够输入任何文本之前,首先必须输入vim的数据输入命令。例如,输入“i”字符命令,即可在当前光标所处字符位置之前插入数据。输入“a”字符命令,即可在当前光标所处字符位置之后附加数据。
无论何时需要返回命令模式,只需按下Esc键即可。如果不能确定vim当前处于何种工作模式,只要按下Esc键,即可确保vim总是处于命令模式,然后再决定下一步怎么做。如果在vim处于命令模式时按下Esc键,或按下其他不合法的键时,终端会发出鸣叫或发生屏幕闪烁现象,但不会影响正在编辑的文件。
在输入数据的过程中,可以利用退格键进行简单的校正(在按下Enter键之前)。在整个输入过程结束之后,按下Esc键,即可返回命令模式。此时,光标将处于刚才输入的最后一个字符位置。然后,还可以利用各种vim命令校正输入的数据。
在命令模式下,可以输入各种vim命令,以便完成各种编辑功能。vim命令几乎都是由一个字符、两个字符或一个选用的数字加字符组成的。通常,字母相同但大小写不同的字符命令的意义相同,但作用完全不同。例如,字符命令“a”意味着在当前光标位置之后附加数据,而“A”则意味着在当前光标所在行的行尾附加数据。
大多数vim命令不需要按Enter键即可立即执行。但是,以冒号“:”引入的命令需要在输入命令之后再按Enter键。在命令模式下输入冒号时,冒号将会出现在编辑窗口底部最后一行的左下角,然后即可接着输入编辑命令,如检索字符串、替换字符串等。
以冒号开始的命令实际上是ex命令,ex与vim命令是同一编辑程序的两个不同的用户界面,vim提供面向屏幕的用户界面,而ex则提供面向命令行的用户界面。所有的ex命令均可在vim中使用。在输入冒号之后,实际上已经切换到面向命令行的ex用户界面。这种切换方式使用户能够在不离开vim的情况下执行许多文件编辑命令,甚至也可以执行其他Shell命令。
vim、ex、view和vi等是同一系列的程序文件,根据运行命令时使用的名字,vim程序文件具有不同的功能。
vim 常规的运行方式,所有的处理均采用默认设置。
ex 以ex模式运行vim(使用“-e”选项运行vim也可以进入ex模式)。此时,输入“:vi”命令后即可进入常规的vim模式。
view 以只读模式运行vim(等同于使用“-R”选项运行vim)。
+[num] 将光标定位在当前文件的指定行num的第一个非空白字符位置。如果省略了num,光标将定位在文件最后一行的第一个字符位置。
+/pat 将光标定位在当前文件第一个匹配指定模式pat的行首位置。
-c cmd, +cmd 指定的命令是ex命令,在读入第一个文件之后开始执行。如果命令包含空格,前后需加双引号。例如,“vim "+set nu" main.c”。注意,最多可以利用“+”或“-c”选项提供10个命令。
--cmd cmd 类似于“-c”选项,但指定的命令必须在处理任何vimrc文件之前执行。注意,最多可以利用“-cmd”选项提供10个命令。
-b 二进制模式。设置部分选项,使得vim能够编辑二进制或可执行的目标文件。
-C 兼容模式。这将使vim更像vi,即使.vimrc文件存在。
-d 启动文件比较模式。指定的文件至少应为2、3或4个文件。vim将会打开指定的所有文件,展示文件之间的差别。其功能类似于直接运行vimdiff命令。
-D 调试模式。执行脚本中的第一个命令之后立即进入调试模式。
-e 启动vim,进入ex运行模式,类似于直接运行ex命令。
-E 启动vim,进入增强的ex运行模式。
-i viminfo 使用指定的文件替代默认的“~/.viminfo”文件。使用关键字NONE作为文件名,可以跳过读写“~/.viminfo”文件的步骤。
-m 禁止修改文件。清除“write”选项,从而禁止写文件。实际上,用户仍然能够编辑缓冲区中的文件内容,但不能写文件(而且也不能写到其他指定的文件中)。注意,可以使用ex命令“:set write”启用上述选项。
-M 类似于“-m”选项,禁止修改文件,清除“write”选项与“modifiable”选项,因而不能写文件,也不能编辑缓冲区中的文件内容。注意,可以使用ex命令“:set write”和“:set modifiable”分别启用上述两个选项。
-n 禁止使用“.swp”文件。即禁止恢复先前中断编辑的文件。
-N 采用非兼容的增强模式。清除“compatible”选项。这将使得vim的功能更强,但与vi的兼容性较差,即使“.vimrc”文件不存在。
-o [n] 打开n个横向的窗口。如果省略了n,针对每个文件名参数打开一个窗口。
-O [n] 打开n个纵向的窗口。如果省略了n,针对每个文件名参数打开一个窗口。
-p [n] 打开n个标签标识的页面。如果省略了n,针对每个文件名参数,打开一个标签页面。
-r, -L 显示编辑过程因故中断,缓冲区中尚未保存的文件内容(.swp文件)。用户可以根据显示的文件信息,使用“-r file”选项恢复系统保存的文件。
-r file 恢复模式。利用系统保存的“.swp”文件,可以恢复先前因故中断编辑的文件。“.swp”文件与先前中断编辑的文件名字相同,只是增加了一个“.swp”后缀。参见“:help recovery”命令。
-R 只读模式。设置“readonly”选项。此时只能编辑缓冲区中的文件内容,但不能写文件,以防覆盖文件。如果确实需要写文件,可以使用加感叹号的ex命令,如“:w!”。“-R”选项蕴含着同时指定了“-n”选项。此外,使用“:set noro”命令也可以清除“readonly”选项。参见“:help readonly”命令的说明。
-s script 读取指定的脚本文件script。文件中的字符按交互方式用户输入的字符解释。利用“-w”或“-W”选项保存的脚本可以编辑相同的文件。如果在退出vim之前已经读到脚本文件中的结尾,再从键盘开始读取命令、输入数据或编辑文件。注意,也可以在编辑文件期间使用“:source! script”命令执行脚本文件。
-T terminal 指定当前使用的终端名。仅当TERM环境变量定义的终端无法正常工作时才需要用到这个选项。指定的终端名必须是合法的termcap或terminfo定义的终端名。
-u vimrc 使用指定文件vimrc中的命令初始化vim,跳过其他任何初始化步骤。使用这个选项可以编辑特殊类型的文件。此外,使用关键字NONE作为文件名,也可以跳过所有的初始化步骤。使用“:help initialization”命令可以获取更详细的说明信息。
-V [n] 详细显示模式。显示vim的启动过程,读取的初始化文件,读写的viminfo文件,以及加载的插件等。选用的数字参数n是显示的详细程度,默认值是10。
-v 启动vim,进入vi运行模式,类似于直接运行vi命令。仅当运行ex命令时选用这个选项才有作用。
-w script 在编辑期间,输入的所有字符(包括命令与输入数据)将会记录在指定的文件script中,直至退出vim编辑器。如果想要创建一个脚本文件,以便在“vim -s”或“:source!”命令的情况下使用,这个选项是非常有用的。如果文件script存在,记录的内容将会追加到文件后面。
-W script 类似于“-w”选项,但会覆盖现有的文件script(如果文件已存在)。
-x 以加密形式保存写到文件中的数据。编辑和读取加密文件时需要提供密码。
-Z 限制的模式。类似于直接运行rvim或rvi命令。
-- 标志选项的结束。之后的参数均作为文件名处理。主要用于编辑文件名首字符为连字符“-”的文件。
--noplugin 跳过加载插件的步骤。相当于指定了“-u NONE”选项。
-h, --help 显示命令的用法与选项说明等帮助信息,然后退出。
--version 显示命令的版本等帮助信息,然后退出。
在下述编辑命令的说明中,CR表示回车键。ESC用于结束输入模式,返回命令模式(如itextESC)。也可用于取消不完整的命令。作为一个前缀,大部分编辑命令在输入前均可输入一个数字,表示重复的次数,如字符数(如x命令等)、行数(如dd命令等)或滚动窗口数量(如Ctrl-D或Ctrl-U命令等)等。
文件操作
ZZ 如果文件已经修改,写入文件后退出,否则仅仅退出编辑器。
ZZ 退出编辑器,保存先前的修改与处理结果。
:wCR 把编辑缓冲区中的修改内容写入当前文件。
:w!CR 如果先前的访问权限不允许(如只读文件),强行写入当前的文件。
:qCR 退出编辑器。
:q!CR 强行退出编辑器,放弃先前所做的任何修改。
:e nameCR 编辑指定的文件。
:e!CR 重新编辑,放弃先前所做的任何修改。
:e + nameCR 从指定文件的结尾(最后一屏)开始编辑。
:e +nCR 从指定的行开始编辑当前文件。
:e #CR 在当前编辑的两个文件间来回切换。
:e! #CR 在当前编辑的两个文件间来回切换,并放弃先前所做的任何修改。
:w nameCR 把编辑器当前缓冲区中的内容写入指定的文件。
:w! nameCR 把编辑器当前缓冲区中的内容强制写入指定的文件。
:shCR 进入当前的Shell,直至退出后返回编辑器。
:!cmdCR 在Shell中运行指定的命令,然后返回编辑器。
:nCR 编辑命令行文件参数表中的下一个文件。
:n argsCR 指定新的命令行文件参数表。
^G 显示当前文件的名字与行号。
文件定位
^F, Pg Dn 向前(文件结尾方向)滚动一屏。
^B, Pg Up 向后(文件开始方向)滚动一屏。
^D 向前滚动半屏。
^U 向后滚动半屏。
[n]G 跳至指定行号的数据行行首(省略行号n时直接跳至文件结尾)。
/pat 检索并跳至下一个匹配指定模式的数据行。
?pat 检索并跳至前一个匹配指定模式的数据行。
n 重复执行最近一个“/”或“?”检索命令。
N 反向重复执行最近一个“/”或“?”检索命令。
/pat/+n 转入匹配指定模式的数据行之后的第n行。
?pat?-n 转入匹配指定模式的数据行之前的第n行。
]] 将光标移至下一节或下一个函数。
[[ 将光标移至上一节或上一个函数。
( 将光标移至前一个句子的起始字符位置。
) 将光标移至下一个句子的起始字符位置。
{ 将光标移至当前段落之前。
} 将光标移至当前段落之后。
% 将光标定位至匹配的圆括号、方括号或花括号。
屏幕调整
^L 清除并刷新终端窗口。
^R 清除并刷新终端窗口(如果Ctrl-L是右箭头键“→”)。
zCR 以当前数据行作为第一行,刷新终端窗口。
z- 以当前数据行作为最后一行,刷新终端窗口。
z. 以当前数据行作为中间一行,刷新终端窗口。
/pat/z-CR 把匹配指定模式的文本行作为最后一行,滚动终端窗口。
^E 终端窗口内容前滚一行。
^Y 终端窗口内容后滚一行。
标记与返回
`` 把光标移至先前的上下文环境。
'' 两个单引号。把光标移至先前上下文环境中当前行的第一个非空白字符位置。
mx 使用小写字母标记当前的光标位置。
`x 把光标移至使用x标记的位置。
'x 把光标移至x标记位置的当前行的第一个非空白字符位置。
行定位
H 光标跳至终端窗口第一行行首的第一个非空白字符位置。
L 光标跳至终端窗口最后一行行首的第一个非空白字符位置。
M 光标跳至终端窗口中间一行行首的第一个非空白字符位置。
+, CR 光标移至下一行行首的第一个非空白字符位置。
- 光标移至上一行行首的第一个非空白字符位置。
↓, j 光标移至下一行的同一字符位置。
↑, k 光标移至上一行的同一字符位置。
字符定位
^ 光标跳至同一行行首的第一个非空白字符位置。
0 光标跳至同一行的行首。
$ 光标跳至同一行的行尾。
←, l 光标左移一个字符位置。
→, h 光标右移一个字符位置。
^H 光标左移一个字符位置(命令模式)。
空格 光标右移一个字符位置(命令模式)。
fx 光标移至下一个字符x。
Fx 光标移至前一个字符x。
tx 光标移至下一个字符x 之前的位置。
Tx 光标移至前一个字符x 之后的位置。
; 重复执行最近一个f、F、t或T命令。
, 反向重复执行最近一个f、F、t或T命令。
n | 把光标移至第n列。
% 将光标定位至匹配的圆括号、方括号或花括号。
字、句与段落
[n]w 把光标移至下一个或后数第n个字(由字母、数字和下画线组成的字符串)的字首。
[n]W 把光标移至下一个或后数第n个由空格分隔的字的字首。
[n]b 把光标移至前一个或前数第n个字(由字母、数字和下画线组成的字符串)的字首。
[n]B 把光标移至当前、前一个或后数第n个由空格分隔的字的字首。
[n]e 把光标移至当前、下一个或后数第n个字(由字母、数字和下画线组成的字符串)的字尾。
[n]E 把光标移至当前、下一个或后数第n个由空格分隔的字的字尾。
) 把光标移至下一个句子的句首。
( 把光标移至前一个句子的句首。
} 把光标移至当前段落之后(下一个段落之前)。
{ 把光标移至当前段落之前(上一个段落之后)。
插入期间校正
^H, 退格符 删除光标位置的前一个字符。
^W 删除光标位置的前一个字。
ESC 结束数据输入模式,返回命令模式。
DEL 删除光标位置的字符。
^V 引入不可打印的字符,包括控制字符。
输入数据
a 在光标位置之后附加输入数据,直至按下Esc键。
A 在行尾附加输入数据,直至按下Esc键。
i 在光标位置之前插入输入数据,直至按下Esc键。
I 在行首或数据行第一个非空白字符之前插入输入数据,直至按下Esc键。
o 从光标位置下一行开始插入数据行,直至按下Esc键。
O 从光标位置前一行开始插入数据行,直至按下Esc键。
rx 使用字符x替换光标位置的字符。
RtextESC 使用输入的数据text替换从光标位置开始的字符。
!CRcmdCR 执行Shell命令,把命令的输出插入光标位置。
修改、删除与替换
cc 替换当前数据行,直至按下Esc键。
cl 替换光标位置的字符,直至按下Esc键。
cw 替换从光标位置开始的字,直至按下Esc键。
c$ 修改当前行光标位置之后的剩余数据部分。
C 修改当前行光标位置之后的剩余数据部分(相当于“c$”命令)。
[n]dw 删除从光标位置开始的1个或n个字,包括随后的空白字符,直至下一个字首止。
D 删除当前行光标位置之后的剩余数据部分(相当于“d$”命令)。
rx 使用指定的单个字符替换光标位置的字符。
RtextESC 使用输入的数据text覆盖从光标位置开始的任何内容,直至按下Esc键。
s 替换光标位置的字符,直至按下Esc键(相当于“cl”命令)。
S 替换当前数据行,直至按下Esc键(相当于“cc”命令)。
J 把后续行合并到当前行。
:[#] r file 把指定的文件读入当前行或指定的行之后。
[n]x 删除光标位置的一个字符或光标位置开始的n个字符。
[n]X 删除光标位置之前的一个或n个字符。
~ 把光标位置的字母替换为相应的大写字母或小写字母。
剪切、复制与粘贴
[n]dd 删除当前行或从当前行开始的n行数据(暂存于缓冲区)。
[n]yy 把当前行或从当前行开始的n行数据复制到缓冲区。
[n]Y 同上。
[n]yl 把光标位置的字符或从光标位置开始的n个字符复制到缓冲区。
p 把先前删除或复制到缓冲区的数据行附加到当前行之后。
P 把先前删除或复制到缓冲区的数据行附加到当前行之前。
撤销、恢复与重复执行
u 撤销最近一次的修改。连续输入多个u命令,可以回溯,逐步撤销先前的修改。
U 恢复当前数据行的原貌。
. 重复执行最近一次的修改命令。
"np 取回最近第n次删除的数据,插入当前行之后。
位置调整命令
<CR, << 当前数据行整体左移一个制表符位置。
>CR, >> 当前数据行整体右移一个制表符位置。
部分ex命令
:#1, #2 co #3 把第#1行~第#2行数据复制到第#3行之后。
:#1, #2 m #3 把第#1行~第#2行数据移至第#3行之后。
:#1, #2 d 删除第#1行至第#2行的所有数据行。
:#1, #2 s/old/new/[g][c] 检索第#1行~第#2行之间数据,使用字符串new替换所有的old。
:/old/s//new/[g][c] 从当前行开始检索,使用字符串new替换第一个出现或所有的old。
:set 显示已修改的选项。
:set opt 启用指定的选项。
:set noopt 禁用指定的选项。
:set all 显示vim支持的所有选项及其设置。
:set opt=val 把指定的值赋予指定的选项。
索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z