项目 3 文本编辑器vim 【本章学习目标】 (1)了解vim和vi的区别。 (2)掌握vim的3种工作模式。 (3)掌握一般模式下的快捷键。 (4)掌握命令行模式下的快捷键。 (5)熟悉Linux的文件救援和高级功能。 vi编辑器(VisualEditor)通常简称为vi,是一种命令行界面下的文本编辑器。在早期 的UNIX操作系统中都是使用vi作为系统默认的编辑器的。vim(ViIMproved)就是vi的 升级版,vim和vi最大的区别在于,在编辑一个文本的时候,vi不会显示颜色,而vim会显 示颜色。此外,vim还能够进行Shel 脚本、C语言源程序、Java等程序的编辑,使用vim能 帮助程序员更容易找出源程序中的语法错误,因此可以将vim视为一种程序编辑器。 entOS8.i 在C1系统中,已经默认安装有vm文本编辑器,所以不需要安装。如果目前 Linux系统中没有vim命令,可在计算机连网后使用命令yuminstal-yvim-enhanced自行 进行安装。 3.1 vim 的工作模式 vim是怎么工作的呢? 首先来了解一下vim的工作模式。vim的工作模式有一般模式 (也称指令模式)、编辑模式和命令行模式3种。 3.1 vm 的3种工作模式 1.i 1.一般模式 一般模式有时也称为指令模式。当使用命令vimfilename打开一个文件时,一进入该 文件,就是一般模式了。在这种模式下,可以上、下、左、右移动光标,直接删除某个字符或删 除某些行,复制一行或者多行,进行粘贴,以及查找并替换字符或字符串。因此,一般模式下 的功能键主要有3类:移动光标类,删除、复制和粘贴类,查找替换类。 2.编辑模式 在一般模式下,是不可以修改某一个字符的,要想修改,只能进入编辑模式。要想从一 般模式切换到编辑模式,只需要按i、I、a、A、o、O、r和R这8个键中的任意一个即可。这8 个键的意义是不一样的,后面的表格中会有详细的解释。这8个键中必须记住的是i键。 当进入编辑模式后,屏幕的最后一行会出现“ 插入 - ” - 替换 - ”的字样。 - 或者“ 如果想从编辑模式返回到一般模式,按Esc键即可。 在编辑模式下,主要是编辑文档内容,进行文本的插入或者替换等修改操作。 3.命令行模式 在一般模式下,当输入“:”,就进入了命令行模式。在命令行模式下,可以进行的操作有 保存文件、退出vim、读入外部文件、设置行号和取消行号等。 通常情况下,可以将这3种模式想象成一幅图。图3-1就是vim3种模式之间的转换 关系图。认真看上面的图标,会发现一般模式可以与编辑模式和命令行模式相互切换,但是 编辑模式与命令行模式之间是不可以互相切换的,这一点非常重要。 图3-1vim3种模式之间的转换关系图 3.2 运行vm 1.i 在终端中输入vimfilename命令,然后按Enter键,就进入vim的一般模式了。如果当 前目录中存在这个文件,则打开该文件;如果不存在这个文件,则新建文件,因此,该命令无 论什么时候都不会报错。 上面已经讲解了vim的3种工作模式以及它们之间的转换关系。下面举个简单的例子 让大家加深印象,要求使用vm命令创建一个文本文件ts.x并在其中写入一段文字, 后进行保存,最后退出vim。 i 具体步骤如下。 ettt, 然 (1)打开终端,在命令行提示符后输入命令“vimtest.xt然后按Entr键,这样就进,(”) te 入了vim的工作界面。此时,光标在第一行的行首闪烁,对话框的最下面显示出文件名 te(“) xttxt”。“[]”中的“新文件”3个字表示这是一个新的文件。现在处于vim的一般模式, 如图3-2(.) 所示。 图3-2vim的一般模式 ( - i 2)按i键,屏幕的最后一行会出现“ 插入 - ”字样,此时处于vm的编辑模式,随便输 ·79· 入一些字符,如图3-3所示。 (3)输入完毕后,按Ec键,屏幕下方的“ 插入 - ”消失,返回到一般模式下。 s- (4)输入“:”,进入命令行模式,接着输入“w”,此时“:w”会显示在窗口的最后一行,如 图3-4所示,然后按Enter键,文件内容将会被写入,也即文件内容已保存。此时,窗口的最 后一行会显示“已写入”并显示出文件的总行数和总字符数,当前文件的总行数为11行,总 字符数为504,写入后的文件如图3-5所示。 图3-3vim的编辑模式图3-4 输入“w”将会写入文件 图3-5 写入后的文件 (5)输入“:”,再输入“q”,此时“:q”会显示在窗口的最后一行,如图3-6所示,按Enter 键,退出vim。 图3-6 输入“q”将会退出vim 至此,文件tes.xt已经生成。使用 l 命令进行查看,如图3-7所示。 tt ·80· 图3-ettt文件信息 7 查看ts.x 3.im 常见命令 2v 通过3.1节中的例子,相信大家都已经学会怎么使用vim来进行简单的文本编辑了。 但其实vim是全键盘式操作的编辑器,所以在各个模式下都有很多的功能键,只有掌握好 了这些功能键,才能成为真正的vim高手。下面将对3种模式下的功能键进行详细的讲解。 3.1 一般模式下的功能键 2. 在一般模式下可以使用的功能键最多,大致可以分为3类:第一类是移动光标类,第二 类是删除、复制和粘贴类,第三类是查找和替换类。 1. 移动光标类 一般模式下的移动光标类快捷键如表3-1所示。 表3- 1 一般模式下的移动光标类快捷键 按键名称 h或者←键光标向左移动一个字符 j或者↓键光标向下移动一个字符 k或者↑键光标向上移动一个字符 l或者→键 Ctrl+f 键或者PgDn 键 Ctrl+b 键或者PgUp键 n 空格( n 是数字) 0(数字0)或者Home $或者End H 按键的效果 光标向右移动一个字符 屏幕向文件尾部移动一页 屏幕向文件头部移动一页 按下数字 n 然后按空格,则光标向右移动 n 个字符,如果该行字符数小于 n,则光标继续从下一行开始向右移动,一直到 n 移动到本行行首 移动到本行行尾 光标移动到当前屏幕的最顶行 ·81· 续表 按键名称按键的效果 M 光标移动到当前屏幕的中央那一行 L 光标移动到当前屏幕的最底行 G 光标移动到文件的最后一行 n 是数字) nG( gg n 是数字) n 回车( 光标移动到文件的第 n 行 光标移动到文件的第一行 光标向下移动 n 行 使用键盘上的↑、↓、←、→键,可以将光标移动一个字符,也可以使用键盘上的h、j、k、l 来实现同样的功能。如果要移动多个字符,可以按n+方向键,这里, n 代表一个数字。例 如,如果想将光标向左移动8个字符,先按8键,再按h键,就可以了。或者也可以先按8, 再按←键,光标也会向左移动8个字符。空格代表向右移动一个字符,如果想将光标向右移 动20 个字符,可以按20l(小写的英文),20→,或者20 空格,都可以。 一个大写的G可以将光标移动到文件的最后一行。nG将光标移动到文件的第 n 行, 例如,想移动光标到第101 行,按101G 就可以。要把光标移动到文件的第1行,可以使用 1G 或者gg 。 nEnter,表示将光标从当前行开始向下移动 n 行。如果当前光标位于第10 行,按 5Enter后,光标将会移动到第15 行。 2. 删除、复制和粘贴类 除了移动光标,还经常进行删除、复制和粘贴的操作。一般模式下的删除、复制和粘贴 类快捷键如表3-2所示。 表3- 2 一般模式下的删除、复制和粘贴类快捷键 按键名称 x,X n 是数字) nx( dd n 是数字) ndd( d1G dG yy nyy p,P y1G yG ·82· 按键的效果 x表示向后删除一个字符,X表示向前删除一个字符 向后删除 n 个字符 删除光标所在的那一行 删除光标所在的向下 n 行 删除光标所在行到第1行的所有数据 删除光标所在行到末行的所有数据 复制光标所在的那一行 复制从光标所在行开始的向下 n 行 p将复制的数据从光标下一行粘贴,P则从光标上一行粘贴 复制光标所在行到第1行的所有数据 复制光标所在行到末行的所有数据 续表 按键名称 J u Ctrl+r . 按键的效果 将光标所在行与下一行的数据结合成一行 还原过去的操作 重做上一个操作 重复前一个操作 如果想将光标之后的15个字符删除,按15x即可。如果要删除光标之前的20个字符, 按20X即可。 按dd将删除光标所在的那一行,按ndd将删除包括光标所在行开始的向下 n 行。如 果光标位于第11行,想将第11~22行之间(包括第11行和第22行)的文本删除,只需按下 12dd即可。 3.查找和替换类 最后一类为查找和替换类。一般模式下的查找和替换类快捷键如表3-3所示。 表3- 3 一般模式下的查找和替换类快捷键 按键的效果 向光标之后查找名为keyword的字符串,当找到第一个keyword后,该单词 /keyword 高亮显示,按n键继续查找下一个,按N键,反方向查找下一个 向光标之前查找名为kywod的字符串,当找到第一个keyword后,该单词 高亮显示,按n键继续查(e) 找下一(r) 个,按N键,反方向查找下一个 在n1和n2行之间查找word1字符串并替换为word2 从第一行到最末行,查找word1并替换成word2 在第一行和最末行之间查找word1,替换为word2之前需要用户确认 按键名称 ?keyword :n1,n2s/word1/word2/g :1,$s/word1/word2/g :1,$s/word1/word2/gc 3.2 从一般模式进入编辑模式 2. 从一般模式进入编辑模式,需要按i、I、a、A、o、O、r、R这8个键中的任意一个,这8个 - 键的意义是不一样的。其中,按i、I、a、A、o、O时,窗口最下方将会出现“ 插入 - ”字样,按 R键时,窗口最下方将会出现“ 替换 - ”字样。 - 从一般模式进入编辑模式的8个键如表3-4所示 。 表3- 4 从一般模式进入编辑模式的8个键 按键名称 i I a A 按键的效果 在光标前插入字符 在光标所在行的行首插入字符 在光标后插入字符 在光标所在行的行末插入字符 ·83· 续表 按键名称 o O r R 按键的效果 在光标所在行的下面插入新的一行 在光标所在行的上面插入新的一行 替换光标所在的字符,只替换一次 一直替换光标所在的字符,直到按Esc键 3.3 命令行模式下的功能键 2. 在一般模式下,输入“:”将进入命令行模式。命令行模式下支持的功能有保存文件、退 出vim、读入外部文件、设置行号等。命令行模式下的功能键如表3-5所示。 表3- 5 命令行模式下的功能键 按键名称 :w :w! :q :q! :wq :e! ZZ :w[ieame] fln:r[filename] :eu stn : setnonu : n1,n2w[filename] :!command 按键的效果 保存文件内容 如果文件属性为只读时,强制保存 退出vim 强制退出vim,不管编辑还是未编辑都不保存内容直接退出 保存文件内容之后立即退出 将文档还原成最原始状态 等价于:wq 将文档另存为filename 在光标所在行的下面读入filename 文档的内容 在文件中每行的行首设置行号 取消已经设置的行号 将n1~n2 行的内容另存为filename 文件中 暂时离开vim,执行某个Linux命令,例如 : :!ls/home 暂时列出/home 下的文件,然后会提示按Enter键返回vim 【想一想】在vim中,将打开的文件另存之后并没有退出vim,接着继续编辑文件时, 必须知道继续编辑的是原来的文件还是另存后的文件。 3.im 的其他事项 3v 本节将介绍文件救援、多窗口编辑、多文件编辑和块选择等vim的其他事项。 3.1 文件救援 3. 在使用vim的过程中可能会出现文件还没来得及保存,计算机突然断电或者不小心关 ·84· 闭了终端的情况,这时候要挽救没有保存的文件,就要使用vim 的救援功能了。 在使用vim编辑文件时,vim会在被编辑的文件的目录下,再建立一个名为.filename.swp 的文件。如果系统因为某些原因突然断线了,导致编辑的文件还没有及时保存,这个时候. filename.swp就能够发挥救援的功能了。当再次使用命令vimfilename打开文件时,将会 弹出发现交换文件.filename.swp的警告信息。 本例在使用vimtest.txt命令编辑文件后没有保存就退出了终端,再次使用vimtest.txt命 令时就弹出了如图3-8所示的警告信息。 图3-8 发现交换文件的警告信息 在警告信息的画面中,有6个可用选项。 (1)[O]penRead-Only:以只读方式打开。 (2)(E)ditanyway:直接编辑。 (3)(R)ecover:恢复,即加载暂存盘的内容,用来挽救之前未保存的工作。 (4)(D)eleteit:删除文件,如果确定那个暂存文件是无用的,那么可以先将这个暂存 文件删除。有时候如果不确定这个暂存文件是怎么来的,也可以删除它。 (5)(Q)uit:退出,按q键就可离开vim,不会进行任何动作,返回到命令行提示符。 (6)(A)bort:终止,与quit差不多,也会返回到命令行提示符。在这里,先按R键,再 按Enter键,test.txt文件就显示出来了,恢复之后的文件如图3-9所示。 需要注意的是,除非选择(D)eleteit删除了该交换文件,否则当离开vim 后,还需要在 终端中执行命令 rm .test.txt.swp 自行删除该交换文件,不然,以后每次使用命令 vim test.txt 都会出现同样的警告信息。 ·85· 图3-9 恢复之后的文件 3.3.2 多窗口编辑 当使用vim 编辑文件时,还可以将不同的文件同时显示在屏幕的不同窗口中,也可以 将同一个文件同时显示在屏幕的不同窗口中,实现文件的多窗口编辑,也即常说的分屏 功能。 1.多个文件分屏编辑 命令格式如下: vim -On [FILE_1] [FILE_2] … 或者 vim -on [FILE_1] [FILE_2] … 其中参数说明如下。 (1)-O(大写的O):垂直分割(vertical),不同窗口切换用Ctrl+W+←键或者Ctrl+ W+→键。 (2)-o(小写的o):水平分割(horizontal,默认值),不同窗口切换用Ctrl+W+↑键或 者Ctrl+W+↓键。 (3)n:表示分几个屏,可省略,默认按后面要分割的文件数来决定分几个屏。 (4)[FILE_1][FILE_2]…:需要分屏打开的文件。需要注意的是,如果只打开了两 个文件,则重复按两次Ctrl+W 键即可切换窗口。 图3-10所示为使用vim-Otest.txt/etc/passwd/etc/profile命令所打开的不同文件 垂直分屏的界面。 2.单个文件分屏编辑 在使用vimtest.txt编辑文件时,在一般模式下,输入“:sp”,然后按Enter键,会将该文 件显示在两个窗口中,实现水平分屏的功能,如图3-11所示。 在使用vimtest.txt编辑文件时,在一般模式下,输入“:sp/etc/profile”,然后按Enter 键,会将文件profile显示在第一个窗口中,test.txt显示在第二个窗口中,实现不同文件水 平分屏的功能。如图3-12所示。 可以使用Ctrl+W+↑键或者Ctrl+W+↓键在上下两个窗口中切换。 ·86· 图3-10 多个文件垂直分屏 图3-11 单个文件水平分屏 3. 关闭分屏 要取消其他分屏,保留当前分屏,只需要输入“:only,(”) 然后按Enter键即可;或者按 Ctrl+W+o 键也可以关闭其他分屏。 如果要退出当前所在的分屏,输入“:q,(”) 然后按Enter键就可以了。 3.3 多文件编辑 3. 可以使用vimfile1file2file3…的方式在vim后面同时接好几个文件来开启多文件同 ·87· 图3-12 不同文件水平分屏 时编辑的功能。在进行多文件编辑时,可以使用的命令如下。 (1):n编辑下一个文件。 (2):N 编辑上一个文件。 (3):files列出目前vim 开启的所有文件。当执行命令 vim test.txt /etc/passwd /etc/profile 时,屏幕中出现的是第一个文件test.txt,输入“:n”,然后按Enter 键,屏幕上出现 /etc/passwd文件,再输入“:n”,然后按Enter键,屏幕上出现/etc/profile文件。此时,再输 入“:n”,屏幕最后一行将会报错,提示无法切换,已是最后一个文件,如图3-13所示。 图3-13 切换到最后一个文件 ·88· 此时,如果要切换回第一个文件tes.xt,只能输入“:N”,然后按Entr键,先切换到 tte/etc/paswd,再输入“:N”,按Enter键,才能切换回test.txt。 3.4 块选择 3. 在使用vim编辑一个文件的时候,还可以选择某些字符、某些行或者以长方形的方式 选择资料,然后将选中的文本删除或者复制。此时,可以使用的按键如下。 - (1)v:字符选择,会将光标经过的地方反白选择。按v键后,窗口最下方显示出“ 可 视 - ”标记。 会将光标经过的行反白选择。按V键后, - (2)V:行选择, 窗口最下方显示出“ 可视行 - ”标记。 (3)Ctrl+v:区块选择,可以用长方形的方式选择资料。按Ctrl+v键后,窗口最下方 显示出“ 可视块 - ”标记。 - (4)y:将反白的地方复制起来。 (5)d:将反白的地方删除。 (6)p:将复制的内容粘贴。 下面举例说明区块选择的用法,具体步骤如下: 1)打开终端, vm/t/eni,(”) ei:eu (输入命令“iecntcofg按Entr键。在打开的vm中输入“stn,(”) 按Enter键,设置好行号,如图3-14所示。 图3-14 为文件设置好行号 (2)按13G键,将光标移至第13行行首,然后按11→键,将光标移至“_”的第一 个“ 然后按Cl+v键,此时窗口最下方显示出“ 可视块 - ”标记,如图315所示。上,(”) tpiclts ttr- (3)连续按→键11次,再按↓键6次,将会选择一个如图3-16所示的区块。 (4)按y键,窗口最下方显示7行的区块内容被复制,如图3-17所示。 ·89· 图315 窗口最下方出现“ 可视块 - ”标记 图3-16 选中区块 (5)按G键,将光标移至文件最后一行,按o键,在最后一行的下方新增一行,再按Esc 键,最后按p键,复制的内容将会粘贴在文件的最后一行,如图3-18所示。 (6)由于本例只是演示,所以退出时请输入“:q!”,按Enter键不保存退出。 【试一试】如果不小心按错了键,只是想让“ 可视块 - ”标记消失,需要怎么操作? - 答案是,按两次Esc键。 ·90· 图3-17 复制区块内容 图3-18 粘贴区块内容 综合实践 3 本章的综合实践以C1中的/e为例。具体内容包括15 个步骤,如下 entOS8.etc/profil 所示。 1. 在/tmp这个目录下建立一个名为vimtest的目录。 2. 进入vimtest这个目录当中。 ·91· 3.将/etc/profile复制到本目录下。 4.使用vim打开本目录下的profile这个文件。 5.在vim中设定一下行号。 6.移动到第37行,向右移动15个字符,观察看到的双引号内是什么数字。 7.移动到第一行,并且向下搜寻一下“else个字符串,观察它在第几行。这(”) 8.将11~50行的小写“bin”字符串改为大写“BIN”字符串,并且一个一个挑选是否需 要修改,如何下达指令? 如果在挑选过程中一直按y,观察结果会在最后一行出现改变了几 个“bin”。 9.若修改完后要全部复原,有哪些方法? 10.复制第11~22行的内容,并且粘贴到最后一行之后。 11.如何删除第2~10行的注释数据? 12.将当前这个文件另存为prfl.et。 oiets 13.删除第18行的第11个字符,观察结果出现的第一个单词是什么。 14.在第一行上面新增一行,该行内容输入“ is2019001001.”。 MynameisShengJianhuiandmynumber 15.保存后离开vim。 单元测验 3 一、单选题 1.在vim中实现文件多窗口编辑的命令是( ) 。 A.:sp B.:eu stnnD.: N stnC.:eou 2.在vim的指令模式中,删除光标所在行的命令是( ) 。 A.yy B.dd C.p D. x 3.在vim中,可以按()键进行区块选择,可以用长方形的方式选择资料。 A.v B.V C.p D.Ctrl+v 4.在vim的指令模式中,使用( ),会将光标所在位置后的10个字符删除。 A.10yy B.10dd C.10X D.10x 5.在vim的指令模式中,使用( ),会将从光标所在行开始的10行复制。 A.10yy B.10dd C.10G D.10X 二、判断 题 1.在vim中,从编辑模式可以直接进入命令行模式。() 2.在vim中,从一般模式可以进入编辑模式,也可以进入命令行模式。() 3.在vim中,使用“:”可以从一般模式进入命令行模式。() 4.在vim中可以对文件进行多屏幕编辑。() 5.可以使用vim后面同时接好几个文件来开启多文件同时编辑的功能。() 6.vim和vi都是文本编辑器,它们没有任何区别。() 7.使用vimfilename命令时,无论什么时候都不会报错。() 8.vim是vi的增强版,可以用彩色显示文字,还可以对Shel 脚本、C语言程序进行简 ·92· 单的语法检查 i 。 fln.ie() 9. 离开vm后还得要自行删除.ieameswp才能避免每次打开文件flname 都会出 现警告。() 10. 在vim的一般模式下,使用1G 或者gg 都可以将光标移至第1行。() 三、简答题 1.vim的工作模式有几种? 如何进行不同模式之间的切换? 2.vim的3种模式下分别有哪些功能? 3.vim意外关闭,如何恢复没有保存的文档? 4.vim的高级功能有哪些? ·93·