
2.3.7 Linux高手的编辑神器——VIM
Linux下有各种各样的文本文件,如C语言、Java和PHP的代码文件,各种配置文件,脚本文件和各种文档,这些都是文本文件。可以说,文本编辑工具是Linux开发和运维人员使用最为频繁的一个工具,而VIM则是文本编辑工具中的神器,它在文本编辑工具中的地位相当于Windows或Linux在操作系统中的地位。本小节将介绍VIM的三个特点、VIM的工作状态、VIM的基本使用和VIM高级使用,帮助读者最短的时间内入门VIM。
1.VIM的三个特点
和其他文本编辑器相比,VIM有三个特点,说明如下。
(1)通用
Linux有很多发行版,每个发行版预装的软件是不一样的,但不管是哪个发行版,通常都会预装VIM,因此,在做开发时不用担心VIM没有安装。
(2)轻量级
程序体积小,VIM程序的大小不到2MB,与此相对的是Windows下的文本编辑工具,如Word、WPS等,至少都是几十MB,甚至达到几百MB或者上GB。
(3)高度支持开发
高度支持开发是通用文本编辑器所不具备的,例如语法高亮、代码自动补和自动缩进等。
VIM的全称是Vi IMproved,它是Vi的改进版。
2.VIM工作状态
VIM是字符界面下的文本编辑器,它不像Windows的记事本有图形界面,VIM有3种工作状态(State),其转换关系如图2-25所示。

图2-25 VIM状态转换图
VIM工作状态说明如下。
(1)命令状态
命令状态下可以输入文本操作命令,例如选中、复制、粘贴、剪切等,但不能直接编辑。
(2)编辑状态
编辑状态下可以直接对文本进行编辑,插入、删除字符等,编辑状态又称插入状态。
(3)末行状态
末行状态下可以运行文本编辑之外的命令,例如保存、退出、显示行号等。
3.VIM基本使用
下面介绍VIM的基本使用和3种工作状态,具体步骤说明如下。
(1)打开文件
1)运行vi命令,后面跟要编辑的文件路径,如下所示。

2)按〈Enter〉键后,VIM进入第一个工作状态“命令状态”,如下所示,在屏幕下方的显示如下。

“命令状态”下不能直接编辑文件,也就是说,用户不能直接输入要编辑的内容。
(2)编辑文件
1)按〈I〉键后,VIM就进入了“编辑状态”,屏幕下方显示如下。

2)“编辑状态”下用户可以直接输入待编辑的内容,例如“Hello VIM!”。

(3)保存文件
1)输入完毕后,按〈Esc〉键后,VIM返回到“命令状态”,然后输入冒号(:),如图2-26所示。

图2-26 VIM末行状态
2)“末行状态”下输入wq,按〈Enter〉键保存退出,如图2-26所示。
初学者使用VIM编辑文件时,容易忘记在vi后面输入文件名,待到wq保存退出时,会提示No file name,此时可以在“末行状态”下输入w myfile,其中w表示write,myfile是要保存的文件名,按〈Enter〉键后,当前编辑的内容就会写入myfile,然后在“末行状态”下输入q即可。
如果不退出,只是中途保存的话,“末行状态”下输入w即可。
如果不保存并退出,“末行状态”下输入q!即可。
(4)查看文件
使用cat命令输出myfile内容,如下所示,如果能够看到“Hello VIM!”则说明myfile编辑保存成功。

4.VIM高级使用
上节介绍了VIM的基本用法,初学者可以在几分钟的时间内就学会并上手编辑文件。同时VIM还有很多的高级功能,它们可以大大提升编辑效率。本小节将介绍VIM中最常用的高级功能,具体说明如下。
复制 /etc/profile文件到本地,以此作为编辑演示的对象,命令如下,注意 /etc/profile是源文件路径,后面是空格,空格后面还有一个点(.)是目的路径。

使用VIM打开复制后的profile文件,命令如下。

(1)示例1:显示行号
1)打开profile文件输入冒号(:),进入“末行状态”,然后输入set number,如图2-27所示。

图2-27 行号显示设置图
2)按〈Enter〉键后,可以看到profile文件的行首都显示了行号,如下所示。

(2)示例2:跳转
1)在VIM“命令状态”下,按大写的〈G〉键,光标将跳转到最后1行,如下所示。

2)再按两次小写的〈G〉键,光标就跳转到了第1行,如下所示。

3)如果要跳转到指定的行,例如第55行,只需要先输入55,再按两次小写的〈G〉键。

4)按〈$〉键可以跳转到光标所在行的行尾,如下所示。

5)按〈^〉键可以跳转到光标所在行的行首,如下所示。

(3)示例3:选中
本示例介绍如何使用“选中”功能来确定操作对象,这个非常重要,说明如下。
1)在55行移动光标,使得它停留在字母B上,如下所示。

2)按小写的〈V〉键,VIM的屏幕下方会出现如下的信息。

3)移动〈↑〉、〈↓〉、〈←〉、〈→〉方向键,来选中文本。文本选中之后,就可以应用复制、剪切、删除等命令对文本进行操作了。
(4)示例4:复制、粘贴、剪切、删除
本示例介绍如何使用VIM的命令来实现文本的复制和粘贴,说明如下。
1)首先,选中第55行的部分文本,如下所示。

2)然后,按小写的〈Y〉键,此时VIM就执行了复制操作。
3)把指针移动到第54行的行首,如下所示。

4)再按小写的〈P〉键,此时VIM会将之前复制的内容,粘贴在光标所在的位置,如下所示。

5)VIM中剪切的命令对应x,删除的命令对应d,它们都需要先选中文本才能操作。
VIM中还有一些快捷操作,例如删除文本所有内容,则可以在“命令状态”下,先跳转到第1行,然后按〈D+G〉组合键,就可以删除所有内容了。
如果要删除某行,则无须先选中该行内容,只需要在“命令状态”下输入dd即可。
(5)示例5:撤销和恢复
如果要撤销刚才的操作,可以在“命令状态”下输入u即可,如果要恢复,使用〈Ctrl+R〉即可。
(6)示例6:搜索
1)在“命令状态”输入 /,然后在 / 后面输入要搜索的字符串,例如umask,则光标会停留在第一个umask上,如下所示。

2)按小写的〈N〉键,会依次遍历所有的umask。