跳到主要内容

Vim 速查表:122 条真实命令带记忆法和例子

Vim 速查表,100+ 条命令含模式、移动、编辑、搜索、寄存器、分屏,带记忆法。

  • 本地处理
  • 分类 开发运维
  • 适合 格式化、校验、压缩或检查和代码相关的文本。
205 条命令
模式 (20)
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+v

Visual 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
gi

回到上次离开 insert 模式的位置,并重新进入 insert。

记忆法: g + i = 回到刚才插入的地方继续打。

例子
gi
gv

重新选中上一次的可视选区(范围和模式都一样)。

记忆法: g + v = 把刚才那块选区还给我。

例子
gv
gvd (reselect then delete)
o (in visual)

在可视模式里,把光标跳到选区的另一端,方便从那头继续扩选。

记忆法: o = 选区的另一头。

例子
vjjo (then extend upward)
Ctrl+o (insert)

在 insert 模式里临时执行一条 normal 命令,做完自动回到 insert。

记忆法: Ctrl+o = 插一条 normal 命令,做完就回来。

例子
Ctrl+o $ (jump to line end without leaving insert)
Ctrl+o dd
Ctrl+w (insert)

insert 模式下删掉光标前的一个单词。

记忆法: Ctrl+w = 抹掉前一个词(插入模式)。

例子
Ctrl+w
Ctrl+u (insert)

insert 模式下删掉本行进入插入后输入的全部内容。

记忆法: Ctrl+u = 清掉刚才这行打的字(插入模式)。

例子
Ctrl+u
Ctrl+r (insert)

insert 模式下插入某个寄存器的内容(Ctrl+r 再按寄存器字母)。

记忆法: Ctrl+r(插入模式)= 把寄存器内容读进来。

例子
Ctrl+r "  (paste the unnamed register)
Ctrl+r 0 (paste last yank)
Ctrl+r +  (paste system clipboard)
gJ

把下一行接上来,但中间不加空格(原样拼接)。

记忆法: g + J = Join 但不加空格。

例子
gJ
3gJ
光标移动 (40)
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
+ / -

跳到下一行 / 上一行的第一个非空字符。

记忆法: + 下一行,- 上一行,都落在首个非空字符。

例子
+
-
3+ (down 3 lines to first non-blank)
|

跳到本行的第 N 列(N| 跳到第 N 列)。

记忆法: 竖线 | 是竖的,所以选列。

例子
1| (column 1)
40| (column 40)
g_

跳到本行最后一个非空字符($ 落在最后一个字符,哪怕是空格)。

记忆法: g + _ = 跳到最后一个真正的字符。

例子
g_
dg_ (delete to last non-blank)
gj / gk

按"显示行"上下移动(长行被折行成多屏行时特别有用)。

记忆法: g + j/k = 按屏幕行走,而不是逻辑行。

例子
gj
gk
nnoremap j gj (make j respect wrapping)
gd / gD

跳到光标下标识符的局部(gd)/ 全局(gD)首次定义处(按关键字找,不需要索引)。

记忆法: g + d = go to definition,小写局部、大写全局。

