![Linux快速入门与实战:基础知识、容器与容器编排、大数据系统运维](https://wfqqreader-1252317822.image.myqcloud.com/cover/769/43806769/b_43806769.jpg)
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所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/69_01.jpg?sign=1738849277-yPSAPdozkM4kpbhXQoCTTGU9u3bkvbGf-0-ec50d8e1da362b0be787b787aa19fb7f)
图2-25 VIM状态转换图
VIM工作状态说明如下。
(1)命令状态
命令状态下可以输入文本操作命令,例如选中、复制、粘贴、剪切等,但不能直接编辑。
(2)编辑状态
编辑状态下可以直接对文本进行编辑,插入、删除字符等,编辑状态又称插入状态。
(3)末行状态
末行状态下可以运行文本编辑之外的命令,例如保存、退出、显示行号等。
3.VIM基本使用
下面介绍VIM的基本使用和3种工作状态,具体步骤说明如下。
(1)打开文件
1)运行vi命令,后面跟要编辑的文件路径,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/69_02.jpg?sign=1738849277-8xKca6TiqF1jAjr66LUPj28aUZxpY7No-0-c0ee09fbb505daf062e9574cee19cee7)
2)按〈Enter〉键后,VIM进入第一个工作状态“命令状态”,如下所示,在屏幕下方的显示如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/70_01.jpg?sign=1738849277-outGy9jm8OTawsKotJE1Vki6kYDO81yk-0-59cfcb69ed098b267ac629b001365ade)
“命令状态”下不能直接编辑文件,也就是说,用户不能直接输入要编辑的内容。
(2)编辑文件
1)按〈I〉键后,VIM就进入了“编辑状态”,屏幕下方显示如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/70_02.jpg?sign=1738849277-gAFZoJQtUdy98TgLVRLfpVMHcUyxgJKn-0-b4a85ed32bdfb37960ca637a2278e395)
2)“编辑状态”下用户可以直接输入待编辑的内容,例如“Hello VIM!”。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/70_03.jpg?sign=1738849277-f0Uky7YoSHflpVItPIyKUfSrxBEIOYUu-0-371d6cbcefc1cbf835252d4948ef1765)
(3)保存文件
1)输入完毕后,按〈Esc〉键后,VIM返回到“命令状态”,然后输入冒号(:),如图2-26所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/70_04.jpg?sign=1738849277-tq4GlFCFNDkCjnx1U4gVRH7Cs0WeiKuV-0-b3477081e96952e6346d0843ea70fd4f)
图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编辑保存成功。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/70_05.jpg?sign=1738849277-DysrBipyQEPgUIU9Vvd1sUvDG3xy4xbc-0-049377a8b2b3e7a231f39787806e8dad)
4.VIM高级使用
上节介绍了VIM的基本用法,初学者可以在几分钟的时间内就学会并上手编辑文件。同时VIM还有很多的高级功能,它们可以大大提升编辑效率。本小节将介绍VIM中最常用的高级功能,具体说明如下。
复制 /etc/profile文件到本地,以此作为编辑演示的对象,命令如下,注意 /etc/profile是源文件路径,后面是空格,空格后面还有一个点(.)是目的路径。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/70_06.jpg?sign=1738849277-uDwTDv8wy3teC6fUg7YWRelVMDXwUySN-0-a508611d2cfe078b79bda6536e6e8540)
使用VIM打开复制后的profile文件,命令如下。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/70_07.jpg?sign=1738849277-zj5xf9Egsta5UtxWk7ENEpT9JmLHcAio-0-53e5fb053da8d469a8e645b08795c447)
(1)示例1:显示行号
1)打开profile文件输入冒号(:),进入“末行状态”,然后输入set number,如图2-27所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_01.jpg?sign=1738849277-QewNmf1ucFutdjkk5CAVK4DxlFbRS9E2-0-b85fb9046e74e36acc53ed6e76de7ed4)
图2-27 行号显示设置图
2)按〈Enter〉键后,可以看到profile文件的行首都显示了行号,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_02.jpg?sign=1738849277-m0ZMjYBCWMVW23HG1nAy42xronBjctk4-0-6683f8cea2ae060b0ebbbabb2cdfb9ad)
(2)示例2:跳转
1)在VIM“命令状态”下,按大写的〈G〉键,光标将跳转到最后1行,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_03.jpg?sign=1738849277-QCrENnUGgV3c1blFlhSzPiYzJABfhTwx-0-d711fd90097f37125a849c8ae91a31bd)
2)再按两次小写的〈G〉键,光标就跳转到了第1行,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_04.jpg?sign=1738849277-z3wCs9tCjqcOLYeaZ3DIV38VwpeGxlEY-0-f7701320e2a5bd3beb418be5d2e80b56)
3)如果要跳转到指定的行,例如第55行,只需要先输入55,再按两次小写的〈G〉键。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_05.jpg?sign=1738849277-C04xadMupFFwoEIX8d1CSEsu3kPfdJYu-0-8f7ac9b3688eba9d85c1f90cc9984dee)
4)按〈$〉键可以跳转到光标所在行的行尾,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_06.jpg?sign=1738849277-0yojj6JgwZn7QoZb30Ngj4y5WuMTG2Xy-0-2850813232f9252d30bd0a2cb175d409)
5)按〈^〉键可以跳转到光标所在行的行首,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_07.jpg?sign=1738849277-jx8hKbhnaVK6zWJKhdFFYfNHX3hXkg90-0-536574011c6c32b183d3d50bf17e3e4e)
(3)示例3:选中
本示例介绍如何使用“选中”功能来确定操作对象,这个非常重要,说明如下。
1)在55行移动光标,使得它停留在字母B上,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_08.jpg?sign=1738849277-l3R8u6wzoTVVnpyzXxd12LcTAMw4DLeG-0-3274ef90d0de2432997b41d4164c7d2a)
2)按小写的〈V〉键,VIM的屏幕下方会出现如下的信息。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/71_09.jpg?sign=1738849277-4CS8wh9bhrPXk5TCfiYNdTsixF1bEnWH-0-1a065acb29139dc9074952c4b00e8724)
3)移动〈↑〉、〈↓〉、〈←〉、〈→〉方向键,来选中文本。文本选中之后,就可以应用复制、剪切、删除等命令对文本进行操作了。
(4)示例4:复制、粘贴、剪切、删除
本示例介绍如何使用VIM的命令来实现文本的复制和粘贴,说明如下。
1)首先,选中第55行的部分文本,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/72_01.jpg?sign=1738849277-Lr2LndxflQ1zxzJm1VVKPmITL2s7udt8-0-5e0a08ece52f71e33154eabcfcb0d6a7)
2)然后,按小写的〈Y〉键,此时VIM就执行了复制操作。
3)把指针移动到第54行的行首,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/72_02.jpg?sign=1738849277-cxijbYZSEFnbsPZfuC6vD3Cw9YLsv8ri-0-d565bb3cb279eaa96dc6083b7e2c20aa)
4)再按小写的〈P〉键,此时VIM会将之前复制的内容,粘贴在光标所在的位置,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/72_03.jpg?sign=1738849277-fptcEooWke8Uy8jdW3WmBsj4C4ySy5n5-0-4a277e4bfcff2e126e663623f6a438d1)
5)VIM中剪切的命令对应x,删除的命令对应d,它们都需要先选中文本才能操作。
VIM中还有一些快捷操作,例如删除文本所有内容,则可以在“命令状态”下,先跳转到第1行,然后按〈D+G〉组合键,就可以删除所有内容了。
如果要删除某行,则无须先选中该行内容,只需要在“命令状态”下输入dd即可。
(5)示例5:撤销和恢复
如果要撤销刚才的操作,可以在“命令状态”下输入u即可,如果要恢复,使用〈Ctrl+R〉即可。
(6)示例6:搜索
1)在“命令状态”输入 /,然后在 / 后面输入要搜索的字符串,例如umask,则光标会停留在第一个umask上,如下所示。
![](https://epubservercos.yuewen.com/7143D2/23083819001905006/epubprivate/OEBPS/Images/72_04.jpg?sign=1738849277-0IK3GSFI9uW1zUxfDsmCJ6isnyeaWFoI-0-7a8498f9ba3618a511e799778f827af0)
2)按小写的〈N〉键,会依次遍历所有的umask。