Vi 和 Vim

Vi 是 Linux 操作系统默认的文本编辑器。

Vim 是 Vi 的加强版。不仅可以做简单的文字编辑,它也有颜色高亮,语法提示等特性,可以用作编程。

现在大部分的 Linux 发行版都同时包含 Vi 和 Vim。

在 Linux 操作系统中,Vim 是必须掌握的一个工具:

  1. 作为命令行模式下的文本编辑器非常好用
  2. 大部分 Linux 软件都支持 Vim 的接口,使用 Vim 编辑配置时会有良好的高亮提示
  3. 用熟练以后可以完全脱离鼠标操作,做到键字如飞

Vim 要做到熟练使用不是一件容易的事。

对于一般用户来说要求不用那么高,能完成简单文字的编辑需求就行。就好像小学上微机课,会打开 Word,能打字,保存,退出,就够用了。

我的要求也不高,只要能用它来编辑一些配置文件,写一些简单的 shell 脚本就行了。

我们以案例带学。先来看第一个案例。

练习1:打开编辑器,输入一首古诗,并保存

在终端中,输入 vim 命令,就会打开编辑器,出现如下界面,就说明进入编辑器了:

上手 Linux:快速入门 Vim_vim

打开编辑器后,就能打字了吗?

No,先来了解一个概念,弄清楚这个概念后,才能真正上手 Vim 进行编辑工作。

这个概念就是 Vim 的模式

Vim 的三种模式

什么是模式嘞?人家别的编辑器不是打开就能写东西了吗?

Vim 就是这么与众不同。

Vim 提供了三种模式,相互配合才能完成文件的编辑工作:

  • 命令模式(Command Mode):当在终端中执行 vim,或者使用 vim 命令打开一个文件时,进入该模式
  • 编辑模式 / 插入模式(Insert Mode):在 命令模式下,按下I/iO/oA/aR/r 任意一个,进入该模式
  • 命令行模式(Command-line Mode):在命令模式下,按下 :?/ 进入该模式

注意区分命令模式命令行模式,一字之差,作用不同。

这三个模式,命令模式下按相应的键位可以进入编辑模式和命令行模式;编辑模式和命令行模式按 ESC 可以回到命令模式;但是编辑模式和命令行模式不能相互进入。

用一张图表示就是:

上手 Linux:快速入门 Vim_Linux_02

我们来做一个简单的演示,方便理解这几种模式究竟是做什么用的。

命令模式

在终端中执行 vim 命令,打开 Vim:

$ vim

此时就处于命令模式,光标位于空文件的起始位置:

上手 Linux:快速入门 Vim_DevOps_03

命令模式可以看作是进入其他模式的中转站

编辑模式

注意此时的输入法,必须是英文输入法。按下键盘上的 i,左下角出现 -- Insert -- ,进入编辑模式:

上手 Linux:快速入门 Vim_vim_04

此时就可以通过上下左右箭头来移动光标,并输入文字了。

记住第一个要点:要想使用 Vim 输入内容,必须左下角出现 -- Insert -- 才可以。

输入一首古诗吧:

上手 Linux:快速入门 Vim_DevOps_05

在输入的过程中会发现,虽然光标一直动,但是屏幕最底下一行的位置并没有改变。一定要注意,最下面的一行并不属于文本内容,而是状态栏,显示编辑器的一些状态信息,比如当前处于何种模式,光标的位置,文件名等等。

当完成文本内容的输入,想要保存文件并退出。

还记得上面说的吗,命令模式是中转站,可以进入其他模式;编辑模式和命令行模式不能相互进入。

所以,此时就要先按 ESC 回退到 命令模式,再按 :,也就是 shift + ; ,右下角会出现一个:,进入命令行模式:

上手 Linux:快速入门 Vim_Linux_06

命令行模式

保存文件的命令是 wwrite 的缩写,意思是将文本写入硬盘进行保存。千万不要记成是 s (save) 了。

退出编辑器的命令是 qquit 的缩写。

在命令行模式下,输入 wq,就能退出并保存了:

上手 Linux:快速入门 Vim_vim_07

此时会给出一个提示:

上手 Linux:快速入门 Vim_vim_08

意思是当前编辑的文本没有文件名。因为刚才我们直接打开的编辑器,而不是打开的一个文件,所以在退出时就提示了指定一个文件名进行保存。

此时,再此按 ,进入命令行模式,输入 wq 并指定一个文件名:

上手 Linux:快速入门 Vim_vim_09

回车之后,Vim 就能保存为文件,并退出了。

查看刚刚创建的文件,cat 命令用于查看文件的内容:

上手 Linux:快速入门 Vim_Linux_10

小结

到这里,我们基本上掌握了 Vim 编辑器的简单使用,主要是熟悉它的使用流程,先进入的是命令模式,要打字就进入编辑模式,要保存就先退回到命令模式,再进入命令行模式保存和退出。

虽然文字看上去,话说上去,啰七八嗦的,但是流程实际走下来,会发现其实并不复杂。

练习2:打开1.txt,给古诗添加题目,然后删除掉多余的拼音

在命令行中,执行 vim <文件名> 就可以打开该文件:

$ vim 1.txt

默认进入命令模式,可以看到状态栏提供的一些信息:当前文件名是 1.txt,共有4行内容,86个字符,光标位于第二行第一列,当前页面中显示了全部的内容:

上手 Linux:快速入门 Vim_Linux_11

添加标题,需要进入编辑模式,按 i进入,然后输入题目即可:

上手 Linux:快速入门 Vim_Linux_12

删除括号内注音,需要先将光标移动到合适位置,然后按 Backspace 进行删除:

上手 Linux:快速入门 Vim_Linux_13

如果在删除时不小心,多删了一些文本,就需要用到撤销的功能了。

上手 Linux:快速入门 Vim_DevOps_14

此时要回到命令模式,按 u ,就能撤销刚才的操作了。

在命令模式下,移动光标有两种方式,一是按 HJKL,二是按上下左右箭头。一般更推荐前者,因为可以保持右手始终在键盘的输入区,稍微提高一些输入效率。但是编辑模式下,只能使用箭头键移动光标。

在命令模式下,要删除内容,就不能使用 Backspace 了,要使用 Delete 键。

所以要删除刚才的括号,除了在编辑模式下,我们还可以退回到命令模式,使用 HJKL 移动光标,使用 Delete 来删除。

然后保存文件,按 : 进入命令行模式,输入 wq 再回车:

上手 Linux:快速入门 Vim_vim_15

现在查看下修改后文件的内容:

上手 Linux:快速入门 Vim_DevOps_16

小结

这个练习,除了复习了各个模式的切换之外,也介绍了在命令模式下一些常用的命令,比如 u 是撤销,delete 删除。

总结

本文介绍了在 Linux 操作系统下 Vim 编辑器的简单使用,介绍了它的三种工作模式,各个模式的作用和用法。

然后通过两个简单的案例,基本上掌握了编辑一个文件的基本操作流程。Vim 还有很多常用的命令,比如从命令模式进入编辑模式,有8种不同的进法,现在只介绍了最常用的 i。比如如何复制粘贴文本,如何查找关键字等等,我们会在后面的文章中介绍。