我们在上一节当中讲述了正则表达式(BRE, ERE),它们两个的正则表达式元字符书写方式有些不同,以及我们也讲述了grep和egrep和fgrep之间的关系也知道了如何使用,它是根据用户所指定的"PATTERN"来对文本进行逐行匹配进行过滤,将匹配到的行进行输出,之后我们也介绍了其文本查看处理工具,例如:wc、cut、sort、uniq、diff、patch。那么在这一章当中我们来讲述一下vim编辑器。
一、文本编辑器
vi编辑器是一款纯文本编辑器,所谓的纯文本也就是没有任何的修饰的文本信息,和我们的网页以及办公软件不同的是,后者是有文本标记语言的,例如.html和.xml可以进行修饰,能够更改字体大小、添加下划线以及更改字体的颜色等,这样能够在确保在下次打开之前还能够保留这样的格式。
而纯文本的编辑器没有标记语言这一说,就是单纯的保留字符信息,即使字体大小更改也是用一种特殊的方式,其选中某个字段更改字体大小也更改的全部字段(例如:Windows记事本)。
1.1 文本编辑器种类
在Linux当中,文本编辑器的种类一共有两种,一种是行编辑器,另一种是全屏编辑器,在行编辑器中的代表为sed;而在全屏编辑器中,一个是nano,另一个就是vi了,而vi的意思为(Vistual Interface)称之为可视化接口,还有一个是vi的增强版,我们称之为vim(VI IMproved)。
二、vim编辑器
如果不加说明的话,在这里vi/vim是通用的,vim是一款模式化的编辑器,每种模式的功能是不尽相同的,一般来说,它的基本常用模式有以下几种:
编辑模式, 命令模式(复制、删除等); 输入模式:在原有的文本基础上编辑该文本以及修改输入; 末行模式: 内置的命令行接口;
2.1 打开文件
vim编辑器和之前nano的打开方式相同,如果在本地或指定的路径没有文件时,会自动创建此文件,并将编辑好之后信息保留在此文件中,其基本用法如下:
# vim [OPTIONS] [FILE...]
当打开某个文件后,光标默认在最左上角的第一行中的第一列当中,我们可以通过某个选项来可以对光标进行指定,用来定位让光标处于哪一行的行首,选项如下:
+#:打开文件后,直接让光标处于第#行的行首; +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首位置;
那么打开文件之后,就默认处于编辑模式,我们如果想要修改该文件时,就要从编辑模式转换到输入模式,有以下几种方式可提供选择:
编辑模式:默认模式 编辑模式 --> 输入模式: i:insert, 在光标所在处输入; a:append, 在光标所在处的后方输入; o:在光标所在处的下方插入一个新行; I:在光标所在行的行首输入; A:在光标所在行的行尾输入; O:在光标所在处的上方打开一个新行;
那么从输入模式回到编辑模式时,使用ESC键就可以回到编辑模式。
输入模式 --> 编辑模式 ESC
当我们从编辑模式转换为末行模式时,要使用":"
来进行转换。
编辑模式 --> 末行模式 : (这是个内置命令行接口)
从末行模式中要是回到编辑模式的话,也要使用ESC键来进行转换;如果末行模式有命令的话,需连按两次ESC键。
末行模式 --> 编辑模式 ESC
2.2 关闭文件
当我们了解完以上几种模式的时候,那么现在了解一下如何关闭文件,在编辑模式下使用快捷键ZZ就能够保存并退出,也可以在末行模式下退出,那么在末行模式下退出的方法有很多种。
:q 退出; :q! 强制退出; :wq 保存并退出; :w :q :x 保存并退出; :w /PATH/TO/SOMEFILE 可理解另存为
2.3 光标跳转
光标跳转实际上可以理解为man手册的翻页,或者为单词之间的跳转等,根据跳转范围,我们大致能分为以下几种:
光标跳转: 字符间跳转: h:左 j:下 k:上 l:右 # COMMAND:跳转由#指定个数的字符; 单词间跳转: w:下一个单词的词首; e:当前或后一个单词的词尾; b:当前或前一个单词的词首; # COMAND:跳转由#指定个数的单词; 行首行尾跳转: ^:跳转至行首的第一个非空白字符; 0:跳转至行首; $:跳转至行尾; 行间跳转: #G:跳转至由#指定的行; 1G, gg:跳转至第一行; G:最后一行; 句间跳转: ) ( 段间跳转: } {
2.4 翻屏
我们在man命令中,如果要翻到下一屏,要使用f键,向上翻一屏要使用b键,但在vim中翻屏操作要比man命令有所区别:
翻屏: Ctrl+f:向文件尾部翻一屏; Ctrl+b:向文件首部翻一屏; Ctrl+d:向文件尾部翻半屏; Ctrl+u:向文件首部翻半屏; Enter:按行向后翻;
三、vim的编辑命令
用vim的编辑命令,我们可以对该文件进行大规模的操作,通常编辑命令包含以下编辑操作:
字符编辑: x:删除光标所在处的字符; #x:删除光标所在处起始的#个字符; xp:交换光标所在处的字符与其后面的字符位置 替换命令(replace): r:替换光标所在处的字符; rCHAR 删除命令: d:删除命令,可结合光标跳转字符,实现范围删除; d$:删除从当前字符到行尾的内容; d^:删除从当前字符到行首的内容; dw:删除从当前字符到下一个单词的词首; de:删除从当前字符到下一个单词的次卫; db:当前或前一个单词的词首; # COMMAND dd:删除光标当前所在的行; #dd:删除光标所在处的行起始共#行; 粘贴命令(p, put, patse): p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方; P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方; 复制(yank,y): y:复制,工作行为相似于d命令; y^: y0: ye: yw: ya: #COMMAND yy:复制一整行 #yy:复制#行;
3.1 改变命令
改变命令功能是能从编辑模式转换为输入模式,因为改变什么是需要用户的介入,其次它也能实现删除的操作。
改变命令(change, c) 编辑模式 --> 输入模式,实现删除操作; c$ c^ c0 cb ce cw #COMMAND cc:删除光标所在的行,并转换为输出模式; #cc:
四、其它编辑操作
以上就是对行进行操作,在windows中,点击鼠标左键我们就能划过某个字段来进行编辑操作,在vim编辑器中也可以实现,我们可以称之为可视化模式。
可视化模式: v:按字符选定; V:按行选定; 结合编辑命令使用:d, c, y
接下来是撤销操作,如果说在文件中我们编辑错误或者删除错误时,可以进行撤销操作来进行还原,需要注意的是,如果进行了保存并退出的话,则撤销不回原点。
撤销(undo)操作: u:撤销此前的操作; #u:撤销此前的#个操作
如果撤销错误的话,我们可以撤销此前撤销的操作,也可以称作为向前还原。
撤销此前的撤销操作: Ctrl+r
如果某一个操作能够执行多次,也可以重复执行前一个编辑操作:
重复执行前一个编辑操作: .
如果还想学习更多关于vim的其它操作,在Linux中自带有vim教程,该教程的命令为:vimtutor