例子
gd
gD
]] / [[

跳到下一个 / 上一个章节,或第 1 列的顶层 {(向前 / 向后)。

记忆法: 双中括号 = 在大段代码之间跳。

例子
]]
[[
[{ / ]}

跳到光标前未配对的 {,或光标后未配对的 },从代码块内部往外跳。

记忆法: [{ 跳到包住你的左括号,]} 跳到右括号。

例子
[{
]}
[( / ])

跳到光标前未配对的 ( 或光标后未配对的 ),和 [{ ]} 一样但针对小括号。

记忆法: 中括号 + 小括号 = 跳到包住你的圆括号。

例子
[(
])
Ctrl+e / Ctrl+y

窗口向下 / 向上滚动一行,光标不动(除非它要被挤出屏幕)。

记忆法: Ctrl+e 视图下移一行,Ctrl+y 上移一行。

例子
Ctrl+e
Ctrl+y
3 Ctrl+e
g; / g,

在改动列表里跳到更早 / 更新的编辑位置。

记忆法: g; 往回翻编辑点,g, 往前翻。

例子
g;
g,
`.

跳到文件里最后一次改动的精确位置(. 标记)。

记忆法: 反引号 + . = 我刚改的那个地方。

例子
`.
'. (same but line-wise)
`^

跳到上次离开 insert 模式时光标所在的位置。

记忆法: `^ = 上次停止插入的标记。

例子
`^
iw / aw

单词文本对象:iw = 词本身(不含空格),aw = 词加一个相邻空格。配合操作符使用。

记忆法: i = 内部,a = 含外围(a 还会吞一个空格)。

例子
diw
daw
viw (select inner word)
ciw
ip / ap

段落文本对象:ip = 段落本身,ap = 段落加后面的空行。

记忆法: ip = 段内,ap = 含外围空行。

例子
dap
vip
yap
it / at

HTML/XML 标签文本对象:it = 标签内部,at = 含 <…> 与 </…> 的整对标签。

记忆法: it = 标签内,at = 含标签本身。

例子
dit
cit
dat
vat
编辑 (36)
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)
xp

把当前字符和后一个字符对调(删一个再粘到后面)。

记忆法: x 删一个,p 粘到后面,正好对调。

例子
xp (turn "teh" into "the" with cursor on e)
ddp

把当前行和下一行对调(删本行,粘到下面)。

记忆法: dd 剪掉本行,p 粘到下面,等于把行往下挪。

例子
ddp
ddkP (move line up)
Ctrl+a / Ctrl+x

把光标处或之后的数字加一 / 减一。

记忆法: Ctrl+a = add 加,Ctrl+x = 减。

例子
Ctrl+a
10 Ctrl+a (add 10)
Ctrl+x
g Ctrl+a

在一列数字的可视块上,生成递增序列(1、2、3…)。

记忆法: g + Ctrl+a 作用在选区上 = 阶梯式递增。

例子
Ctrl+v 4j g Ctrl+a (number 5 lines 1..5)
gp / gP

像 p / P 一样粘贴,但光标停在粘贴内容之后(适合连续粘贴)。

记忆法: g + p = 粘完光标走到末尾。

例子
gp
gP
]p

粘贴并把粘进来的行缩进对齐到当前行(在不同缩进层级间挪代码很顺手)。

记忆法: ]p = 粘贴并自动对齐缩进。

例子
]p
[p (paste above with indent fix)
o<Esc>

在下面开一空行并立刻退出插入,快速加空行。

记忆法: o 开行、Esc 退出,留下一个空行。

例子
o<Esc>
O<Esc> (blank line above)
cis / cas

改写当前句子的内部 / 含外围(替换光标所在那一句)。

记忆法: c + i/a + s = 改写句子。

例子
cis
das (delete a sentence)
yi( / ya{

复制小括号内部 / 大括号含外围的内容。

记忆法: y + i/a + 括号 = 复制括号里的东西。

例子
yi(
ya{
yi[ (yank inside square brackets)
g~<motion>

对 motion 范围切换大小写(g~~ 切整行)。

记忆法: g + ~ = 对一段范围切换大小写。

例子
g~w (toggle a word)
g~~
g~$
=<motion>

按当前缩进规则自动缩进 motion 范围(== 缩当前行)。

记忆法: = 表示"把缩进弄对"。

例子
==
=ap (reindent a paragraph)
gg=G (reindent whole file)
Ctrl+v $ A

块选到每行行尾,再用 A 给所有选中行同时追加相同文本。

记忆法: 块选 + $ + A = 一次给多行行尾追加。

例子
Ctrl+v 3j $ A; Esc (add ; to 4 line ends)
搜索与替换 (18)
/<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)
gn

把上次搜索的下一个匹配选成可视选区(配合操作符好用:cgn 直接改它)。

记忆法: gn = 跳到下个匹配并选中它。

例子
cgn (change next match, then . to repeat)
dgn
:g/pat/d

global 命令:删除所有匹配该模式的行。经典的"删掉所有含 X 的行"。

记忆法: :g = 对每个匹配行执行命令,这里 d = 删除。

例子
:g/TODO/d
:g/^\s*$/d (delete blank lines)
:v/pat/d

反向 global:删除所有不匹配的行(只留下匹配的行)。

记忆法: :v = :g!,对不匹配的行操作。

例子
:v/keep/d
:g!/error/d
:g/pat/normal @a

在每个匹配行上跑一个宏(或任意 normal 命令)。

记忆法: :g + normal = 在匹配行批量执行 normal 命令。

例子
:g/^func/normal @a
:g/foo/normal A;
:%s//new/g

替换时把模式留空,直接复用上一次的搜索模式。

记忆法: :s 模式留空 = 用刚才的 /搜索。

例子
/foo  then  :%s//bar/g
:s/.../\=expr/

用 \= 让替换文本变成一个 vim 表达式求值(比如对匹配做算术)。

记忆法: \= 让替换变成"算出来再填"。

例子
:s/\d\+/\=submatch(0)+1/ (add 1 to the number)
\v (very magic)

在模式开头加 \v 进入 very magic,大多数字符都当特殊符,正则更接近 PCRE,少打反斜杠。

记忆法: \v = very magic,当成正常正则用。

例子
/\v(foo|bar)
:%s/\v(\w+)\s+\1/\1/g (collapse doubled words)
:sort / :sort u

对范围内(或全文)的行排序。加 u 去重,n 按数字,! 倒序。

记忆法: sort = 排序;u 去重、n 数字、! 倒序。

例子
:sort
:sort u
:sort n
:%sort! (reverse sort all)
寄存器 (13)
"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
"A y<motion>

yank 并追加到寄存器 a(大写寄存器 = 追加而非覆盖)。攒多行内容很好用。

记忆法: 大写寄存器字母 = 往里追加。

例子
"Ayy (append this line to register a)
"Add
". p

从 "." 寄存器粘贴,也就是你最近一次在 insert 模式输入的文本。

记忆法: . 寄存器 = 我刚打的那段字。

例子
".p
"% p

粘贴 "%" 寄存器,里面是当前文件名(相对路径)。

记忆法: % 寄存器 = 当前文件名(和 :命令里的 % 一致)。

例子
"%p
:put % (put filename on a new line)
": p

粘贴 ":" 寄存器,里面是你上一条 Ex 命令,方便回头改命令。

记忆法: : 寄存器 = 上一条 : 命令。

例子
":p
@: (re-run the last Ex command)
Ctrl+r Ctrl+w (cmdline)

在命令行或搜索提示里,把光标下的单词拉进来(Ctrl+r Ctrl+a 拉 WORD)。

记忆法: Ctrl+r Ctrl+w = 把光标处的词读进命令行。

例子
:s/<Ctrl+r Ctrl+w>/new/
/<Ctrl+r Ctrl+w>
:put <reg>

把寄存器内容放到光标下一行(始终按行粘,哪怕寄存器是字符型)。

记忆法: :put = 把寄存器内容单独放一行。

例子
:put a
:put + (paste clipboard line-wise)
:0put a (put at top of file)
标记 (10)
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!
'< / '>

上一次可视选区的开始 / 结束位置,会自动打上这两个标记。

记忆法: '< 和 '> 是可视选区的两端(:'<,'> 就用它们)。

例子
'<
'>
:'<,'>s/foo/bar/g
'[ / ']

最近一次被改动或 yank 的文本的首 / 末位置(反引号则是精确位置)。

记忆法: '[ '] 框住最近改动 / yank 的范围。

例子
'[
']
`[v`] (reselect last pasted text)
``

跳回最近一次跳转前的精确位置(带列号,是 '' 行跳的精确版)。

记忆法: 两个反引号 = 弹回精确位置。

例子
``
'"

跳到上次关闭这个文件时光标所在的位置(从 viminfo/shada 恢复)。

记忆法: '" = 回到上次离开这个文件的地方。

例子
'"
au BufReadPost * normal! `" (auto-restore on open)
分屏 (15)
: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
Ctrl+w s / Ctrl+w v

把当前窗口横向(s)/ 纵向(v)分屏,等同 :sp / :vsp 的窗口前缀版。

记忆法: Ctrl+w 再 s = 分屏,v = 纵向分。

例子
Ctrl+w s
Ctrl+w v
Ctrl+w H/J/K/L

把当前窗口挪到布局的最左 / 最下 / 最上 / 最右(重排分屏)。

记忆法: Ctrl+w + 大写 HJKL = 把整个窗口推到那个方向。

例子
Ctrl+w H (move window to far left)
Ctrl+w L
Ctrl+w r

在当前行 / 列里轮换窗口位置(交换位置)。

记忆法: Ctrl+w r = rotate,轮换窗口。

例子
Ctrl+w r
Ctrl+w R (rotate the other way)
Ctrl+w T

把当前窗口移到一个新 tab 里。

记忆法: Ctrl+w T = 把这个窗口扔到新 Tab。

例子
Ctrl+w T
Ctrl+w _ / Ctrl+w |

把当前窗口高度(_)或宽度(|)最大化。

记忆法: _ 横杠 = 高度拉满;| 竖杠 = 宽度拉满。

例子
Ctrl+w _
Ctrl+w |
Ctrl+w p

跳到上一个聚焦过的窗口(在两个窗口间来回切)。

记忆法: Ctrl+w p = previous,上一个窗口。

例子
Ctrl+w p
Buffer / Tab (14)
: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)
Ctrl+^

切到 alternate buffer,也就是你来这个文件之前打开的那个文件。两个文件间极速来回。

记忆法: Ctrl+^ = 弹回另一个文件(# buffer)。

例子
Ctrl+^
:b#
:bufdo <cmd>

在每个打开的 buffer 上执行一条 Ex 命令(比如对所有文件做替换)。

记忆法: bufdo = 对每个 buffer 都做一遍。

例子
:bufdo %s/foo/bar/ge | update
:bufdo set ff=unix
:windo <cmd>

在当前 tab 的每个窗口上执行一条 Ex 命令。

记忆法: windo = 对每个窗口都做一遍。

例子
:windo set scrollbind
:windo diffthis
:tabdo <cmd>

在每个 tab 页上执行一条 Ex 命令。

记忆法: tabdo = 对每个 tab 都做一遍。

例子
:tabdo windo set nu
:bufdo bd / :%bd

一次关掉所有 buffer。:%bd 之后再 Ctrl+^ Ctrl+w o,是常见的"只留当前文件"组合。

记忆法: %bd = 删掉所有 buffer(% 范围覆盖全部)。

例子
:%bd
:%bd | e# (keep current, close rest)
:sb <num|name>

在新分屏里打开某个 buffer,而不是替换当前窗口。

记忆法: sb = split + buffer,分屏打开。

例子
:sb 3
:vert sb main.ts (vertical split buffer)
(8)
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>"
qA (append to macro)

录到大写寄存器,会把新动作追加到已有宏后面,而不是覆盖。

记忆法: 大写 q 寄存器 = 接着往宏后面录。

例子
qA (append to macro a)
qA...q
Q (replay last @)

在较新的 vim/neovim 里,Q 重放上次用过的寄存器宏(类似 @@)。旧的 Ex 模式含义已被改掉。

记忆法: Q = 重放上一个宏(较新默认)。

例子
Q
:normal @a (over range)

一次性把宏应用到一段行上(不用数重复次数)。

记忆法: :<范围>normal @a = 对范围内每行跑一遍宏 a。

例子
:5,20normal @a
:'<,'>normal @a
:let @A .= "..."

在命令行往寄存器追加内容(.= 是拼接),用来微调录好的宏。

记忆法: .= 拼接;@A 是寄存器 a 的追加写法。

例子
:let @a .= "j"
:let @q = "0" . @q
折叠 (12)
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)
zd / zE

删除光标下的折叠(zd)/ 清掉 buffer 里所有折叠(zE)。仅对手动折叠有效。

记忆法: zd = 删一个折叠,zE = 清掉全部折叠。

例子
zd
zE
zj / zk

跳到下一个折叠的开头(zj)/ 上一个折叠的结尾(zk)。

记忆法: z + j/k = 在折叠之间移动,方向感和 j/k 一致。

例子
zj
zk
zr / zm

zr 把折叠级别减一(多展开一层),zm 加一(多合上一层)。

记忆法: zr = reduce 少折一层,zm = more 多折一层。

例子
zr
zm
zv

只展开到能看见光标所在行所需的那几层折叠。

记忆法: zv = view,刚好露出光标行。

例子
zv
zi

对整个 buffer 开 / 关折叠功能(切换 foldenable)。

记忆法: zi = invert,整体开关折叠。

例子
zi
退出 vim / 常见坑 (19)
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 indentation

vim 会对你打字的内容自动缩进,从系统粘代码进来就会缩进套娃。粘之前 :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
I hit Ctrl+s and the whole terminal froze

Ctrl+s 发的是 XOFF,会冻结终端输出(vim 看着死了其实没事)。按 Ctrl+q(XON)解冻。在 shell rc 里加 stty -ixon 可以彻底关掉这个行为。

记忆法: Ctrl+s 冻结(XOFF),Ctrl+q 解冻(XON)。

例子
Ctrl+q
stty -ixon
I typed :W or :Q and got "E492: Not an editor command"

Shift 按久了,:W 和 :Q 不是命令。用小写 :w 和 :q。很多人会在 vimrc 里加 command! W w 和 command! Q q 来兜底这个手滑。

记忆法: 命令是小写::w :q :wq,不是 :W :Q。

例子
:w
:q
command! W w
My arrow keys insert letters like A B C D

终端模式不对(或 vi 兼容模式)会把方向键发成原始转义码。确认 vimrc 里有 set nocompatible,并尽量用真正的 vim 而不是裸 vi。

记忆法: set nocompatible 能修掉大多数"方向键打出字母"的怪事。

例子
set nocompatible
(or just use hjkl 😄)
I pasted code and indentation exploded into a staircase

autoindent 会在上一行基础上再缩进每一行粘进来的代码,越缩越深。先 :set paste,粘完 :set nopaste。或者直接用系统剪贴板 "+p,它按原样粘不触发这个问题。

记忆法: 粘前 :set paste,或直接用 "+p 原样粘。

例子
:set paste
"+p
:set nopaste
I want to undo ALL my changes since opening the file

用 :e! 从磁盘重新读取文件,丢掉所有未保存的改动。(u 一次只退一步,:e! 直接回到已保存的版本。)

记忆法: :e! = 重新打开,丢掉未保存改动。

例子
:e!
:edit!
How do I see line numbers / relative line numbers?

:set number 显示绝对行号,:set relativenumber 显示相对光标的距离(一眼看出 5j / 12k 要走几行)。两个一起开就是混合行号。

记忆法: number = 绝对,relativenumber = 相对距离。

例子
:set number
:set relativenumber
:set nu rnu
I selected text but Ctrl+c / Ctrl+v does not copy to other apps

vim 有自己的寄存器,系统剪贴板是 + 寄存器。用 "+y(整行 "+yy)复制再去别处粘;从外面粘进 vim 用 "+p。需要 vim 带 +clipboard(:version 里查)。

记忆法: 系统剪贴板 = "+ 寄存器,不是默认寄存器。

例子
"+yy
"+p
:version (look for +clipboard)
My search is case-sensitive (or annoyingly case-insensitive)

:set ignorecase 让搜索忽略大小写,再加 :set smartcase,查询里出现大写就自动区分大小写。临时控制可在模式后加 \c(忽略)或 \C(区分)。

记忆法: ignorecase + smartcase 是黄金组合;\c / \C 单次覆盖。

例子
:set ignorecase smartcase
/Foo\C
/foo\c
I keep landing in Ex mode with a colon prompt that will not leave

你按了 Q(旧绑定)进了 Ex 模式。输入 visual 回车(或 :vi)回到 normal 模式。很多配置会重映射 Q 来避开这个坑。

记忆法: 逃离 Ex 模式:输入 :vi(或 visual)回车。

例子
:vi
visual<CR>

这个工具能做什么

给真正在终端里过日子的人写的 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 的那点语法都收齐。

工具细节

输入
文本
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 预览
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
浏览器本地处理
主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
保存 / 分享
免账号使用
打开页面即可使用;刷新后是否保留结果取决于具体工具。
性能预算
首屏 JS ≤ 25 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
开发运维 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

Vim 速查表 适合怎么用

适合穿插在写代码、查问题、做 Review、上线前的小任务里。

适合开发场景

  • 格式化、校验、压缩或检查和代码相关的文本。
  • 把片段整理好再放进文档、工单、提交或交接材料。
  • 不切换工具,快速检查一个小 payload。

开发检查项

  • 压缩、混淆这类不可逆处理,先对副本操作。
  • 除非确认工具本地处理,不要粘贴密钥和敏感片段。
  • 转换后的代码上线前,仍要跑自己的测试或 lint。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 SQL 速查表 SQL 速查表,100+ 条覆盖 SELECT、JOIN、窗口函数、索引,含 MySQL/PostgreSQL/SQLite 方言差异。 打开
  2. 2 Git 命令速查 Git 命令速查:可搜可分类,每条带说明、常见坑、真实例子。 打开
  3. 3 Docker 命令速查 Docker 命令速查,80+ 条命令带真实例子和常见坑,含 Compose 章节。 打开

真实使用场景

  • 第一次 SSH 上服务器,git 直接把你扔进 vim 写提交信息

    你敲了 git commit 没带 -m,现在一个空 buffer 隔着 SSH 盯着你。按 i 打一行信息,Esc,再 :wq 回车就完事。要是想取消,:q! 一退 git 就把这次提交也撤了。在本表里搜「退出 vim」还能顺手记下 ZZ 和 ZQ,这两个键能省掉你后半夜回来翻表的次数。

  • 改服务器上的 nginx 或 systemd 配置,系统自带 vim 没有剪贴板支持

    你 SSH 上机器打开 /etc/nginx/nginx.conf,按 "+y 却毫无反应,因为系统自带 vim 是 -clipboard 编译的。筛到「寄存器」分类,用 yy 复制到无名寄存器,移动光标,再 p。想把一段配置弄回笔记本,先用 V 行选再 yank,靠终端鼠标选中复制兜底。本表剪贴板那条把 +clipboard 检查和 OSC-52 备用方案都讲清楚了。

  • 评审让你把一个变量名在 40 行里全改掉

    别手动改 40 次。用 /oldName 跳到第一处,cw 改掉打 newName,Esc。后面每碰到一处按一下 . 就重放整次修改。想一把梭,:%s/oldName/newName/gc 全文替换,c 标志会在这 40 处逐个问你 y/n,绝不会误伤你本想留下的子串。

  • 录个宏把 200 行日志做同样的批量手术

    每行都要去掉时间戳再补个逗号。先录一遍:qa,在第一行做完编辑,q 停。然后 199@a 一口气往下重放整个文件。在本表搜「宏」能拿到 qa / @a / @@ 和 :let @a 改宏的技巧(某一键录错了不用重录),比手动改 200 次快太多。

常见踩坑

  • 改了没存就按 :q,看到「E37」就慌,那不是你弄坏了,加个 ! 写成 :q! 丢弃,或用 :wq 存了再退。

  • 从浏览器粘代码前忘了 :set paste,自动缩进把每行越推越右;粘前 :set paste,粘完 :set nopaste。

  • 以为 "+y 到处都能用,先跑 vim --version | grep clipboard 查;-clipboard 那版会悄无声息地什么都不干,复制就白做了。

隐私说明

这份速查表是纯静态参考,完全在你浏览器里跑。你搜什么、筛哪个分类都不会离开本页,没有后端请求,不记录你查了什么,也不会写进 URL。页面加载完后断网也能继续看。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-07-02