Vim 有七种基本模式:
1,正常模式(Normal mode)
在正常模式下,可以输入所有正常的编辑器命令。在打开编辑器时,就会进入到该模式(除非设置了“insertmode”选项)。该模式也被称为命令模式。
2,可视化模式(Visual mode)
与正常模式类似,但是移动命令涉及一个高亮区域。当使用非移动命令时,会对高亮区域执行该命令。
如果开启了 'showmode' 选项,那么窗口的底部会展示“-- VISUAL --”。
可视化模式用于选择文本块(select a block of text)。
可视化模式的使用包含三步:
使用 “v”、“V”或 CTRL-V 标记文本的起始位置。
光标下的字符会被当作文本块的起始字符。
移动到文本的终止位置。
从可视化模式的起始位置到光标下的字符之间的文本会被高亮显示。
输入操作命令。
命令将操作被高亮显示的字符
开始可视化模式:
[count]v:
开启字符可视化模式。
带有 [count] 时,如果上次可视化操作使用的字符或行的数量是 N,那么从当前光标位置开始,向右选择 N * [count] 个字符。当前一个可视化操作是在一个块上时,那么被选中的块的宽和高都会乘以 [count]。
如果前一次可视化操作不存在,那么选择 [count] 个字符。
[count]V:
开启行可视化模式。
带有 [count] 时,如果上次可视化操作使用的行的数量是 N,那么从当前行开始向下选择 N * [count] 行。如果前一次可视化操作不存在,那么选择 [count] 行。
CTRL-V:
开启块可视化模式。
退出可视化模式:
3,选择模式(Select mode)
键入一个可打印的字符删除选中的文本,然后进入插入模式。
如果开启了 'showmode' 选项,那么窗口的底部会展示“-- SELECT --”。
进入选择模式:
选择模式中的命令:
gh:
开启字符选择模式。与“v”类似,但是开启选择模式,而不是可视化模式。
gH:
开启行选择模式。与“V”类似,但是开启选择模式,而不是可视化模式。
g_CTRL-H:
开启块选择模式。与 CTRL-V 类似,但是开启选择模式,而不是可视化模式。
4,插入模式(Insert mode)
在插入模式,键入的文本会被插入到缓冲区。
如果开启了 'showmode' 选项,那么窗口的底部会显示“-- INSERT --”。
常用的插入模式命令:
下面的命令用于向缓冲区中插入新文本。它们都能被取消,以及使用“.”命令重复执行。
a
在光标后追加文本 [count] 次。如果光标在一个空行的第一列,那么从那里开始插入。
(在正常模式下,先输入数字 n,再输入 a 进入插入模式,然后输入内容,最后按 ESC 回到正常模式,就会出现 n 份内容)
A
在行尾追加文本 [count] 次
i
在光标之前插入文本 [count] 次
I
在当前行的第一个非空白字符前插入文本 [count] 次
o
在光标的下面创建新行,然后插入文本,重复 [count] 次
O
在光标的上面创建新行,然后插入文本,重复 [count] 次
5,命令行模式(Command-Line mode)
在命令行模式下,可以在窗口的底部输入一行文本。
命令行模式用于进入 Ex 命令(“:”),搜索模式(“/”和“?”)和过滤器命令(“!”)。
下面将简单地介绍过滤器:
过滤器是一个程序,它在标准输入接收文本,然后以某种方式改变它,最后再把它发送到标准输出。可以使用下面的命令把某些文本发送到过滤器,以便使用过滤器的输出替换它。
“shell”选项用于指定 Vim 用来执行过滤器命令的 shell。可以使用“.”命令重复执行过滤器命令。
:{range}![!]{filter} [!][arg]:
通过外部程序 {filter} 过滤 {range} 行。Vim 使用上次指定的命令替换可选的叹号(bang),然后追加可选的 [arg]。Vim 把过滤器命令的输出保存到一个临时文件中,然后把该文件读到缓冲区中。
{range} 的格式可以是:
6,Ex 模式(Ex mode)
与命令行模式类似,但是在输入命令之后,仍然在 Ex 模式。在 Ex 模式中只能进行非常受限的命令行编辑。
在正常模式下,输入“Q”或“gQ”切换到 Ex 模式。在 Ex 模式下,使用“:vi”或“:visual”命令退出 Ex 模式,使用“:q”命令退出 Vim。
Vim 底层使用的是行编辑器 Ex,Ex 产生于终端时代。目前大多数编辑操作都不会直接使用 Ex,但在修改多个文件时,Ex 比较有用。
使用 ex filename 打开文件时,看不到文件的内容,只能看到该文件的行数和冒号提示符
Ex 命令由行号和命令组成,比如在“1p”中,“1”是行号,“p”是 print 命令。“p”是默认命令,当只有行号时,会打印行号表示的行。没有行号时则表示操作的是当前行
常用的 Ex 命令包括:
在 Ex 命令中,可以通过三种方式指定行地址:
常用命令举例:
3,18d
删除第 3 到第 18 行之间的内容
150,180 m 23
将第 150 行到第 180 行这个块移动到第 23 行的后面
23,38co100
将第 23 行到第 38行之间的内容拷贝到第 100 行的后面
set nu
显示行号
%t$
把所有行拷贝到文件的末尾
20,.m$
把第 20 行到当前行之间的内容移动到文件的末尾
.=
打印当前行的行号,与正常模式下输入 CTRL-G 效果相同
=
打印文件的行数
/pattern/=
打印模式 pattern 第一次出现的行的行号
%s/Music/music
将每行的第一个 Music 替换为 music
7,终端任务模式(Terminal-Job mode)
该特性用于在一个 Vim 窗口中运行终端模拟器。连接到终端模拟器的任务会被启动。比如,运行一个 shell:
xxxxxxxxxx
:term bash
或者运行一个构建命令:
xxxxxxxxxx
:term make myprogram
任务会异步地运行,窗口会展示任务的输出,同时也可以在其它窗口中编辑。
除此之外,Vim 还有 7 种附加模式,它们是基本模式的变种。比如替换模式(Replace mode)。