Vim/Vi(以下简称vi)是Linux上一款功能非常强大的文本编辑器,用于编辑配置文件或者写shell脚本效率还是蛮高的。其实vi水挺深的,通常我们只要学习以下它的基本用法就行了,有兴趣的朋友可以去读下《Learning the VI Editor》这本书。虽然说只是学习vi的基本用法,但是一下子接受这么多的命令,三两下就晕了,所以就有必要记录下,下面是我个人学习vi的一些小小总结。
首先我们要知道vi的工作模式以及模式之间的切换,vi有三个工作模式:命令模式、插入模式和编辑模式。用vi打开文件,默认是进入命令模式。在命令模式我们可以执行一些命令,比如插入命令、定位命令、删除命令等。在命令模式执行插入命令后,vi将进入插入模式,在插入模式下,我们输入的任何字符都将作为文本写到文件中,按esc可以退回到命令模式。在命令模式按:(冒号)可以进入编辑模式,在编辑模式我们可以执行一些编辑模式下的命令,通常我们命令模式下要执行编辑模式的命令时,我们直接用“:+命令”;同样地,按esc可以退回到命令模式。掌握了vi的工作模式后,接下来将分类(按命令功能粗糙地分下类)介绍vi的一些基本用法。
1、插入命令
a,在光标后面插入文本;
A,在本行行尾插入文本;
i,在光标前面插入文本;
I,在本行行首插入文本;
o,在光标下一行插入文本;
O,在光标上一行插入文本。
2、定位命令
$,移动至行尾;
0(注意这里是数字0),移动至行首;
H,移动至本屏首行;
M,移动至本屏中间行;
L,移动至本屏最后一行;
gg,移动至文件第一行;
G,移动至文件最后一行;
nG,移动至第n行;
:n移动至第n行。
3、删除命令
x,删除光标所在处字符;
nx,删除光标所在处后n个字符;
dd,删除光标所在行;
ndd,删除n行;
dG,删除光标所在行到文件末尾的内容;
D,删除光标所在处到行尾;
:n1,n2d,删除指定范围的行。
4、复制与剪切命令
yy、Y,复制当前行;
nyy、nY,复制当前行以下的n行;
dd,剪切当前行;
ndd,剪切当前行以下的n行;
p,粘贴到当前行的下面;
P,粘贴到当前行的上面。
5、替换与取消命令
r,取代光标所在处字符;
R,从光标所在处开始替换字符,按esc结束替换;
u,取消上一步操作。
6、保存退出命令
:wq,退出保存;
:wq!,退出并强制保存(当没有文件的写权限时可以强制写入,但是该命令只对root和文件所有者有效);
:q!,强制退出,不保存;
:w,保存,不退出;
:w [文件名],把文件另存到指定的文件中。
7、搜索与替换命令
/string,向前搜索string指定的字符串,由于linux是严格区分大小写的,所以如果要实现忽略大小写搜索,可以执行:set ic命令,如果要取消忽略大小写可以执行:set
noic命令。执行搜索命令后,按n可以跳到该字符下一个出现位置,按N可以跳到上一个出现位置;
:%s/oldString/newString/g,在全文范围内将oldString替换成newString;
:n1,n2s/oldString/newString/g,在n1至n2行将oldString替换成newString;
注:上面的这两种替换不会提醒用户确认,如果需要提醒用户,则可以把上面两个命令最后的g改成c。根据上面的替换命令可以衍生出注释的命令,我们知道在linux配置文件和shell脚本中,注释是用#,而且我们还知道^表示的是行首,所以这里提供两个注释命令:
:n1,n2s/^/#/g,这个可以注释n1到n2行;
:n1,n2s/^#//g,这个可以取消n1到n2行注释。
:ab [string1] [string2],输入string1回车后会替换成string2;
:unab [string1],取消string1字符替换。
8、其他
:r [文件名],将指定文件内容导入到光标处;
:map [快捷键] [触发命令],定义命令快捷键;
:unmap [快捷键],取消快捷键定义;
注::map定义快捷键时输入快捷键的方式,例如要定义的快捷键时ctrl+p,则应该输入ctrl+v+p;同样,如果是ctrl+a,则应该输入ctrl+v+a。
:i [命令],在vi中执行系统命令;
:set nu,设置行号;
:set nonu,取消行号设置。
提醒:上面的编辑模式设置动作(如,设置行号、设置快捷键等),只在本次vi编辑当中有效,如果要使这些设置一直有效,则需要把这些编辑模式的设置命令写入vi的配置文件中去(我用的是Ubuntu系统,我的vi配置文件是宿主目录下的.viminfo文件,这个文件默认是空的,这里需要注意的是,vi的配置文件中注释不是用#而是用“),注意将这些编辑模式设置命令写入配置文件时去掉我们在系统中执行命令时前面加的冒号(:)。