2408 2018-11-10 2020-06-25

一、为何要学vim

Linux下文本编辑器那么多,为什么要学这不是很友善的vi呢?其实是有原因的,如下

  • 所有的UNIX like系统都会内置vi文本编辑器,其他的文本编辑器不一定会存在
  • 很多软件的编辑接口都会主动调用vi(例如后来会谈到的crontab,visudo,edquota等命令)
  • vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计
  • 程序简单,编辑速度相当快速

其实重点是上述的第二点,因为太多的Linux上面的命令都默认使用vi作为数据编辑的接口,所以你必须要学会vi,否则很多命令你根本无法操作。这样说,有刺激到你务必学会vi的热情了吗?

那么什么是vim呢?其实你可以将vim视为vi的高级版本,vim可以用颜色或底线等方式来显示一些特殊的信息。举例来说,当你使用vim去编辑一个C程序语言的文件,或者是我们后续会谈到的shell script程序时,vim会依据文件的扩展名或者是文件内的开头信息判断该文件的内容,而自动调用该程序的语法判断式,再以颜色来显示程序代码与一般信息。也就是说,这个vim是个“程序编辑器”。甚至一些Linux基础配置文件内的语法,都能够用vim来检查。

简单来说,vi是老式的文字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具,就连vim的官方网站(http://www.vim.org)自己也说,vim是一个“程序开发工具”而不是文件处理软件。因为vim里面加入了很多额外的功能,例如支持正则表达式的查找架构、多文件编辑、块复制等。这对于我们在Linux上面进行一些配置文件的修订工作时是很棒的一项功能。

二、vi的使用

基本上vi共分为3种模式,分别是一般模式、编辑模式与命令行模式。这3种模式的作用分别如下。

1、一般模式

以vi打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用上下左右案件来移动光标,你可以删除字符或删除整行,也可以复制、粘贴你的文件数据。

2、编辑模式

在一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件内容的。要等到你按下“i,I,o,O,a,A,r,R”等任何一个字母之后才会进入编辑模式。通常在Linux中,按下这些按键时,在界面的左下方会出现INSERT或REPLACE的字样,此时才可以进行编辑。而如果要回到一般模式时,则必须要按下『Esc』这个按键即可退出编辑模式。

3、命令行模式

在一般模式当中,输入“:、/、?”3个中的任何一个按钮,就可以将光标移动到最下面那一行。在这个模式当中,可以提供你查找数据的操作,而读取、保存、大量替换字符、离开vi、显示行号等的操作则是在此模式中完成的。

注意:一般模式与编辑模式及命令行模式可互相切换,但编辑模式与命令行模式之间不可互相切换

三、按键说明

1、一般模式下的按键

1、移动光标

按键说明
h或向左箭头键(<-)光标向左移动一个字符
j或向下箭头键光标向下移动一个字符
k或向上箭头键光标向上移动一个字符
l或向右箭头键光标向右移动一个字符
多次移动(如向左移动30行)30h或3<-
ctrl + f屏幕向下移动一页,=PageDown按键(常用)
ctrl + b= PageUp按键(常用)
ctrl + d屏幕向下移动半页
ctrl + u屏幕向上移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
n『space』那个n表示”数字”,例如20。按下数字后再按空格键,光标会向右移动这一行的n个字符。
0或『Home』这是数字0:移动到这一行的最前面字符处(常用)
¥或『End』移动到这一行的最后面字符处(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个文件的最后一行(常用)
nGn为数字。移动到这个文件的第n行
gg移动到这个文件的第一行,相当于1G(常用)
n『Enter』n为数字。光标向下移动n行(常用)

2、查找与替换

按键说明
/word向下寻找一个名称为word的字符串(常用)
?word向上寻找一个字符串名称为word的字符串
n这个n是英文按键。代表重复前一个查找的操作
N这个N是英文按键。与n刚好相反,为”反向”进行前一个查找操作
:n1,n2s/word1/word2/gn1与n2为数字。在第n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2(常用)
:1,$s/word1/word2/g从第一行到最后一行查找word1字符串,并将该字符串替换为word2(常用)
:1,$s/word1/word2/gc从第一行到最后一行查找word1字符串,并将该字符串替换为word2,且在替换前显示提示字符给用户确认(confirm)是否需要替换(常用)

3、删除、复制和粘贴

按键说明
x,X在一行字当中,x为向后删除一个字符(相当于『Del』按键),X为向前删除一个字符(相当于『Backpace』)(常用)
nxn为数字,连续向后删除n个字符。举例来说,我要连续删除10个字符,”10x”
dd删除光标所在的那一整行(常用)
nddn为数字,删除光标所在的向下n行,例如20dd则是删除20行(常用)
d1G删除光标所在行到第一行的所有数据
dG删除从光标所在行到最后一行的所有数据
d$删除从光标所在处到该行的最后一个字符
d0那个数字是0,删除从光标所在处到该行的最前面一个字符
yy复制光标所在的那一行(常用)
nyyn为数字,复制光标所在的向下n行(常用)
y1G复制光标所在行到第一行的所有数据
yG复制光标所在行到最后一行的所有数据
y0复制光标所在行到
p,Pp为将已复制的数据在光标下一行粘贴,P则为粘贴在光标上一行(常用)
J将光标所在行与下一行的数据结合成同一行
c重复删除多个数据,例如向下删除10行,”10cj”
u复原前一个操作(常用)
ctrl + r重做上一个操作(常用)
.小数点,重复前一个操作(常用)

2、切换到编辑模式

按键说明
i,I进入插入模式(Insert mode):i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处开始插入(常用)
a,A进入插入模式:a为从目前所在的下一个字符开始插入,A为从光标所在行的最后一个字符处开始插入(常用)
o,O进入插入模式:o为在目前光标所在的下一行插入新的一行,O为在目前光标所在处的上一行插入新的一行(常用)
r,R进入替换模式(Replace mode):r只会替换光标所在的那一个字符一次,R会一直替换光标所在的文字,知道按下『Esc』键为止(常用)

3、命令行模式下的按键

按键说明
:w将编辑的数据写入硬盘文件中(常用)
:w!若文件属性为只读时,强制写入该文件。不过,到底能不能写,还是跟你对该文件的文件权限有关啊
:q离开vi(常用)
:q!若曾修改过文件,又不想存储,使用!为强制离开不保存文件
:wq保存后离开,若为”:wq!”则为强制保存离开(常用)
ZZ大写的Z,若文件没有改动,则不保存离开,若文件已被改动,则保存离开
:w『filename』将编辑的数据保存成另一个文件(类似于另存文件)
:r『filename』在编辑的数据中,读入另一个文件的数据,即将”filename”这个文件内容加到光标所在行后面
:n1,n2 w 『filename』将n1,n2的内容保存成filename这个文件
:! command暂时离开vi到命令行模式下执行command的显示结果。例如”:! ls /home”即可在vi当中查看/home下面以ls输出的文件信息
:set nu显示行号
:set nonu取消显示行号

四、vim实战

未完待续....

总访问次数: 294次, 一般般帅 创建于 2018-11-10, 最后更新于 2020-06-25

进大厂! 欢迎关注微信公众号,第一时间掌握最新动态!