一、Vim编辑器简介
Vim的全称为“Vi IMproved”,是一款开源的、高度可定制的文本编辑工具。这款工具使用简单、功能强大,因其代码补全、编译和错误跳转等丰富功能被广泛使用。经过几年的发展,已成为众多Linux发行版默认使用的文本编辑器。
Vim有3种基础的工作模式:命令模式、编辑模式和末行模式。这3种工作模式有各自的用途,且三者之间能够相互配合、相互切换,这使得工作效率能够得到极大的提升。
二、基础工作模式
(1)命令模式
- 在使用Vim编辑器打开某个文件时,默认就处于命令模式中。
- 在此模式下一般可对文件内容进行常规的编辑操作,例如,复制、粘贴、删除和翻页等。
- 我们可以使用方向(上、下、左、右)键或k、j、h、l键来移动光标位置。
(2)编辑模式
- 在命令模式下按 i、a、o 几个键都可以进入编辑模式,
- 进入编辑模式的标志就是在页面的最下方出现一行字“-- INSERT --”。
- 编辑模式就是对文件内容进行编辑操作,当文件编辑完成后按 Esc键 即可重新返回命令模式。
(3)末行模式
- 在命令模式下按 冒号键(:) 可以以进入到末行模式,
- 进入末行模式的标志就是页面的底部出现“:”,并且光标会直接移动到底部冒号的位置。
- 在此模式下可以进行保存、退出、查找、替换、显示行号、分屏和另存为等操作。
- 若想重新回到命令模式,按 Esc键 即可,还可以在末行模式执行完命令之后自动回到命令模式(执行命令按回车键)。
Vim编辑器的3种工作模式如图:

