Vim 命令速查表

本工具提供了 Vim 常用命令和快捷键的速查功能,分为全局命令、光标移动、插入模式、文本编辑、缩进、复制、宏、寄存器、查找/替换、标签、Diff 等常用的 Vim 命令,是使用 Vim 时必备的参考资料。

全局命令

命令 / 快捷键 功能描述
:h[elp] 关键字 显示指定关键字的帮助
:sav[eas] 文件名 另存为...
:clo[se] 关闭当前窗口
:ter[minal] 打开新的终端窗口
K 打开光标所在单词对应的 man 页面

提示:可以在终端运行 vimtutor 命令,进入 Vim 官方学习教程。

移动光标

命令 / 快捷键 功能描述
h 左移光标
j 下移光标
k 上移光标
l 右移光标
H 移动到当前页面顶部
M 移动到当前页面中间
L 移动到当前页面底部
w 移动到下个单词开头
W 移动到下个单词开头(单词含标点)
e 移动到下个单词结尾
E 移动到下个单词结尾(单词含标点)
b 移动到上个单词开头
B 移动到上个单词开头(单词含标点)
% 跳转到配对的符号
0 移动到行首
^ 移动到行首的非空白符
$ 移动到行尾
g_ 移动到行内最后一个非空白符
gg 移动到文件第一行
G 移动到文件最后一行
5gg 或 5G 移动到第 5 行
fx 移动到字符 x 下次出现的位置
tx 移动到字符 x 下次出现的位置的前一个字符
Fx 移动到字符 x 上次出现的位置
Tx 移动到字符 x 上次出现的位置的后一个字符
; 重复之前的 f、t、F、T 操作
, 反向重复之前的 f、t、F、T 操作
} 移动到下一个段落(当编辑代码时则为函数/代码块)
{ 移动到上一个段落(当编辑代码时则为函数/代码块)
zz 移动屏幕使光标居中
Ctrl + e 向下移动屏幕一行(保持光标不动)
Ctrl + y 向上移动屏幕一行(保持光标不动)
Ctrl + b 向上滚动一屏
Ctrl + f 向下滚动一屏
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏

提示:在命令前追加数字表示命令将执行的次数,如:4j 表示向下移动 4 行。

插入模式(插入/追加文本)

命令 / 快捷键 功能描述
i 从光标前开始插入字符
I 从行首开始插入字符
a 从光标后开始插入字符
A 从行尾开始插入字符
o 在当前行之下另起一行,开始插入字符
O 在当前行之上另起一行,开始插入字符
ea 从当前单词末尾开始插入
Ctrl + h 在插入模式下,删除光标前的字符
Ctrl + w 在插入模式下,删除光标前的单词
Ctrl + j 在插入模式下,另起一行
Ctrl + t 在插入模式下,向右缩进,宽度由 shiftwidth 控制
Ctrl + d 在插入模式下,向左缩进,宽度由 shiftwidth 控制
Ctrl + n 在插入模式下,在光标之前插入自动补全的下一个匹配项
Ctrl + p 在插入模式下,在光标之前插入自动补全的上一个匹配项
Ctrl + rx 在当前光标处插入 x 寄存器的内容
Esc 退出插入模式

编辑文本

命令 / 快捷键 功能描述
r 替换当前字符
J 将下一行合并到当前行,并在两部分文本之间插入一个空格
gJ 将下一行合并到当前行,两部分文本之间不含空格
gwip 重新调整段落
g~ 切换整个文本的大小写(即大写变小写,小写变大写)
gu 把整个文本改成小写
gU 把整个文本改成大写
cc 或 S 将光标所在的行删除,然后进入插入模式
C 或 c$ 删除光标所在位置到行尾的所有文本,然后进入插入模式
ciw 将光标所在的单词删除,然后进入插入模式
cw 从光标位置开始,修改单词
s 删除当前字符,然后进入插入模式
xp 将当前字符后移
u undo - 撤销最近一次操作
U 恢复/撤销最后修改的行
Ctrl + r redo - 重做(和 u 相反)
. 再次执行上一个命令

选择文本(可视化模式)

命令 / 快捷键 功能描述
v 进入可视化模式,移动光标高亮选择,然后,可以对被选中的文本执行命令
V 进行可视化模式,以行为单位进行选择
o 在可视化模式下,让光标在选择区域的开头和结尾进行切换
O 在可视化模式下,切换光标到选择区域的角
Ctrl + v 进入可视化模式,矩阵选择(即列模式)
aw 在可视化模式下,选择当前单词
ab 在可视化模式下,选择被 () 包裹的区域的内容(包含括号)
aB 在可视化模式下,选择被 包裹的区域的内容(包含花括号)
at 在可视化模式下,选择被 <> 包裹的区域的内容(包含 <> 标签)
ib 在可视化模式下,选择被 () 包裹的区域的内容(不包含括号)
iB 在可视化模式下,选择被 包裹的区域的内容(不包含花括号)
it 在可视化模式下,选择被 <> 包裹的区域的内容(不包含 <> 标签)
Esc 退出可视化模式

提示:也可以使用 ( 和 { 分别代替 b 和 B

可视化模式命令

命令 / 快捷键 功能描述
> 向右缩进
< 向左缩进
y 复制选中的文本
d 剪切选中的文本
~ 对选中的文本进行大小写切换
u 将选中的文本转换为小写
U 将选中的文本转换为大写
寄存器
命令 / 快捷键
功能描述 :reg[isters] 显示寄存器的内容
"xy 复制内容到寄存器 x
"xp 粘贴寄存器 x 中的内容
"+y 复制内容到系统剪贴板寄存器
"+p 粘贴系统剪贴板寄存器的内容

提示:寄存器被存储在 ~/.viminfo 中, 在下次重启 Vim 时仍会加载

特殊寄存器

命令 / 快捷键 功能描述
0 上次复制
" 未命名寄存器,上次复制或删除
% 当前文件名
# 轮换文件名
* 剪贴板内容(X11 primary)
+ 剪贴板内容(X11 clipboard)
/ 上次搜索的模式
: 上次执行的命令
. 上次插入的文本
- 上次剪切的短于一行的文本
= 表达式寄存器
_ 黑洞寄存器

标记和位置

|命令 / 快捷键|功能描述 |---|---| |:marks|显示标记列表 |ma|设置当前位置为标记 a |a|跳转到标记 a 的位置 |0|跳转到 Vim 上一次退出时的位置 |"|跳转到该文件上次编辑时的位置 |.|跳转到该文件中最后一次修改的位置 |``|跳转到最后跳转的位置 |:ju[mps]|列出所有跳转 |Ctrl + i|转到跳转列表较新的位置 |Ctrl + o|转到跳转列表较旧的位置 |:changes|列出所有修改历史 |g,|转到修改历史列表较新的位置 |g;|转到修改历史列表较旧的位置 |Ctrl + ]|跳转到当前光标所在的标签

提示:为了跳转到指定的标记位置,你可以使用反引号 ` 或者单引号 '。使用单引号时,将跳转到标记所在行的开头位置。

命令 / 快捷键 功能描述
qa 录制宏 a
q 停止录制宏
@a 执行宏 a
@@ 重新执行上次执行的宏

复制、剪切和粘贴

命令 / 快捷键 功能描述
yy 复制当前行
2yy 复制 2 行
yw 复制当前单词
y$ 复制从光标位置开始到行末的内容
p 在光标后粘贴复制的内容
P 在光标前粘贴复制的内容
dd 剪切当前行
2dd 剪切 2 行
dw 剪切当前单词
d$ 或 D 剪切从光标位置开始到行末的内容
x 剪切当前字符

文本缩进

命令 / 快捷键 功能描述
>> 将当前行向右缩进,宽度由 shiftwidth 控制
<< 将当前行向左缩进,宽度由 shiftwidth 控制
>% 向右缩进 () 或 内的区域(光标需置于括号上)
>ib 向右缩进 () 内的区域(光标需置于括号上)
>at 向右缩进 <> 标签内的区域(光标需置于 <> 标签上)
3== 自动缩进 3 行
=% 自动缩进 () 或 内的区域(光标需置于括号上)
=iB 自动缩进 内的区域(光标需置于括号上)
gg=G 自动缩进整个缓冲区
]p 粘贴并调整缩进至当前行

文本搜索和替换

命令 / 快捷键 功能描述
/pattern 在当前文本中查找 pattern
?pattern 向上查找 pattern
\vpattern 把 pattern 中的非字母数字字符视为正则表达式特殊字符(不需转义字符)
n 查找下一个
N 查找上一个
:%s/old/new/g 把 old 全部替换成 new
:%s/old/new/gc 把 old 逐个替换成 new
:noh[lsearch] 移除搜索结果的高亮显示

多文件编辑

命令 / 快捷键 功能描述
在新建的缓冲区打开指定文件名的文件
:bn[ext] 切换到下一个缓冲区
:bp[revious] 切换到上一个缓冲区
:bd[elete] 关闭缓冲区
:b[uffer]2 切换到第 2 个缓冲区
:b[uffer] 文件 切换到指定文件的缓冲区
:ls 或 :buffers 列出所有打开的缓冲区
:sp[lit] 文件名 在新建的缓冲区打开指定文件名的文件,并水平分割窗口
:vs[lit] 文件名 在新建的缓冲区打开指定文件名的文件,并垂直分割窗口
:vert[ical] ba[ll] 以垂直窗口的形式编辑所有缓冲区
:tab ba[ll] 以标签的形式编辑所有缓冲区
Ctrl + ws 水平分割窗口
Ctrl + wv 垂直分割窗口
Ctrl + ww 在窗口间切换
Ctrl + wq 关闭窗口
Ctrl + wx 切换到下一个窗口
Ctrl + w= 让每个窗口具有相同高度和宽度
Ctrl + wh 切换到左侧窗口
Ctrl + wl 切换到右侧窗口
Ctrl + wj 切换到下侧窗口
Ctrl + wk 切换到上侧窗口

多文件搜索

命令 / 快捷键 功能描述
:vim[grep] /pattern/ {{file}} 在多个文件中搜索 pattern
:cn[ext] 移动至下一个搜索结果
:cp[revious] 移动至上一个搜索结果
:cope[n] 打开搜索结果列表
:ccl[ose] 关闭 quickfix 窗口

标签

命令 / 快捷键 功能描述
:tabnew 或 tabnew 在新标签中打开文件
Ctrl + wT 将窗口编程标签
gt 或 :tabn[ext] 切换到下一个标签
gT 或 :tabp[revious] 切换到上一个标签
2gt 切换到第 2 个标签
:tabm[ove] 2 把当前标签移动到第 2 个位置(下表从 0 开始)
tabc[lose] 关闭当前标签
:tabo[nly] 关闭其他标签
:tabdo command 在所有标签中执行指定的命令(如:使用 tabdo q 关闭所有标签)

Diff(文件比较)

命令 / 快捷键 功能描述
zf 手动定义一个折叠行为
zd 删除光标处的折叠
za 展开/收起光标处的区块
zo 展开光标处的区块
zc 折叠光标处的区块
zr 展开当前折叠层级
zm 收起当前折叠层级
zi 切换折叠功能
]c 跳转到下一个不同处
[c 跳转到上一个不同处
do 或 :diffg[et] 从其他缓冲区获取不同之处
dp 或 :diffpu[t] 把不同之处存入其他缓冲区
:diffthis 把当前窗口的内容作为文件对比的一部分
:dif[fupdate] 刷新,重新比较
:diffo[ff] 关闭当前窗口的 Diff 模式

提示:文本折叠命令,如 za,只会折叠一层;要折叠所有层级,请使用大写形式,如 zA

提示:为了查看文件之间的差异,一种方式是在终端运行 vimdiff 命令,以 Diff 模式打开 Vim;另外,你甚至可以把 Vim Diff 工具作为 git difftool 来使用。

退出

命令 / 快捷键 功能描述
:w 保存
:w !sudo tee % 使用 sudo 保存当前文件
:wq 或 :x 或 ZZ 保存并退出
:q 退出(文件已修改且未保存时 Vim 将发出警告)
:q! 或 ZQ 强制退出(即使文件未保存)
:wqa 保存所有标签页,并全部退出