本速查表按分类列出了 Vim 常用的命令和快捷键,数量较多,可使用 Ctrl + F 进行查找。
全局命令
| 命令 / 快捷键 | 功能描述 |
|---|---|
| :h[elp] 关键字 | 显示指定关键字的帮助 |
| :sav[eas] 文件名 | 另存为... |
| :clo[se] | 关闭当前窗口 |
| :ter[minal] | 打开新的终端窗口 |
| K | 打开光标所在单词对应的 man 页面 |
移动光标
| 命令 / 快捷键 | 功能描述 |
|---|---|
| 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 | 向上滚动半屏 |
插入模式(插入/追加文本)
| 命令 / 快捷键 | 功能描述 |
|---|---|
| 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 | 退出可视化模式 |
可视化模式命令
| 命令 / 快捷键 | 功能描述 |
|---|---|
| > | 向右缩进 |
| < | 向左缩进 |
| y | 复制选中的文本 |
| d | 剪切选中的文本 |
| ~ | 对选中的文本进行大小写切换 |
| u | 将选中的文本转换为小写 |
| U | 将选中的文本转换为大写 |
寄存器
| 命令 / 快捷键 | 功能描述 |
|---|---|
| :reg[isters] | 显示寄存器的内容 |
| "xy | 复制内容到寄存器 x |
| "xp | 粘贴寄存器 x 中的内容 |
| "+y | 复制内容到系统剪贴板寄存器 |
| "+p | 粘贴系统剪贴板寄存器的内容 |
标记和位置
| 命令 / 快捷键 | 功能描述 |
|---|---|
| :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 模式 |
退出
| 命令 / 快捷键 | 功能描述 |
|---|---|
| :w | 保存 |
| :w !sudo tee % | 使用 sudo 保存当前文件 |
| :wq 或 :x 或 ZZ | 保存并退出 |
| :q | 退出(文件已修改且未保存时 Vim 将发出警告) |
| :q! 或 ZQ | 强制退出(即使文件未保存) |
| :wqa | 保存所有标签页,并全部退出 |
工具推荐