三、常用操作
3.1 打开文件
使用Vim编辑器打开文件的格式:
vim [+行号|+/模式字符串]文件名
示例:
(1)直接打开文件,让光标停留在文件的首行。
$ vim file.txt
(2)打开文件后,让光标停留在指定的行中。
$ vim +6 file.txt
(3)打开文件后,让光标停留在最后一行。
$ vim + file.txt
(4)打开文件后,将光标停留在文件中第一个与指定模式字符串匹配的那行上。
$ vim +/root file.txt
3.2 命令模式
命令模式下的基本操作包括光标移动、删除、撤销、复制、粘贴和替换等,这些操作都有对应的按键:
| 操作 | 操作对象 | 按键 |
|---|---|---|
| 光标移动 | 单个字符 | 上、下、左、右键 k、j、h、l键 |
| 单词 | w键:移动光标到下一个单词的单词首 b键:移动光标到上一个单词的单词首 e键:移动光标到下一个单词的单词尾 | |
| 行首、行尾 | 移至行尾:使用“$”符号 移至行首:使用数字“0”或符号“^” | |
| 指定行 | 数字+回车键:先输入数字,然后按回车键跳转,数字为行号 数字+G键:先输入数字,然后按大写G键跳转,数字为行号 | |
| 删除 | 光标后的单个字符 | x键 |
| 光标所在的整行 | 按两下d键 | |
| 光标以下的n行 | n键+d键+d键 | |
| 光标以下的所有内容 | d键+G键 | |
| 从光标处到行尾 | D键 | |
| 撤销 | 上一次的操作 | u键 |
| 刚才的多次操作 | 多按几次u键 | |
| 复制 | 光标所在的单行 | y键+y键 |
| 光标以下的n行 | n键+y键+y键 | |
| 粘贴 | 复制的内容 | P键 |
| 替换 | 光标所在的单个字符 | r键 |
| 从光标所在的位置开始替换字符,输入会覆盖 后面的文本内容,直到按Esc键结束替换操作 |
R键 |
3.3 编辑模式
编辑模式下的快捷键操作:
| 按键 | 说明 |
|---|---|
i |
在当前光标所在的位置前面插入键盘输入的内容,光标后的文本相应向右移动 |
I |
在光标所在行的行首插入键盘输入的内容,行首是该行的第一个非空白字符 |
a |
在当前光标所在位置后面插入键盘输入的内容 |
A |
在光标所在行的行尾插入键盘输入的内容 |
o |
在光标所在行的下面新插入一行。光标停在新行的行首,等待键盘输入的内容 |
O |
在光标所在行的上面新插入一行。光标停在新行的行首,等待键盘输入的内容 |
3.4 末行模式
(1)保存与退出
在末行模式下的常用的保存与退出指令:
| 指令 | 说明 |
|---|---|
w |
保存文档内容,但不退出 |
q |
不保存修改的内容,直接退出 |
! |
强制性操作 |
将文档内容保存并退出Vim编辑器时可以将这3个指令结合起来使用。
# 在末行模式输入该指令后,强制保存并退出,按回车键执行! :wq!# 将光标跳转到第n行,执行完指令将自动转到命令模式。 :n # 在末行模式输入数字45,按回车键会将光标跳转到第45行,并自动转到命令模式。 :45
(2)基本操作
末行模式下的基本操作:
| 作用 | 按键与具体格式 |
|---|---|
| 行号设置 | 显示行号:set nu取消显示行号: set nonu |
| 语法高亮(默认开启) | 开启语法高亮:syn on关闭语法高亮: syn off |
| 右下角状态 | 开启:set ruler关闭: set noruler |
| 批量替换 | 自定义范围:起始行,结束行 s/源字符串/替换后的字符串/g全局范围: %s/源字符串/替换后的字符串/g |
右下角状态中显示的内容有:光标所在的行和列、内容显示的百分比。
在批量替换中使用的两个表达式的各关键部分含义如下:
- 替换起始行:输入行号,从哪一行开始搜索。
- 替换结束行:输入行号,搜索到哪一行结束。
- 源字符串:要替换的内容。
- 替换后的字符串:替换成什么内容。
- /:分割符,固定不变。
- %:全局,整个文件。
- s:替换命令。
- g在命令末尾:对所有搜索到的字符串进行替换。
- 不加g:只对首次搜索到的字符串进行替换。
替换字符串的不同方式如下:
(1)在全局中只将第一个搜索到的 root 字符串替换为 linux。
:%s/root/linux/
(2)在全局中将搜索到的所有 root 字符串全部替换为 linux。
:%s/root/linux/g
(3)从第7行至第23行范围内搜索 nologin 字符串,并将其全部替换为 logout 字符串。
:7,23 s/nologin/logout/g
(3)注释操作
Vim编辑器可以同时进行多行注释,多行注释的操作也是在末行模式下进行的,具体的语法格式如下:
- 添加多行注释 (#):
:起始行,终止行 s/^/#/g
- 取消多行注释 (#):
:起始行,终止行 s/^#//g
- 添加多行注释 (//):
:起始行,终止行 s/^/\/\//g
- 取消多行注释 (//):
:起始行,终止行 s/^\/\///g
不同的开发语言用的注释符号也不一样:
-
Bash、Python 使用
#作为单行注释 -
C/C++、Java、PHP 这些开发语言则使用
//作为单行注释
示例:对Shell脚本中的1~3行进行注释操作。
:1,3 s/^/#/g
四、可视化模式
为了便于选取文本内容,Vim编辑器引入了可视化(Visual)模式。可视化(Visual)模式就是在整个文本内容中让大家选取一块区域,这块区域可以是几个字符、几行内容或几列内容,针对整块选中 的区域进行一系列的操作。

可视化模式下的操作又分为3种衍生模式:
- 字符可视化模式:以单个字符为单位选择目标文本内容。
- 行可视化模式:以行为单位选择目标文本内容。
- 块可视化模式:按照块的方式选择目标文本内容。
进入到可视化模式后,以光标的位置为起点,通过上、下、左、右键或h、j、k、l键来移动光标可进行区域选取。
4.1 字符可视化
使用Vim编辑器打开文件后,默认是在命令模式下, 按小写的v键进入字符可视化模式,通过方向键进行选择。
图中数字1指的位置是进入可视化模式时光标最初所在的位置,数字2指的位置是对光标进行移动之后最终所在的位置。

4.2 行可视化
在字符可视化模式下,可以按大写的V键进入行可视化模式。
图中数字1指的位置是切换到行可视化模式时光标最初所在的位置,数字2指的位置是对光标进行移动之后最终所在的位置。

4.3 块可视化
在行可视化模式下,可以按“Ctrl+V”组合键进入到块可视化模式。在选取目标块时,按o键可以改变选取区域延伸的方向。
图中数字1指的位置是切换到块可视化模式时光标最初所在的位置,数字2指的位置是对光标进行移动之后最终所在的位置。

4.4 常用操作
处理选取的区域的常用快捷键如下:

示例:
- 把选中文本内容注释掉。
操作步骤:Ctrl+V组合键→ 选取目标块 → I键(大写)→#键 → Esc键,如图6-7所示。

- 将选中区域的所有小写字符转换为大写。
操作步骤:Ctrl+V组合键→ 选取目标块 →U键(大写),如图6-8 所示。
