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 |
保存所有标签页,并全部退出 |