Vim 命令参考表

常用 Vim 编辑命令速查。

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

About Vim command reference

Look up motion, delete, and visual-mode commands when you blank on Vim.

How to use

  1. Open the reference table
  2. Find or browse the entry you need
  3. Copy what you need

Vim command reference FAQ

Only common commands?

It focuses on high-frequency editing commands.

Useful for Neovim?

Most basics transfer to Neovim as a quick reference.

Related tools