跳到主要内容

Vim 快捷键速查

· 阅读需 13 分钟
古时的风筝

本篇列出了 Vim 常用的命令和快捷键,方便用到的时候查找。

编辑模式和普通模式切换

以下是插入模式相关按键的表格:

按键功能描述
i在光标处进入插入模式(i: insert)
I在行首进入插入模式
a在光标后进入插入模式(a: append)
A在行尾进入插入模式
o在下一行插入新行并进入插入模式
O在上一行插入新行并进入插入模式
s删除光标所在的字符并进入插入模式
S删除当前行并插入文本
gi进入到上一次插入模式的位置
gI在当前行第 1 列插入
Esc退出插入模式
Ctrl+[退出插入模式,等价于 Esc
Ctrl+C退出插入模式,等价于 Esc 和 Ctrl+[,但不检查缩写

普通模式按键

按键功能描述
单位级移动
h光标左移,等价于 Left 方向键
j光标下移,等价于 Down 方向键
k光标上移,等价于 Up 方向键
l光标右移,等价于 Right 方向键
单词级移动
w移动到下一个标点或空格分隔的单词开头
W移动到下一个空格分隔的单词开头
e移动到下一个标点或空格分隔的单词尾部
E移动到下一个空格分隔的单词尾部
b移动到上一个标点或空格分隔的单词开头
B移动到上一个空格分隔的单词开头
块级移动
0跳到行首,等价于 Home 起始键
^跳到行首非空字符
$跳到行尾,等价于 End 结尾键
ge向后移动到单词词尾
gE向后移动到空白隔开的单词词尾
gg跳到第一行,等价于 Ctrl+Home
G跳到最后一行,等价于 Ctrl+End
[N]G跳到第 N 行,例如 10G 是移动到第 10 行
:N跳到第 N 行,例如 :10Enter 是移动到第 10 行
`N`
{count}%移动到文件百分之 {count} 的位置,例如 10%
<Enter>移动到下一行首个非空字符
N<Enter>光标向下移动 N 行
)向前移动一个句子(句号分隔)
(向后移动一个句子(句号分隔)
}向前移动一个段落(空行分隔)
{向后移动一个段落(空行分隔)
+移动到下一行首个非空字符,等价于 Enter
-移动到上一行首个非空字符
H移动到屏幕上部(H: High)
M移动到屏幕中部(M: Middle)
L移动到屏幕下部(L: Low)
gm移动到的行中间
gj光标向下移动一个屏幕行,非实际行,忽略自动换行
gk光标向上移动一个屏幕行,非实际行,忽略自动换行
<S+Up>按住 Shift 上档键再按 Up 方向键,向上翻页
<S+Down>按住 Shift 上档键再按 Down 方向键,向下翻页
<S+Left>按住 Shift 上档键再按 Left 方向键,向左移动一个单词
<S+Right>按住 Shift 上档键再按 Right 方向键,向右移动一个单词
:ju[mps]输出所有跳转
:cle[arjumps]清除所有跳转
翻屏移动
zz调整光标所在行到屏幕中央
zt调整光标所在行到屏幕上部
zb调整光标所在行到屏幕下部
Ctrl+e向上滚动一行(e: extra line)
Ctrl+y向下滚动一行
Ctrl+u向上滚动半屏(Move up 1/2 a screen)
Ctrl+d向下滚动半屏(Move down 1/2 a screen)
Ctrl+f向下滚动一屏(Move forward one full screen)
Ctrl+b向上滚动一屏(Move back one full screen)
编程辅助移动
%匹配跳转到对应的 () [],能在 if、else、elseif 之间跳跃
gd跳转到局部变量定义处
gD跳转到全局变量定义处
gf打开名称为光标下文件名的文件
[[跳转到上一个顶层函数
]]跳转到下一个顶层函数
[m跳转到上一个成员函数开头
]m跳转到下一个成员函数开头
]M跳转到下一个成员函数结尾
[M跳转到上一个成员函数结尾
[{跳转到上一处未匹配的 {
]}跳转到下一处未匹配的 }
[(跳转到上一处未匹配的 (
])跳转到下一处未匹配的 )
[c跳转到上一个不同处(diff 时)
]c跳转到下一个不同处(diff 时)
]]跳转到下一个第一列的 {
][跳转到下一个第一列的 }
[[跳转到上一个第一列的 {
[]跳转到上一个第一列的 }
[/跳转到当前注释块开始处
]/跳转到当前注释块结尾处
]#跳转到上一个 if 或者 else
[#跳转到下一个 else 或者 endif

编辑模式按键

按键功能描述
<Up>光标向上移动
<Down>光标向下移动
<Left>光标向左移动
<Right>光标向右移动
<S+Up>按住 Shift 上档键再按 <Up> 方向键,向上翻页
<S+Down>按住 Shift 上档键再按 <Down> 方向键,向下翻页
<S+Left>按住 Shift 上档键再按 <Left> 方向键,向左移动一个单词
<S+Right>按住 Shift 上档键再按 <Right> 方向键,向右移动一个单词
<PageUp>向上翻页,<PageUp> 是向上翻页键
<PageDown>向下翻页,<PageDown> 是向下翻页键
<Delete>删除光标处字符,<Delete> 是删除键
<Backspace>退格键 <Backspace> 向后删除字符
<Home>光标跳转行首
<End>光标跳转行尾
Ctrl+d减少缩进光标所在行
Ctrl+f自动缩进光标所在行(相当于普通模式下的 ==
Ctrl+t增加缩进光标所在行
Ctrl+h删除前一个字符,等价于 <Backspace> 退格键
Ctrl+o临时退出插入模式,执行单条命令又返回插入模式
Ctrl+u当前行删除到行首所有字符
Ctrl+w删除光标前的一个单词
Ctrl+\ Ctrl+O临时退出插入模式(光标保持),执行单条命令又返回插入模式
Ctrl+R 0插入寄存器(内部 0 号剪贴板)内容,Ctrl+R 后可跟寄存器名
Ctrl+R "插入匿名寄存器内容,相当于插入模式下 p 粘贴
Ctrl+R =插入表达式计算结果,等号后面跟表达式
Ctrl+R :插入上一次命令行命令
Ctrl+R /插入上一次搜索的关键字
Ctrl+v {char}插入非数字的字面量
Ctrl+v {code}插入用三位数字表示的 ASCII/Unicode 字符编码,例如 Ctrl+v 065
Ctrl+v 065插入 10 进制 ASCII 字符(两数字) 065 即 A 字符
Ctrl+v x41插入 16 进制 ASCII 字符(三数字) x41 即 A 字符
Ctrl+v o101插入 8 进制 ASCII 字符(三数字) o101 即 A 字符
Ctrl+v u1234插入 16 进制 Unicode 字符(四数字)
Ctrl+v U12345678插入 16 进制 Unicode 字符(八数字)
Ctrl+K {ch1} {ch2}插入 digraph(见 :h digraph),快速输入日文或符号等,转为 table

自动补全

组合键功能描述
Ctrl+n插入模式下文字自动补全,最常用的补全
Ctrl+P插入模式下文字自动补全
Ctrl+e有补全列表时,终止这次补全,继续输入
Ctrl+X进入补全模式,注意:智能补全命令均以组合键 Ctrl+X 作为起始操作,下同
Ctrl+X Ctrl+L补全整行
Ctrl+X Ctrl+N插入模式下根据当前缓冲区关键字补全
Ctrl+X Ctrl+K根据字典补全
Ctrl+X Ctrl+T根据同义词字典补全
Ctrl+X Ctrl+F插入模式下补全文件名
Ctrl+X Ctrl+I根据头文件内关键字补全
Ctrl+X Ctrl+]标签文件关键词补全
Ctrl+X Ctrl+D补全宏定义
Ctrl+X Ctrl+V补全 Vim 命令
Ctrl+X Ctrl+U用户自定义补全方式
Ctrl+X Ctrl+S拼写建议,例如:一个英文单词
Ctrl+X Ctrl+O插入模式下全能 Omnifunc 补全

撤销和恢复

组合键功能描述
[N]u撤销命令,N 为任意整数,表示撤销 N 步操作
[N]U撤销整行操作,N 为任意整数
Ctrl+r撤销上一次 u 命令(r:redo)
Ctrl+R回退前一个命令
:earlier {N}s回退到 N 秒前的文件内容,其中 s 可替换为 m(分)、h(小时)、d(天)
:later {N}s前进 N 秒,其中 s 可替换为 m(分)、h(小时)、d(天)

内容查找

组合键功能描述
/pattern从光标处向文件尾搜索 pattern
?pattern从光标处向文件头搜索 pattern
n向同一方向执行上一次搜索
N向相反方向执行上一次搜索
%匹配括号移动,包括 (){}[]。结合以下两个命令相当强大。前提:需要把光标先移到括号上
*向后搜索光标所在的单词
#向前搜索光标所在的单词
Shift*搜索光标所在位置的字符串,不用输入字符串,查询速度比 /pattern
f{char}向后搜索当前行第一个为 {char} 的字符,Nfv 可以找到第 N 个为 v 字符,下同(f: find)
F{char}向前搜索当前行第一个为 {char} 的字符
t{char}向后搜索当前行第一个为 {char} 的字符前(t: to)
T{char}向前搜索当前行第一个为 {char} 的字符前
;重复上次的字符查找命令(f/t 命令)
,反转方向查找上次的字符查找命令(f/t 命令)
tx搜索当前行到指定字符串 x 之前
fx搜索当前行到指定字符串 x 之处
<Esc>放弃查找。例如,启动了 f 命令后发现想用的是 F 命令,<Esc> 退出键放弃查找

键位图中文版

image.png

风筝

作者

风筝

古时的风筝,一个平庸的程序员,主语言 Java,第二语言 Python,其实学 Python 的时间比 Java 还要早。喜欢写博客,写博客的过程能加深自己对一个知识点的理解,同时还可以分享给他人。喜欢做一些小东西,所以也会一些前端的东西,React、JavaScript、CSS 都会一些,做一些小工具还够用。