Esc从任何模式回到 normal 模式,vim 的家。
记忆法: Escape = 逃离当前模式,回家。
Esc
Ctrl+[ (same as Esc, doesn't need pinky)
Vim 速查表,100+ 条命令含模式、移动、编辑、搜索、寄存器、分屏,带记忆法。
Esc从任何模式回到 normal 模式,vim 的家。
记忆法: Escape = 逃离当前模式,回家。
Esc
Ctrl+[ (same as Esc, doesn't need pinky)
i在光标位置进入 insert 模式,可以直接打字。
记忆法: i = insert,光标之前插入。
i
iHello World
a在光标后进入 insert 模式(append,追加)。
记忆法: a = append,光标之后追加。
a
a // comment
I在当前行第一个非空字符前插入。
记忆法: 大写 I = 行首 Insert(跳过缩进)。
I
I//
A在当前行末尾追加。
记忆法: 大写 A = 行尾 Append。
A
A;
o在当前行下方新开一行并进入 insert 模式。
记忆法: o = open,下面开一行。
o
ohello
O在当前行上方新开一行并进入 insert 模式。
记忆法: 大写 O = 上面开一行。
O
O# header
v进入 visual 模式(按字符选择),用来选中文本。
记忆法: v = visual,按字符选。
v
vw (select to next word)
vap (select around paragraph)
V进入 visual line 模式,按整行选。
记忆法: 大写 V = 整行 Visual。
V
Vj (select 2 lines)
V}d (select to paragraph end and delete)
Ctrl+vVisual block 模式,选中矩形区块,可以做"列编辑"。
记忆法: Ctrl+v = 块选(垂直方向),列编辑神器。
Ctrl+v
Ctrl+v 3j I// Esc (comment 3 lines with //)
R进入 replace 模式,打字会覆盖原有字符。
记忆法: R = 持续 Replace,像打字机覆写。
R
Rfoo (replace 3 chars with foo)
:进入 command 模式,输入 :w :q :s 这类命令。
记忆法: 冒号 = 命令行。
:w
:q
:wq
h / j / k / l左 / 下 / 上 / 右,每次一个字符。vim 党的方向键。
记忆法: h 在键盘最左所以向左,l 在最右所以向右。j 像钩子往下挂,k 像踢腿往上。
h
5j (down 5 lines)
10l (right 10 chars)
w跳到下一个单词的开头。
记忆法: w = word,向前一个词。
w
3w (forward 3 words)
W跳到下一个 WORD —— 类似 w,但只有空白才算分隔(foo.bar 是一个 WORD)。
记忆法: 大写 W = "大词",跨过标点。
W
dW (delete a WORD including dots)
b向后跳到上一个单词的开头。
记忆法: b = back,向后一个词。
b
3b
e跳到当前或下一个单词的末尾。
记忆法: e = end,词尾。
e
de (delete to word end)
ge向后跳到上一个单词的末尾。
记忆法: g + e = 反向找词尾。
ge
0跳到行首(第 0 列,包括前面所有空格)。
记忆法: 零 = 第零列,绝对最左。
0
^跳到本行第一个非空字符(跳过缩进)。
记忆法: ^ 指向"真正内容的开头"(跳过缩进)。
^
d^ (delete from cursor back to first non-blank)
$跳到本行末尾。
记忆法: $ 在正则里也是"行尾",一致的记忆。
$
d$ (delete to end of line, same as D)
gg跳到文件第一行。
记忆法: gg = 直接 go go 到顶。
gg
5gg (go to line 5)
G跳到文件最后一行(或 NG 跳到第 N 行)。
记忆法: 大写 G = Go 到底。
G
120G (go to line 120)
:<N>跳到第 N 行(比如 :42 跳到第 42 行)。
记忆法: 冒号 + 数字 = 直接定位行号。
:42
:1
{ / }跳到上一段 / 下一段(按空行分段)。
记忆法: 大括号像包住一段,按它就跳到段的边界。
{}
d} (delete to end of paragraph)
( / )跳到上一句 / 下一句(按 .!? 断句)。
记忆法: 小括号 = 小步,按句跳。
(
)
Ctrl+u向上滚半屏,光标跟着走。
记忆法: u = up,向上半屏。
Ctrl+u
Ctrl+d向下滚半屏,光标跟着走。
记忆法: d = down,向下半屏。
Ctrl+d
Ctrl+f向下翻一整页。
记忆法: f = forward 翻一整页。
Ctrl+f
Ctrl+b向上翻一整页。
记忆法: b = back 翻一整页。
Ctrl+b
zz / zt / zb把当前光标行放到视口的中间 / 顶部 / 底部。
记忆法: z = 调位置,zz 居中(双 z 对称)。
zz
zt
zb
H / M / L光标跳到可视屏幕的最上 / 中间 / 最下。
记忆法: H = High, M = Middle, L = Low,首字母好记。
H
M
L
f<char> / F<char>在本行向前 / 向后跳到下一个 <char> 字符上。
记忆法: f = find,大写 = 反向。
f(
F"
df; (delete up to and including ;)
t<char> / T<char>跳到本行 <char> 之前 / 之后(不包含该字符本身)。
记忆法: t = till,停在目标前一格。
t)
dt; (delete up to but not including ;)
; / ,重复上一次 f/F/t/T 的跳转,正向 / 反向。
记忆法: ; 同方向再来一次,, 反方向。
;
,
%跳到配对的括号(含 ( ) [ ] { } 甚至 #if / #endif 等)。
记忆法: % 像两半相对的图形,所以跳到另一半。
%
d% (delete from cursor through matching bracket)
Ctrl+o / Ctrl+i在跳转历史里向后 / 向前(像浏览器的后退 / 前进)。
记忆法: o = older 老位置,i = incoming 新位置。
Ctrl+o
Ctrl+i
x删掉光标下的字符。
记忆法: x = 划掉一个字符。
x
5x (delete 5 chars)
X删掉光标前的字符(normal 模式下的退格)。
记忆法: 大写 X = 向后划掉。
X
r<char>用 <char> 替换光标下那个字符,不进入 insert 模式。
记忆法: r = replace 一个,按一下就改。
ra
r) (turn a } into ))
s替换:删掉光标下的字符并进入 insert 模式。
记忆法: s = substitute,删 + 进入插入。
s
3sfoo (replace 3 chars with foo)
S替换整行:删掉这一行并在缩进位置进入 insert 模式。
记忆法: 大写 S = Substitute 整行(= cc)。
S
d<motion>从光标删除到 motion 走到的地方(同时复制进默认寄存器)。
记忆法: d + motion = 删除走过的范围,记忆套路就是 d + 任何移动键。
dw (delete to next word)
d$ (delete to end of line)
d5j (delete current + 5 lines below)
dd删掉整行。
记忆法: dd = 双 d,删整行(motion 就是这一行)。
dd
3dd (delete 3 lines)
D从光标删到行尾(等价于 d$)。
记忆法: 大写 D = 删到行尾。
D
c<motion>改变:删掉 motion 范围并直接进入 insert 模式。
记忆法: c = change,删 + 直接打字。
cw (change a word)
c$ (change to end of line, = C)
ci" (change inside quotes)
cc改写整行,删除内容后在缩进位置进入 insert。
记忆法: cc = 双 c,改整行。
cc
C从光标改到行尾(等价于 c$)。
记忆法: 大写 C = 改到行尾。
C
y<motion>复制(yank)motion 范围到默认寄存器。
记忆法: y = yank,把文本拽到寄存器里。
yw (yank a word)
y$ (yank to end of line)
yi( (yank inside parens)
yy复制整行。
记忆法: yy = 双 y,复制整行。
yy
5yy (yank 5 lines)
p在光标之后粘贴;如果之前复制的是整行,就粘到当前行下方。
记忆法: p = paste,在后面粘。
p
3p (paste 3 times)
P在光标之前粘贴;整行则粘到当前行之上。
记忆法: 大写 P = 在前面粘。
P
u撤销最近一次改动。
记忆法: u = undo,撤销。
u
5u (undo 5 changes)
Ctrl+r重做,撤销的反操作。
记忆法: Ctrl+r = redo,重做。
Ctrl+r
.重复上一次"修改"动作。vim 里最被低估的键,没有之一。
记忆法: 句号 = "再来一次",结束动作的延续。
.
cw foo Esc j . (change next word to foo too)
>> / <<当前行右缩进 / 左缩进一个 shiftwidth。
记忆法: >> 往右推,<< 往左推。
>>
3>> (indent 3 lines)
V}> (indent paragraph)
~切换光标处字符的大小写(光标向后走一格)。
记忆法: 波浪号像在两个状态间摆动 = 切换大小写。
~
5~ (toggle 5 chars)
guu / gUU当前行整行转小写 / 转大写。
记忆法: g + u = 转小写;g + U = 转大写。
guu
gUU
gUw (uppercase one word)
J把下一行接到当前行末,中间加一个空格。
记忆法: 大写 J = Join,把两行合一起。
J
3J (join 3 lines)
di<obj> / da<obj>删除文本对象内部 / 包含外围(单词、引号、括号、HTML 标签等)。
记忆法: i = inner 内部,a = around 含外围(含分隔符)。
diw (delete inside word)
di"
da(
dit (delete inside tag)
ci<obj> / ca<obj>改写文本对象内部 / 含外围 —— 类似 di/da 但直接进入 insert。
记忆法: c + 文本对象 = 直接换掉那个东西。
ciw (change a word)
ci"
ci{ (change inside braces)/<pattern>向下搜索正则匹配,回车跳到第一个匹配。
记忆法: 斜杠 = 向下找。
/foo
/^import.*react
/foo\c (case-insensitive for this search)
?<pattern>向上反向搜索正则。
记忆法: 问号 = 回头问,反向找。
?TODO
?function
n / N跳到下一个 / 上一个搜索匹配(与搜索方向同向 / 反向)。
记忆法: n = next 同向,N = 反向。
n
N
* / #搜光标下那个单词 —— * 向下、# 向上。全词匹配。
记忆法: * 标记"就搜这个词",# 是反向版本。
*
#
g* (substring match, not whole word)
:noh清掉搜索结果的高亮(hlsearch)。
记忆法: noh = no highlight,去高亮。
:noh
:nohlsearch
:s/old/new/在当前行把第一个 old 替换成 new。
记忆法: :s = substitute,替换。
:s/foo/bar/
:s/foo/bar/g (all on this line)
:s/old/new/g在当前行替换所有 old 为 new。
记忆法: g = global,行内全部替换。
:s/foo/bar/g
:%s/old/new/g在整个文件里替换所有 old 为 new。最常用的"全文替换"。
记忆法: % = 整文件,g = 每行全部,组合 = 全文替换。
:%s/foo/bar/g
:%s/\<foo\>/bar/g (whole word only)
:%s/old/new/gc同 %s/g 但每个匹配前都要 y/n/a/q/l 确认一下。
记忆法: c = confirm,每个都问。
:%s/foo/bar/gc
:<range>s/old/new/g只在某段行内替换(比如 5,20 或者可视选区 '<,'>)。
记忆法: 在 s 前给范围,缩小替换区间。
:5,20s/foo/bar/g
:'<,'>s/foo/bar/g (visual selection)
"a y<motion>把内容 yank 到具名寄存器 "a",而不是默认寄存器。
记忆法: 双引号 + 字母 = 指定一个寄存器槽。
"ayy (yank line to register a)
"byw (yank word to register b)
"a p从具名寄存器 "a" 粘贴。
记忆法: "a + p = 粘 a 寄存器的内容。
"ap
"bP (paste register b before cursor)
"+y / "+p从系统剪贴板寄存器复制 / 粘贴(需要 vim 编译支持 +clipboard)。
记忆法: + 寄存器 = 系统剪贴板。
"+yy (copy line to system clipboard)
"+p (paste from OS clipboard)
"* y / "* p使用 X11 PRIMARY 选区(Linux 中键粘贴)复制 / 粘贴。
记忆法: * 寄存器 = PRIMARY 选区。
"*yy
"*p
"_ d<motion>删除到黑洞寄存器 _ —— 不会污染剪贴板 / 默认寄存器。
记忆法: 下划线 = "扔了它",黑洞。
"_dd (delete line WITHOUT yanking)
"_x
:reg列出所有寄存器和它们当前的内容。
记忆法: reg = registers 列表。
:reg
:reg a b "
"0 p粘贴最后一次 yank 的内容(0 号寄存器只装 yank,删除不会污染)。
记忆法: 0 号 = 只存 yank,删除不会覆盖,专治"粘错"。
"0p
m<letter>在光标处打一个标记(a-z 本文件,A-Z 跨文件全局)。
记忆法: m = mark,做标记。
ma (mark a)
mZ (global mark Z)
'<letter>跳到标记 <letter> 的那一行(光标落在该行第一个非空字符)。
记忆法: 单引号 = 跳到那行。
'a
'A (jump to mark A across files)
`<letter>跳到标记 <letter> 的精确位置(含列号)。
记忆法: 反引号 = 跳到精确位置(含列)。
`a
`A
:marks列出当前所有标记。
记忆法: marks = 标记列表。
:marks
:marks abc (just a, b, c)
''跳回上次跳转之前的位置。
记忆法: '' = 弹回上次的位置。
''
:delmarks删除标记。:delmarks a 删 a;:delmarks! 清空所有 a-z 本地标记。
记忆法: delmarks = 删标记。
:delmarks a
:delmarks!
:sp [file]横向分屏(上下)。若给文件名就打开它。
记忆法: sp = split,上下分。
:sp
:sp src/main.ts
:vsp [file]纵向分屏(左右)。若给文件名就打开它。
记忆法: vsp = vertical split,左右分。
:vsp
:vsp README.md
Ctrl+w h/j/k/l把焦点切到左 / 下 / 上 / 右那个窗口。
记忆法: Ctrl+w = 窗口前缀,再按方向。
Ctrl+w h
Ctrl+w l
Ctrl+w w把焦点切到下一个窗口(循环)。
记忆法: Ctrl+w w = 下一个窗口。
Ctrl+w w
Ctrl+w =让所有窗口大小相等。
记忆法: = 号 = 等分。
Ctrl+w =
Ctrl+w + / Ctrl+w -当前窗口高度增加 / 减少一行。
记忆法: + 长大,- 缩小,跟到处一样。
Ctrl+w +
5 Ctrl+w + (grow by 5 rows)
Ctrl+w > / Ctrl+w <当前窗口宽度增加 / 减少。
记忆法: > 右边变宽,< 变窄。
Ctrl+w >
10 Ctrl+w >
Ctrl+w o只留当前窗口,其他全关。
记忆法: o = only,只留这一个。
Ctrl+w o
:only
Ctrl+w q / :q关闭当前窗口。
记忆法: q = quit 当前窗口。
Ctrl+w q
:q
:ls / :buffers列出所有打开的 buffer(含编号)。
记忆法: ls = 跟 shell 一样,列出。
:ls
:buffers
:b <num|name>按编号或文件名(可部分匹配)切换 buffer。
记忆法: b = buffer。
:b 3
:b main.ts
:b# (go to alternate buffer)
:bn / :bp下一个 / 上一个 buffer。
记忆法: bn = next,bp = previous。
:bn
:bp
:bd <num|name>删除(关闭)一个 buffer。
记忆法: bd = buffer delete。
:bd
:bd 3
:bd main.ts
:tabnew [file]新开一个 tab(可带文件名)。
记忆法: tabnew = 新 tab。
:tabnew
:tabnew src/index.ts
:tabn / :tabp下一个 / 上一个 tab。normal 模式下 gt / gT 也可以。
记忆法: tabn = tab 下一个,gt = go tab。
:tabn
:tabp
gt
gT
:tabclose关闭当前 tab。
记忆法: tabclose = 关 tab。
:tabclose
:tabc
:e <file>在当前窗口打开(edit)一个文件。
记忆法: e = edit,打开文件。
:e ~/.vimrc
:e %:h/<Tab> (browse same directory)
q<letter>开始录制宏到寄存器 <letter>。再按一次 q 停止录制。
记忆法: q = 快速录制宏。
qa (start recording into a)
qa...q (record and stop)
@<letter>回放寄存器 <letter> 里的宏。
记忆法: @ = 执行这个寄存器里的内容。
@a
100@a (repeat macro a 100 times)
@@重复执行刚刚那个宏(不用记字母)。
记忆法: @@ = 上一个宏再来一次。
@@
50@@
:let @a = "..."手动给寄存器赋值,不用录制。改宏的时候很有用。
记忆法: let @a = "..." 直接写寄存器 a。
:let @a = "ihello\<Esc>"
zo展开光标下的折叠。
记忆法: z + o = open,打开一个折叠。
zo
zc合上光标下的折叠。
记忆法: z + c = close,合上折叠。
zc
za切换折叠状态(关的就开,开的就关)。
记忆法: a = alternate 切换。
za
zR展开当前 buffer 的所有折叠。
记忆法: 大写 R = Reveal 全部展开。
zR
zM关闭所有折叠(折最狠)。
记忆法: 大写 M = Maximum,折最大化。
zM
:set fdm=<method>选择折叠方法:manual / indent / marker / syntax / expr / diff。
记忆法: fdm = foldmethod,折叠方式。
:set fdm=indent
:set fdm=marker
:set fdm=syntax
zf<motion>在 motion 范围手动创建一个折叠(只在 fdm=manual 下有效)。
记忆法: zf = fold form,创建折叠。
zf3j (fold current + 3 lines below)
zfap (fold a paragraph)
How do I exit vim?先按 Esc 回到 normal 模式,再敲 :q 退出。有改动没保存就用 :wq(保存退出)或 :q!(不要这些改动直接退)。
记忆法: Esc + 冒号 = 出门。q = quit,q! = 强退。
:q
:wq
:q!
ZZ (= :wq)
ZQ (= :q!)
Pasting from clipboard mangles indentationvim 会对你打字的内容自动缩进 —— 从系统粘代码进来就会缩进套娃。粘之前 :set paste,粘完 :set nopaste。
记忆法: :set paste = "我不是在打字,是塞原始字节进来"。
:set paste
(paste your code)
:set nopaste
(better:) :set pastetoggle=<F2>
How do I undo? Where did Ctrl+z go?normal 模式按 u 撤销,Ctrl+r 重做。Ctrl+z 是把 vim 挂到后台(用 fg 回来),不是撤销!
记忆法: u = undo(不是 Ctrl+z)。vim 比 Win/Mac 的 Ctrl+z 早多了。
u
Ctrl+r
:earlier 5m (undo back to 5 minutes ago)
:later 5m
Search keeps highlighting after I find it是 hlsearch 一直亮。:noh 清一次就好;可以把 <leader>h 映射成它,日常少烦躁。
记忆法: noh = no highlight,常见 .vimrc 配置。
:noh
nnoremap <leader>h :noh<CR>
"E37: No write since last change"切 buffer 或退出时改动没保存。:w 保存,:e! / :q! 强制丢弃,或者 :set hidden 允许后台 buffer 带未保存改动。
记忆法: E37 = 要么先存要么加 ! 强干。
:w
:q!
:set hidden
"E37: No write since last change" but I already saved!你大概按了 Ctrl+s —— 在很多终端里这是 XOFF(冻结终端),vim 根本没收到这次保存。用 :w,如果终端死了用 Ctrl+q 解冻。
记忆法: Ctrl+s = 冻结终端(XOFF),Ctrl+q = 解冻(XON)。
:w
stty -ixon (disable terminal flow control)
I opened a file with vim but it is read-only要么 vim -R 打开的,要么文件属于 root。变通::w !sudo tee % > /dev/null 通过 sudo 保存;或 :set noreadonly 后 :w! 强存(前提你有权限)。
记忆法: sudo-tee 套路 = 把 buffer 通过 sudo tee 写回文件。
:w !sudo tee % > /dev/null
:set noreadonly | w!
Vim "started in REPLACE mode" / weird overwriting可能按了 Caps Lock + a 或 Insert 键两下进了 replace 模式。Esc + i 回到正常 insert。:set showmode 打开,让你能一眼看到当前模式。
记忆法: 看状态栏,vim 会显示 -- INSERT -- / -- REPLACE -- / -- VISUAL --。
Esc i
:set showmode
Why does dd "yank" instead of just deleting?vim 里的 delete 其实就是剪切 —— 会把内容放进默认寄存器。想"真删不剪"用黑洞寄存器:"_dd。
记忆法: "_ + d = 扔了它,不污染寄存器。
"_dd
"_x
nnoremap <leader>d "_d (map <leader>d to black-hole delete)
Swap file warning: ".file.swp" already exists别的 vim 在改同一个文件,或者上次崩了。按 R 恢复,D 删 swap,Q 退出。确认没别的进程的话,ls -la .file.swp 看完手动删掉。
记忆法: R = 恢复,D = 删 swap,Q = 退出,A = 放弃。
(R)ecover
(D)elete
rm .myfile.swp
给真正在终端里过日子的人写的 vim 速查表。122 条命令,分 11 类: 模式(normal / insert / visual / command / replace),移动(hjkl、 w/b/e、gg/G、0/^/$、按段按句跳、半屏全屏滚、屏内定位、行内 f/F/t/T 找字符、% 跳括号、跳转历史 Ctrl+o/i),编辑(i/a/o/O、 x/r/s、d/c/y + motion、p/P、u/Ctrl+r、神奇的点命令 .、缩进、大 小写切换、合行 J、文本对象 di/da/ci/ca),搜索与替换(/、?、 n/N、* #、:s 和 :%s 加 g/c 标志和行范围),寄存器("ay "ap、系 统剪贴板 "+、X11 PRIMARY 选区 "*、黑洞寄存器 "_、只装 yank 的 0 号寄存器、:reg),标记(ma 'a `a :marks '' :delmarks),分屏 与窗口(:sp :vsp、Ctrl+w h/j/k/l、Ctrl+w =、Ctrl+w + 和 >、 Ctrl+w o 和 q),buffer 与 tab(:ls :b :bn :bp :bd、:tabnew :tabn :tabp),宏(qa、@a、@@、:let @a = …),折叠(zo zc za zR zM zf、foldmethod),以及著名的"怎么退出 vim?"踩坑分类(粘贴变 形 → :set paste;Ctrl+s 冻终端;E37 报错;dd 不是删而是剪带来 的坑和黑洞寄存器解法;swap 文件恢复;莫名进了 replace 模式)。 每条都给命令、中英说明、一行记忆法(让你真的记得住),还有一 两个能直接拷贝的真实例子(每条旁边有复制按钮)。搜索框跨命令 /说明/记忆法/例子四个字段实时过滤 —— 搜"剪贴板"就能命中 "+ 寄存器那条。点分类胶囊一键缩小范围。中英双语,中文是认真写 的不是机翻,纯浏览器跑,不追踪不弹广告。配合 git 速查 / 正则 速查 / docker 速查 / kubectl 速查 一起用,把开发者每周都要 Google 的那点语法都收齐。
把内容粘贴或拖入工具面板。
点击按钮,在浏览器内本地处理,文件不上传。
一键复制结果或下载到本地。
适合穿插在写代码、查问题、做 Review、上线前的小任务里。
这些入口会把当前任务接到更完整的工具链里。
做你这行的人, 还会一起用这些。