??Vim总共分为普通模式、插入模式(insert)、替换模式(replace)、可视模式(visual)、命令模式。Vim启动后即进入普通模式,在其它模式下,按
Esc 可退回到普通模式。
普通模式
普通模式下命令可分为以下三类:
- 光标命令
指移动光标的命令。有以下特性:
- 输入这些命令前,可以先输入一个数字,用来指定连续执行的次数。如:
<command><command><command> 等价于3<command> 。 - 这些命令可以作为含参命令的参数,用来指定含参命令的作用范围。
- 立即命令
指按下命令键后,无需再输入参数,便立即做出反应的命令。有以下特性:
- 含参命令
指按下命令键后,需要再输入参数,才能做出反应的命令。有以下特性:
- 同光标命令,在输入前可输入一个数字。
- 后跟参数可为光标命令(记作
<end_position> ),记当前光标位置为<start_position> ,则该命令作用范围是<start_position> 至<end_position> 。 - 后跟参数也可为该命令的重复,此时作用范围为光标所在的一行。
光标命令
字符级移动
单词级移动
命令 | 含义 |
---|
w 或 W | 移动至下一个单词的第一个字符处 | b 或 B | 移动至光标所在单词的第一个字符处;若已在此处,则移动至上一个单词的第一个字符处 | e 或 E | 移动至光标所在单词的最后一个字符处;若已在此处,则移动至下一个单词的最后一个字符处 |
W 、B 、E 以不可见字符( \s )作为划分单词的依据;w 、b 、e 以非单词字符( \W 即 [\^0-9a-zA-Z_] )作为划分单词的依据。
行级移动
命令 | 含义 |
---|
0 | 移动至本行行首 | $ | 移动至本行行尾 | ^ | 移动至本行第一个非空字符 | + | 移动至下一行行首 | - | 移动至上一行行首 |
文段级移动
命令 | 含义 |
---|
( | 移动至当前句子开头;若已在此处,则移动至上一句的开头 | ) | 移动至当前句子结尾;若已在此处,则移动至下一句的开头 | { | 移动至当前段落开头;若已在此处,则移动至上一段的开头 | } | 移动至当前段落结尾;若已在此处,则移动至下一段的结尾 |
屏幕级移动
命令 | 含义 |
---|
H | 移动至本屏首行行首 | M | 移动至本屏中间一行的行首 | L | 移动至本屏尾行行首 |
文件级移动
命令 | 含义 |
---|
gg | 移动至文件首行行首 | G | 移动至文件尾行行首 | 4G | 移动至文件第四行行首 |
屏幕行移动
当某行的字符数过多,为适应屏幕宽度而回绕时,该行在屏幕上占据两行;实际上占据一行。
命令 | 含义 |
---|
gj | 移动至上一屏幕行 | gk | 移动至下一屏幕行 | g0 | 移动至本屏幕行行首 | g$ | 移动至本屏幕行行尾 | g^ | 移动至本屏幕行第一个非空字符处 |
匹配移动
命令 | 含义 |
---|
* | 移动至与光标所在单词相匹配的下一个单词 | # | 移动至与光标所在单词想匹配的上一个单词 | % | 移动至另一个括号符(支持的括号符为 ( ) [ ] { } ) |
查找式移动
命令 | 含义 |
---|
/ | 向后查找 | ? | 向前查找 | n | 若有多项符合查找要求,按此键则移动至下一项 | N | 若有多项符合查找要求,按此键则移动至上一项 |
拷贝、剪切和粘贴
下表中除y 和d 外其余皆为立即命令
命令 | 含义 |
---|
y | 拷贝(含参命令) | Y | 拷贝当前行 | d | 剪切(含参命令) | D | 从当前光标位置起剪切至行尾 | x | 剪切光标处字符 | X | 剪切光标前字符 | p | 向后粘贴 | P | 向前粘贴 |
??现对含参命令进行举例。根据含参命令的特性可知:yy 等价于Y ;y$ 表示拷贝从光标位置至行尾的内容;y4e 表示拷贝从光标位置开始至其后的第4个单词结尾的内容。 ??Vim 支持将拷贝或剪切的内容存入一个变量(a 至z )中,在需要的时候从某个变量中取出粘贴。使用变量时需先输入" 声明变量,如:"aY 表示拷贝当前行的内容放入变量a 中;"bp 表示向后粘贴变量b 中的内容。
缩进
大小写转换
命令 | 含义 |
---|
gu | 转为小写(含参命令) | gU | 转为大写(含参命令) |
合并
撤销
标记点
命令 | 含义 |
---|
m | 声明标记点 | \` | 跳转到标记点 | ' | 跳转到标记点的行首 |
??Vim支持26个局部标记点(a 至z )和26个全局标记点(A 至Z ),局部标记点仅限于当前文件内,全局标记点可跨文件跳转。如:ma 表示将当前光标处声明为局部标记点a ;\`a 表示跳转到标记点a 处,'A 表示跳转到全局标记点A 处的行首(可能发生文件跳转)。
保存和退出
屏幕视图切换
命令 | 含义 |
---|
zt | 将光标所在行滚动至屏幕顶端 | zz | 将光标所在行滚动至屏幕中间 | zb | 将光标所在行滚动至屏幕底端 | Ctrl + f | 向上翻页 | Ctrl + b | 向下翻页 | Ctrl + e | 向上滚动一行 | Ctrl + y | 向下滚动一行 |
插入模式
下表中除c 外其余皆为立即命令
命令 | 含义 |
---|
i | 在当前位置的左侧插入 | a | 在当前位置的右侧插入 | I | 在当前行行首插入 | A | 在当前行行尾插入 | o | 在当前行之下插入新一行 | O | 在当前行之上插入新一行 | s | 删除当前字符并插入 | S | 删除当前行并插入 | c | 删除并插入(含参命令) | C | 删除从光标开始至行尾的内容并插入 |
替换模式
命令模式
保存和退出
命令 | 含义 |
---|
:w | 保存 | :w! | 强制保存(应用于只读文件,且用户有修改权限) | :q | 退出 | :q! | 强制退出(退出且不保存修改时) | :wq | 保存并退出 | :wq! | 强制保存并退出(应用于只读文件,且用户有修改权限) |
设置
命令 | 含义 |
---|
:set nu | 显示行号 | :set nonu | 不显示行号 |
查找和替换
命令 | 含义 |
---|
/<regular_expression> | 查找(<regular_expression> 为正则表达式,此时按n 光标移动到下一匹配项;按N 光标移动到上一匹配项) | :s/<regular_expression>/<string> | 将当前行第一个匹配项替换为<string> | :s/<regular_expression>/<string>/g | 将当前行所有匹配项替换 | :%s/<regular_expression>/<string> | 将各行第一个匹配项替换 | :%s/<regular_expression>/<string>/g | 将全文所有匹配项替换 |
|