Vim 文本编辑器
通过前面的学习我们知道,Linux 系统中 “一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。
作为一名 Linux 初学者,你必须熟练掌握 Linux 中至少一款文本编辑器的用法。对文本编辑器的功能(如查找、剪切和粘贴)了解越多,对你越有帮助。
和 Windows 中的记事本一样,Linux 中也有文本编辑器,叫做 Vi 编辑器,Ubuntu 中内置了 Vi 编辑器的升级版 Vim。
可供选择的编辑器不止一种,例如 vim、emacs、pico、nano 等,很多人都找到了自己所喜爱的编辑器。综合考虑各种因素,本套 Linux 教程建议初学者学习 Vim 文本编辑器。
Vim 文本编辑器,是由 vi 发展演变过来的文本编辑器,因其具有使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器等特点,成功圈住了很多人成为其死忠粉丝。
什么是 Vim?
Vim 是 Linux 系统内置的「文本编辑器」,用于查看或编辑文件的内容,学会使用 vim 编辑器,将在 Linux 终端中畅通无阻。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
连 vim 的官方网站 (https://www.vim.org/) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
这里放一张 vim 的键盘图,大家可以保存下来方便查看。

注意
最难的不是如何学习 Vim,而是一直使用 Vim。
打开文件
我们先在当前目录下创建一个 demo.txt
的文件,
touch demo.txt
vim demo.txt
注意
你也可以直接输入 vim demo.txt
或者 vi demo.txt
,如果该文件不存在,则会创建。 这时我们进入的是命令模式,还不能直接编辑

使用 vim 打开文件时,尽量使用 Tab 键补全文件名,如果文件名不存在,则会创建一个新的文件。
- 打开指定文件,
vim 文件路径
vim /home/test.txt
提示
输入 :wq
退出文件
- 打开文件时,将光标移动到指定行,
vi +行号 文件路径
vim +3 /home/test.txt
打开文件时,光标停在了第三行(默认停在首行)
- 打开文件时,高亮显示关键字,
vim +/关键字 文件路径
vim +/nginx /home/test.txt
打开文件时,字符串 nginx 已高亮显示。
Vim 三种模式
Vim 提供了许多命令,使编辑功能非常强大,比如插入、附加、打开新行、替换、更改等等。
这时我们直接输入内容是无法完成的,因为默认进入之后为 命令模式
,Vim 编辑器默认有三种模式:
- 命令模式(Command mode):此模式下可以输入任意的命令进行操作,所有的输入都被看做是命令输入,而不是文本编辑输入;
- 插入模式(Insert mode):此模式下输入的任何内容都会以文本编辑方式写入到文件中,就像我们直接在 Windows 的记事本中写内容一样;
- 末行模式(Last line mode):可以通过命令操作文件,比如搜索、保存、退出等。
简单的说,我们可以将这三个模式用下图来表示

命令模式(Command mode)
这是 Vim 启动的默认模式,可以在这种模式下输入编辑器命令。
此模式下可以输入任意的命令进行操作,所有的输入都被看做是命令输入,而不是文本编辑输入。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
注意
此处,任何没有冒号的 Vim 命令都表示正在命令模式下执行该命令。
插入模式(Insert mode)
使用此模式输入/编辑文本。要从默认命令切换到插入模式,请按 i 键。
插入模式下可以输入任何文本。
它将在编辑器的左下角显示当前模式。

按 esc 键从此模式切换回命令模式。
末行模式(Last line mode)
此模式也用于输入命令。 此模式下的命令以冒号 : 开头。
从命令模式切换到此模式,只需键入冒号 :。
从插入模式切换到此模式,请按 esc 键入,然后输入冒号 :。

在末行模式下,常用的复杂命令有:
:set number
开启行号:w
保存:wq或:x
保存并关闭:q
关闭:q!
强制关闭
帮助
Vim 编辑器本身附带了帮助手册,它非常全面。 要访问帮助可执行以下命令:
:help

如果只对某个主题感兴趣。 Vim还提供了以下语法的命令:
:help <topic-name>
在上面的命令中,将 <topic-name>
替换为感兴趣的主题。

只有知道短语名称,才能搜索特定主题。 但是,如果不知道帮助主题的确切名称,该怎么办? 在这种情况下,可以使用以下命令:
:helpgrep <phrase>
例如,要在Vim执行以下命令中访问有关导航的帮助:
:helpgrep navigation
