vi编辑器对老手而言,最大的优点之一就是有很多选项可以使用,而对于新手而言,这也是它的一大难点。本章介绍基本的vi文本编辑命令。这一篇文章主要介绍如何移动光标,以及如何增加和更改文本。
之前讲过,vi编辑器有两种模式,命令模式和插入模式。在命令模式中,所输入的一切都会被vi编辑器当做是输入的命令,而在插入模式中,所输入的一切都被当做相应的文本更新到文件缓冲区中。当打开vi编辑器时,默认是命令模式,有很多方式可以从命令模式转化为插入模式,例如输入 "i" 。如果要从插入模式转化为命令模式,只需按"ESC"键即可。因此如果你不知道当前处于vi的哪种模式,可以先按下ESC键回到命令模式。
移动光标:当需要编辑文本时,首先需要做的可能就是将光标移动到需要编辑的地方。移动光标时首先需要确认你处于vi的命令模式中,移动光标有如下命令:
单一的移动:
h: 向左移动一个字符;
j: 向下移动一行;
k: 向上移动一行;
l: 向右移动一个字符;
虽然可以通过上下左右四个按键或者通过"BACKSPACE"和"ENTER"键来实现移动,但是这四个命令更为常用,因为它可以使我们的手指不离开键盘中心就能完成光标的移动。当往某个方向移动到极限时,就无法继续移动了。可以在这些移动命令前面加上数字,达到命令重复的功能。例如输入"4l"就相当于按下了4次l命令,即能直接将光标向右移动四个字符。这种命令重复功能可以给我们更多选择,并增强命令的功能,应该牢记。
在一行中快速移动的命令有两个:
0: 移动到行的开头;
$: 移动到行的尾部;
注意在vi编辑器中,屏幕上可见的一行并不一定就是真正的一行,vi编辑器是以换行符作为行的结尾,因此可能在屏幕上显示为多行,但实际上就是一行,如下图所示,虽然屏幕上看上去占用三行,但实际就是一行:
可以按照文本块来移动,文本块可以是单词,句子或段落。
w: 将光标移动到下一个单词,其中符号和标点也被认为是一个单词;
W: 将光标移动到下一个单词,其中标点和符号不被当成一个单词;
b: 将光标倒退一个单词,其中标点和符号被当成一个单词;
B: 将光标倒退一个单词,其中标点和符号不被当成一个单词。
当然这些单词移动的命令也可以加上数值参数,这样就能同时移动多个单词,例如2w,5b等。
可以使用" G "命令直接移动到某个特定的行。直接输入" G "命令,是移动到文件的尾部,1G是移动到文件的第一行,即文件顶端,而10G就能直接移动到文件的第十行。
编辑文本:
插入新文本:使用“ i ”命令进行文本的插入,i命令使vi编辑器从命令模式转化为插入模式,之后输入的一切都会被当成输入的文本更新到缓冲区中。" i "命令的细节值得说一下:输入" i "命令时,光标不移动,在光标之前的位置开始插入文本。
添加文本:添加文本使用" a "命令。a命令和i命令基本类似,只不过在输入" a "命令时,光标会向后移动一个字符,因此是在原先光标之后输入文本,因此就被称为"添加"文本。
更改文本:如果需要更改文本,则需要使用" c "命令。更改命令可以认为是先删除需要被替换的文本,然后等待你输入新的文本,输入的文本的长度没有要求。使用从c命令时,为了告诉c命令有多少文本需要更改,可以把c命令与光标移动命令一起使用:
cw: 从光标所在位置到该单词的结尾;
c$: 从光标所在位置到该行结尾,也可以直接使用C命令;
c0: 从光标所在位置到该行开头;
c2b: 从光标位置往回两个单词,等等类似用法;
如果需要修改一整行,可以直接输入cc命令。无论此时光标在该行的何处,cc命令将直接将一整行文本替换成输入的新文本。cc命令和上面提到的C命令都是其他命令的简写形式。
其实不止c命令,其它如删除( d )命令,拖曳( y )命令等等命令,都有如下的一般形式: ( command ) ( text object )形式。这里的command 就是我们的c,d,y等命令,而text object则是光标移动命令,指明command影响的文本范围。因为光标移动命令可以使用数值参数,因此可以这样使用 "d2w", 而"2dw"也是完全一样的效果。
" r "命令可以把一个字符替换为另一个字符。而且替换之后直接是命令行模式,不需要按下ESC键从输入模式回到命令模式。
相对于" r "命令,R命令也可以进行字符的替换,但是" r "键一次只能替换一个字符,而按下R键后,则会进入覆盖模式。即你输入的字符将逐一覆盖原有的字符,直到按下ESC键。但是R命令最多只能覆盖一整行。
" s "命令:也是用于字符的替换,它可以指定数值参数,代表替换多少个字符。如果只使用" s "命令,则代表替换当前光标所在的字符。" s "命令首先删除需要被替换的字符,然后等待插入新的字符,插入完毕后需要手动按下ESC键重新回到命令模式。
S命令:S命令直接替换一整行文本,不管当前光标在该行的哪个位置,都直接先将该行删除。因此S命令等同于cc命令,但和C命令有区别。
更改大小写: 通过" ~ "命令完成对当前字符的大小写转换,即当前如果是大写,则转化为小写,如果当前是小写,则转化为大写。更改之后光标自动移到下一个字符。
本章vi编辑器命令总结:
h,j,k,l,w,b,G,i,a,c,cc,C,r,R,s,S,~。