Vim 命令速查表
本工具提供了 Vim 常用命令和快捷键的速查功能,分为全局命令、光标移动、插入模式、文本编辑、缩进、复制、宏、寄存器、查找/替换、标签、Diff 等常用的 Vim 命令,是使用 Vim 时必备的参考资料。
本速查表按分类列出了 Vim 常用的命令和快捷键,数量较多,可使用 Ctrl + F 进行查找。
全局命令
- 命令 / 快捷键功能描述
- :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将当前字符后移
- uundo - 撤销最近一次操作
- U恢复/撤销最后修改的行
- Ctrl + rredo - 重做(和 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]移除搜索结果的高亮显示
多文件编辑
- 命令 / 快捷键功能描述
- :e[dit] 文件名在新建的缓冲区打开指定文件名的文件
- :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 {page.words.file}在新标签中打开文件
- 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保存所有标签页,并全部退出