全部速查表

Vim 命令速查

Vim / Neovim 快速参考:模式、光标移动、编辑、搜索替换、多文件导航、寄存器 / 宏、列编辑(Visual Block),并附带常用动作的简短示例。

37 条命令

模式与保存

:w / :q / :wq / :q!

保存、退出、保存并退出、强制退出不保存。

:w file 另存为;:w! 强制;:x 修改过则保存并退出;:qa! 强制退出全部;:wqa

:w | :q 或 ZZ
i / a / o / I / A / O

进入插入模式:i 在光标前 / a 在光标后;o / O 在下 / 上方开新行;I/A 行首 / 行尾。

i 在此编辑 => o 新行并进入插入 => I 行首 => A 行尾
<Esc> / Ctrl-[

返回普通模式(也可用 Ctrl-c / Ctrl-[)。同时取消未完成的算符。

i Hello<Esc> ; 再 :w

光标移动

h / j / k / l

向左 / 下 / 上 / 右移动一个字符。(方向键也可以。)

5j — 向下移动 5 行
w / b / e / W / B / E

按“词”移动(标点与空白分别分隔);W/B/E 以空白作为分隔。

wdw ; 3W 跳到第三个空白分隔词
0 / $ / ^

硬行首 / 行尾 / 第一个非空字符。

0 到行首;$ 到行尾;^ 到首个非空字符
gg / G / :N

首行 / 末行 / 跳转到第 N 行。也支持百分比定位:50%。

gg=G 格式化整个文件(配合 =)
H / M / L / Ctrl-d / Ctrl-u

屏幕顶部 / 中部 / 底部(H/M/L);向下 / 向上翻半页(Ctrl-d / Ctrl-u)。

Ctrl-d 和 Ctrl-u 浏览;10Ctrl-f 向前翻一整页
{ / } / ( / )

按段落(大括号)或句子(小括号,纯 ASCII 文本)跳转。

5{ ; 2} 向前跳两段
f<char> / F<char> / t / T ; ; / ,

在本行查找 / 反向查找下一个字符(f/F);用 ; / , 重复。t/T 停在字符之前。

f, 把光标带到下一个逗号;df, 删除到下一个逗号为止

插入模式

Ctrl-h / Ctrl-w / Ctrl-u

在输入时退格 / 删除一个词 / 删除到行首——让编程用 Vim 更顺手。

i hello world<Ctrl-w> 剩下 'hello '
Ctrl-o <cmd> / Ctrl-r <reg>

执行一次普通模式命令(Ctrl-o);在插入模式粘贴寄存器(Ctrl-r)。

Ctrl-r = expr 临时计算一个表达式

Ctrl-r " 无名寄存器;Ctrl-r 0 yank 寄存器;Ctrl-r =5+5 插入 10

编辑算符

d / x / X / c

删除 / 删除光标处字符 / 退格删除 / 修改(删除并进入插入)。可与动作组合:dw/xp/c$。

dd 删除整行;cc 修改整行;D 删除到行尾;C 修改到行尾

dw | dw$ | dw | 3dd | C 重排当前行
y / yy / Y

复制(yank)。yy / Y 复制当前行;y$ / yW 等接受一个动作。

y2w yy p gp — 复制 2 个词与一行,粘贴,再次粘贴(光标不移动)
p / P / gp / gP

在光标后(p) / 前(P)粘贴;gp/gP 让光标停留在粘贴内容的末尾。

p 粘贴到下方;P 粘贴到上方;gp 粘贴到后面且光标到末尾
u / Ctrl-r / U

撤销 / 重做(Ctrl-r)。U 恢复当前行为初始状态(已不推荐,可用重复计数代替)。

u u u ; Ctrl-r Ctrl-r ; 5u 撤销最近 5 次修改
. / @: / q:

重复上一次编辑(.)——极为强大。@: 重复最近一条宏;q: 打开命令历史窗口。

i Monday<Esc> ; 再用 . . . . 跨多行重复
r / R / J / gq

替换单个字符(r<char>)/ 进入替换模式(R)/ 合并行(J,gJ 不加空格)/ 格式化(gq{motion})。

raZ 改一个字符;J 合并行;gqap 格式化当前段落

缩进

>> / << / = / :set autoindent

缩进 / 反缩进 / 自动缩进(=)。可与动作组合:=G 到结尾;gg=G 格式化整文件。

5>> 缩进 5 行;=ap 自动缩进段落;gg=G 格式化整个缓冲区

搜索与替换

/pat / ?pat / n / N

向下(/)/ 向上(?)搜索;n / N 在同方向 / 反方向重复。

/\<word\> 词边界;\v very-magic 正则;\c 忽略大小写;\C 区分大小写

/TODO\c ; n 下一个;N 上一个;* / # 搜索光标下的词
* / # / g* / g#

搜索光标下的词:* 向下(# 向上)。g* / g# 包含相邻边界。

光标停在 foo 上按 * — 跳到下一个 foo,n 继续
:%s/pat/rep/g / :5,12s/foo/bar/g

替换——可指定范围、标志、按匹配确认。

%s / g 全局;/c 逐个确认;/i 忽略大小写;/I 区分大小写;/e 不报错;/n 仅计数

:%s/\bfoo\b/bar/gc — 把整词 foo 替换为 bar,每处确认
:g/pat/d / :v/pat/m$

对匹配行执行动作::g/pat/d 删除匹配行;:v/pat/m$ 把非匹配行移到末尾。

:v/^#\|^$/d 删除所有只包含注释/空行的行

缓冲区、标签页、窗口

:e file / :b<N> / :bn :bp :ls

打开另一文件(:e),列出缓冲区(`:ls`),按编号跳转(`:b 3`),下一个/上一个(`:bn` / `:bp`)。

:e . 文件浏览器;:bd 删除当前缓冲区;:bn! 强制;hidden

:e src/index.ts :ls :b 3 :bp :bn
:sp :vs / Ctrl-w j/k/h/l

水平 / 垂直分屏;Ctrl-w + 方向 在窗口间移动。

:vs src/index.ts | Ctrl-w l | Ctrl-w j — 在相邻窗格中工作
:tabnew / gt / gT / :tabclose

把每个任务放在独立“屏”中时使用标签页。

:tabnew README.md gt gT :tabclose :tabonly

视图与设置

:set nu / :set relativenumber

切换行号显示;`relativenumber` 显示到光标的距离(配合动作很顺手)。

:set relativenumber && 5j 让你在脑中数得清
:set syntax on / :set filetype=ts

开启语法高亮 / 为无后缀文件强制指定文件类型。

:set ft=markdown ; :set bg=dark 切换深色背景
:set paste / :set wrap / :set hlsearch

粘贴相关开关:paste 避免插入模式自动缩进;hlsearch 保留搜索高亮。

:noh 临时清除高亮

:set paste 后在某些终端里 i<Ctrl-r>+ 粘贴

可视模式与列编辑

v / V / Ctrl-v

字符可视 / 行可视 / 块可视——块模式可以按列编辑。

v 下按 o 切换选区端点

Ctrl-v 5j I // Esc — 给 6 行加上 // 前缀(经典的注释/反注释)
gv / o (in visual)

重新选中上一次的选区;`o` 切换选区活动端点。

做一次块选区,修改内容,再用 . 重复同样的修改

寄存器与宏

"ayy / "ap / :reg

用命名寄存器 a 复制,然后从 a 粘贴。:reg 列出全部寄存器。

"0 最近 yank;"_ 黑洞寄存器;"+ 系统剪贴板(需要 +clipboard)

"ayy "ap ; :reg 列出命名寄存器与 0、+、*
q<reg> ... q / @<reg> / @@

把一段操作录到寄存器 <reg>;@<reg> 回放;@@ 重复上一次的宏。

qa I" <Esc> $ " <Esc> q 5j @a — 在多行末尾加引号

外部交互

:!cmd / :r !cmd

在 Vim 内执行 shell 命令;:r !cmd 把命令输出插入到当前光标处。

:r !date ; :!%:clean :r ...
:r file / :source file.vim

把文件内容读到光标位置;:source 执行一段 Vim 脚本(.vimrc、插件文件)。

:r ~/.vimrc 把整份配置粘贴进来;:runtime! syntax/foo.vim
:help <topic>

Vim 的离线文档质量很高。`Ctrl-]` 跳转到光标下的标签。

:help gq :help motion.txt :help :terminal — 开启内置终端(8.0+)
:terminal

打开内置终端(Vim 8+ / Neovim)。

:vert terminal 垂直分屏;:term bash;Ctrl-w N 退出终端模式

:vert term bash :resize 15 && 实时跑测试

速查页版本 1.0.0

适用于 Vim 9 / Neovim 0.9+