本文以问答的形式对vi编辑器进行认识和常用操作说明,针对使用过程中常见的问题进行解答。适合vi初学者、入门者阅读。
vi是个什么东西
vi编辑器是Visualinterface的简称,是Linux和Unix上最基本的文本编辑器。能对文本进行输出、删除、查找、替换、块操作等多种操作,类似于windows上的notepad(但是vi是终端上的程序,没有图形界面)。它没有菜单,只有命令,且命令繁多(这也是很多初学者觉得很难的地方)。同时也注意的是它并不像Word或WPS那样能对字体、格式、段落等其他属性进行编排。
vim编辑器
上图是centos6.5上的vi(vim)编辑器(直接在终端上输入命令vi即可打开)
2.为什么使用vi
为什么我们要使用vi进行文本编辑,换句话说vi编辑器为什么受大家欢迎。我总结了下,有几个原因:
1)如上面所说:它是unix/linux上面基本的编辑器,安装完系统后就可以直接使用它,不用单独安装;
2)它是非图形界面的编辑器(这哪能说是它的优点呢?),就正是因为它是终端型的编辑器,它才能在unix/linux服务器(没有图形界面的操作系统,或者远程连接到linux/unix)上发挥作用,其它图形界面的编辑器如gedit、kate等此时都是渣渣;
3)vi编辑器本身的强大,全键盘命令操作、有很多快捷键对文本进行操作、支持自定义设置;
4)使用熟练后,你会发现它比其它编辑器gedit等更便捷、高效;
5)因为牛人都用它(扯远老)。
上面我们对vi编辑器有了一个初步的认识,接下来将对如何使用vi编辑器进行提问和解答。下面的问题也是在使用vi编辑器中常常碰到的问题。
3.怎么编辑文件
很多刚刚接触vi的朋友在使用vifile.txt打开文件后,不知道怎么输入或修改内容。这是因为vi编辑器有两种工作模式:Command(命令)模式和Insert(插入)模式),vim还多一种Visual(可视)模式。而我们首次打开文件时,默认的是command模式,因此无法进行编辑内容。
通过下面的输入即可进入insert模式:
i在光标之前插入;
a在光标之后插入;
I在光标所在行的行首插入;
A在光标所在行的行末插入;
o在光标所在的行的上面插入一行;
O在光标所在的行的下面插入一行;
s删除光标后的一个字符,然后进入插入模式;
S删除光标所在的行,然后进入插入模式;
上面的命令大家可以打开一个文本文档分别尝试,体会之间的不同。
4.如何关闭文件
打开文件后,不知道怎么退出vi编辑返回到终端上,这也是初学者经常遇到的一个问题。退出文件vi编辑需要在命令模式中输入命令才可进行相应的保存、退出相关操作。
按Esc键进入命令模式,然后输入下面的命令可以达到不同的效果。
:w保存;
:wfilename另存为filename;
:wq!保存退出;
:wq!filename注:以filename为文件名保存后退出;
:q!不保存退出;
:x保存并退出,功能和:wq!相同
ZZ保存并退出
上面的w表示write,q表示quit。!表示强制的意思,比如:wq!表示强制保存退出。
5.不同模式的区别和切换
通过上面的学习,我们知道vi有三种模式,它们分别是:
Command(命令)模式,用于输入命令(默认是该模式,键入Esc也可进入该模式);
Insert(插入)模式,用于插入编辑文本(参考标题3.怎么编辑文件);
Visual(可视)模式,用于视化的的高亮并选定正文(这个是vim独有的模式,在命令模式下,输入v即可进入该模式);
6.方便的光标控制
我们常用方向键来上下左右移动光标,要是你知道了下面的方法来控制光标,这是一件多么快乐的事情。
首先习惯性的按一下Esc进入命令模式
j向下移动一行;
k向上移动一行;
h向左移动一个字符;
l向右移动一个字符;
(backspace也可以向前移动一个字符)
上面的几个命令,大家觉得不能体现出什么优势就和方向键的功能一样,其实当你使用习惯时,会发现在输入文本时,右手不用怎么移动(不需要移动到遥远的方向键的位置)就可以移动光标了。下面的技巧,你会更喜欢..
在h、j、k、l动作命令的前面加上数字可以叠加操作,比如3j,表示向下移动3行。
7.强大的删除操作
在插入模式中,可以使用backspace来删除字符。但是这样删除很慢。习惯性的按Esc进入命令模式,然后通过命令(h、j、k、l)迅速的移动到你需要操作的地方,使用下面的命令进行删除内容:
x一个字符;
#x删除几个字符,#表示数字,比如3x;
dw删除一个单词;
#dw删除几个单词,#用数字表示,比如3dw表示删除三个单词;
dd删除一行;
#dd删除多个行,#代表数字,比如3dd表示删除光标行及光标的下两行;
d$删除光标到行尾的内容;
J清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起;
8.怎么撤销修改
往往在对文本编辑时,总有犯错的时候,这时我们如果使用ctrl+z是不能撤销操作的,正确的方法是:按Esc键(进入命令模式),再按u键即可撤销一次,多按几次u就多撤销几次。
记住是在命令模式下输入小写u哦...
9.复制和粘贴
说到复制、粘贴,我们也会想到剪贴,上面“7.强大的删除操作”中说的删除操作其实就是剪贴的功能。比如dd(删除一行)后当前行被删除并放入了vi的剪贴区中,然后移动光标到相应的地方,输入p即可把刚删除的内容粘贴到光标处。
p在光标之后粘贴;
shiftp在光标之前粘贴;
下面举个例,
比如我们想把一个文档的第3行复制下来,然后帖到第5行的后面,我们应该怎么做呢?、
有如下两种方法:
第一种方法,
先把第3行删除,把光标移动到第3行处,然后用dd动作,接着再按一下shiftp键。这样就把刚才删除的第3行帖在原处了(复制);
接着我们再用k键移动光标到第5行,然后再按一下p键,这样就把第3行的内容又帖到第5行的后面了(粘贴)。
第二种方法:
进入命令模式移动光标到第3行,在进入可视模式(按Esc键,然后按v键),移动光标选中第3行的内容,然后按y键复制;再移动指针到第5行,最后按p键;
所以复制和粘贴操作,是命令模式、插入模式及可视模式的综合运用,我们要学会各种模式之间的切换,要常用Esc键,更为重要的学会在命令模式下移动光标。
10.怎么显示行号
很多编辑器都有显示行号的功能,当然vi也有这个功能。
在命令模式下输入:
:setnumber
即可显示行号
11.ctrl+f不能进行查找
说到查找我们习惯性的想到ctrl+f,在vi中是不行的。习惯性的按Esc键进入到命令模式,然后下车的输入。
/pattern<Enter>:向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
/abc<Enter>#查找abc
/abc<Enter>#查找abc单词(注意前后的空格)
除此之外,pattern还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。
/^abc<Enter>#查找以abc开始的行
/test$<Enter>#查找以abc结束的行
//^test<Enter>#查找^tabc字符串
12.替换功能
在一般的可视化文本编辑器中,ctrl+h即可进行文本替换操作。而在vi中,需要使用命令来操作。首先进入命令模式,然后下面的输入。
:s/str1/str2/#用字符串str2替换行中首次出现的字符串str1
:s/str1/str2/g#用字符串str2替换行中所有出现的字符串str1
:.,$s/str1/str2/g#用字符串str2替换正文当前行到末尾所有出现的字符串str1
:1,$s/str1/str2/g#用字符串str2替换正文中所有出现的字符串str1
:g/str1/s//str2/g#功能同上
例如:
:s/vivian/sky/#替换当前行第一个vivian为sky
:s/vivian/sky/g#替换当前行所有vivian为sky
:n,$s/vivian/sky/#替换第n行开始到最后一行中每一行的第一个vivian为sky
:n,$s/vivian/sky/g#替换第n行开始到最后一行中每一行所有vivian为sky(n为数字,若n为.,表示从当前行开始到最后一行)
:%s/vivian/sky/#(等同于:g/vivian/s//sky/)替换每一行的第一个vivian为sky
:%s/vivian/sky/g#(等同于:g/vivian/s//sky/g)替换每一行中所有vivian为sky
从上面的例子,我们不难发现::s表示替换的命令,在:s中间可以增加参数n,m表示第n行到第m行,n和m还可以是字符,.表示当前行,$表示最后一行。%可以理解为1,$(第一行到最后一行)。g表示全局的意思(类似js中的正则表达式)。
同时,上面的例子中使用了/作为分隔符(默认的),我们也可以使用#或+作为分隔符,此时中间出现的/不会作为分隔符。
:s#vivian/#sky/#替换当前行第一个vivian/为sky/
其它功能
vi编辑器还有其它的功能和命令,比如vi中的标记、正则表达式、多个文件的编辑等,请各位读者参考其它文档。
结束语
相信通过上面的阅读,加上大家的实际操作,使用vi已经不是一件难事。Vi只是一个工具,没有想象的那么难,任何工具都是越用越简单,越用越快乐!