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