![Linux运维之道(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/228/33692228/b_33692228.jpg)
2.2 Vim文档编辑
Vim是由vi发展演变过来的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,现已成为众多Linux发行版本的标配。对于初学者来说,Vim往往是生涩、难以学习的文本编辑器,但当你完全掌握了这种编辑器后,你会发现自己的工作效率会比没有使用Vim之前提升了很多倍。
2.2.1 Vim工作模式
Vim具有多种工作模式,常用的工作模式有:普通模式、插入模式、命令模式。其中,普通模式可以实现基本的光标移动与大量的快捷键操作,插入模式可实现文本的基本编辑功能,命令模式通过输入特定的指令实现特定的功能,如保存与退出等。
直接输入vim命令,即可开启该文本编辑器,默认将创建一个新的文档(因为没有指定文件名,所以保存时需要提供文件名)。另外,如果vim命令后跟了文件名参数,则需要判断该文件是否存在,如果存在,Vim将打开该文件,如果不存在,Vim将创建该文件。
提示
使用Vim打开文件时,如果提示:Found a swap file by the name,类似这样的信息代表有其他进程正在同时编辑该文件,或者由于上次Vim非正常关闭,导致swap文件没有清除导致的,可以将以点开始的一个隐藏文件删除,解决类似的问题。该隐藏文件与原始文件处于相同目录下,文件名后缀一般为swp(如.httpd.conf.swp)。
Vim编辑器默认会进入普通模式,插入模式可以通过以下按键进入(参见表2-1)。
表2-1
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_31.jpg?sign=1739282298-Z5dBiCc1II9MrGeSj0BwNM8owQz54J6i-0-6175080d53487d8ddea8d241ac37079b)
当需要退回到普通模式或不知道自己当前处于什么模式时,可以通过Esc键返回到普通模式。
最后,在普通模式下输入“:”,即可进入命令模式;在“:”后输入指令,即可实现特定的功能,如:q!可以不保存,强制退出编辑器。
2.2.2 Vim光标操作
Vim中最简单的移动光标的方式是使用方向键(上、下、左、右)操作,但这种方式的效率低下,更高效的方式是使用快捷键,常用的快捷键如表2-2所示,所有的快捷键均在普通模式下直接使用。
表2-2
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_32.jpg?sign=1739282298-S8JLxJWg6JfNcIVCBAARmpDwYyMbBEqo-0-0d3353b215689e6f0bc8a14b0cfacf46)
续表
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_33.jpg?sign=1739282298-0nEUSacSQTO0vwJMja1BatDzPoBXZbOg-0-2eeecfa449b7225c2e43a5b2d6d3f396)
2.2.3 Vim编辑文档
在Vim编辑器中编辑文档内容主要有两种常用的方式:进入编辑模式操作和快捷键操作。进入编辑模式的方法已经在表2-1中有详细的描述,进入编辑模式后,即可以通过移动光标进行增加、删除、修改的基本操作,这种方法也是最简单的方式。另外,快捷键操作方式是在普通模式下输入相应的快捷键实现对应的功能,快捷键功能描述参见表2-3。
表2-3
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_34.jpg?sign=1739282298-IXKPFpVHY1GMI9dCrdGr6FkxQvFDqjEb-0-4a40896241c7b7228b231e56b14cac5a)
2.2.4 Vim查找与替换
当文档很长时,我们可以通过查找快速定位要找的内容,在Vim中通过在普通模式下输入“/”关键词,实现自上往下的查找功能,如,/host在当前文档的光标处向下查找host并显示,如果一个文档中有多个host,可以通过快捷键n跳转至下一个匹配的关键词处,快捷键N将跳转至上一个匹配的关键词处。另外,通过在普通模式下输入“?”加关键词,可以实现自下往上的查找功能,如,?host从当前文档的光标处向上查找host并显示,此时快捷键n表示查看上一匹配,N表示查看下一匹配。
Vim提供了非常好用的替换功能,可以快速完成大量的替换工作。
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_35.jpg?sign=1739282298-DjMH0jiBhLL4UnN94eAizPTDFTWqpeFQ-0-58380a3490f24ee627cb7eb4cb12dfb5)
通过上面两条命令复制一份临时测试文档并编辑,我们可以对该文件实现多种替换功能,如表2-4所示(在普通模式下,输入冒号“:”进入命令模式完成替换命令)。
表2-4
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_36.jpg?sign=1739282298-kJeGtiaNolVf2uwwP9Fqi56cbrnqjJCg-0-05c5ee762f7a49aa5c0d4979e3c808be)
2.2.5 Vim保存与退出
一般情况下,我们会通过命令模式输入特定的指令实现保存与退出功能,常用指令详见表2-5。
表2-5
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_37.jpg?sign=1739282298-S7glASN7AuumQG3y0JrkHVWjW6JnMLR8-0-fdaeaa985beb458ce6170d2f41298006)
提示
Vim提示错误信息E32: No file name时,说明你没有为文件设置文件名,需要在w后跟上文件名称。
另一种保存方式为快捷键操作,在普通模式下输入ZZ,即可实现保存并退出文档。
2.2.6 Vim小技巧
1.显示行号
显示当前行是第几行的方式有很多,可以通过为文档添加行号来实现,添加行号的方法是在命令模式下输入:set number或简写:set nu即可。
2.忽略大小写
在Vim中查找时,你可能不清楚所要找的关键词的大小写,而Vim默认是区分大小写的,这时可以通过在命令模式下输入:set ignorecase,实现忽略大小写。
3.多窗口编辑
当需要同时编辑多个文档时,分割窗口就尤为重要了,最简单的方式是在命令模式下输入:split。如此可以实现编辑同一个文档的不同行,至于窗口的切换,可以使用如下快捷方式:
![img](https://epubservercos.yuewen.com/EC10C6/18002370908016406/epubprivate/OEBPS/Images/txt003_38.jpg?sign=1739282298-C7QGANzNTR2PUUmoGb92HzQinsKtaWvO-0-76e56cfd7ea53a6eb63fa6a0270793de)
Ctrl+w+h快捷键表示跳转至左边一个窗口,Ctrl+w+l快捷键表示跳转至右边一个窗口,Ctrl+w+j快捷键表示跳转至上面一个窗口,Ctrl+w+k快捷键表示跳转至下面一个窗口。
在命令模式下输入:close,可以关闭当前窗口。
在命令模式下输入:split second.txt,此命令会分割窗口并打开新的文件,如此实现多窗口多文件的编辑工作。默认的:split为水平分割窗口,垂直分割可以使用:vsplit指令。
4.执行Shell命令
使用Vim编辑文档的过程中,如需要执行一条Shell命令而不想退出Vim编辑器,可以通过:!{命令}的方式实现。例如,需要查看当前目录下档案的名称,则在命令模式下输入指令:!ls即可,执行完成后按回车键返回Vim编辑器。
5.自动补齐
如果需要输入的内容在前面的行中已经出现过,那么Vim可以根据上文内容自动补齐输入。例如,在文件第三行定义了一个变量FIRST_TIME=09,以后需要再次输入FIRST_TIME时,可以仅输入FI后使用快捷键Ctrl+N,实现自动补齐功能。