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
    移动到文件最后一行
  • 5gg5G
    移动到第 5 行
  • fx
    移动到字符 x 下次出现的位置
  • tx
    移动到字符 x 下次出现的位置的前一个字符
  • Fx
    移动到字符 x 上次出现的位置
  • Tx
    移动到字符 x 上次出现的位置的后一个字符
  • ;
    重复之前的 ftFT 操作
  • ,
    反向重复之前的 ftFT 操作
  • }
    移动到下一个段落(当编辑代码时则为函数/代码块)
  • {
    移动到上一个段落(当编辑代码时则为函数/代码块)
  • 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
    把整个文本改成大写
  • ccS
    将光标所在的行删除,然后进入插入模式
  • Cc$
    删除光标所在位置到行尾的所有文本,然后进入插入模式
  • 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
    退出可视化模式

提示:也可以使用 ({ 分别代替 bB

可视化模式命令

  • 命令 / 快捷键
    功能描述
  • >
    向右缩进
  • <
    向左缩进
  • 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 窗口

标签

  • 命令 / 快捷键
    功能描述
  • :tabnewtabnew {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:xZZ
    保存并退出
  • :q
    退出(文件已修改且未保存时 Vim 将发出警告)
  • :q!ZQ
    强制退出(即使文件未保存)
  • :wqa
    保存所有标签页,并全部退出