Vim 不只是一个“没有鼠标的编辑器”,而是一套围绕文本对象组织起来的编辑语言。这里保留基础按键和速查材料,但重点不是背完快捷键,而是理解 Vim 为什么能把移动、选择、修改和重复组合成稳定动作。

1. 先理解 Vim 的工作方式

Vim 的学习成本主要来自两个地方:它把“移动”和“输入”拆成不同模式,也把一次编辑拆成“动作 + 范围 + 对象”。一旦接受这个模型,很多命令就不再是孤立快捷键,而像一句很短的编辑语句。

对工程工作来说,Vim 的价值不在于替代所有 IDE,而在于三个场景:远程服务器上的快速编辑、终端里的低摩擦修改、以及训练自己用结构化方式思考文本操作。Agent、CI 和远程开发越来越常见以后,能在纯文本环境里稳定完成修改,仍然是很实际的能力。

2. 移动与定位

运动图

/▶ 光标   ▽/▷ 目标

左右动作

╭┈┈┈┈┈┈┈┈┈┈┈┈┈ |      
├┈┈┈┈┈┈┈┈┈┈┈┈┈ 0      $ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮
┆  ╭┈┈┈┈┈┈┈┈┈┈ ^      fe ┈┈┈┈┈┈┈┈╮       ┆
┆  ┆  ╭┈┈┈┈┈┈┈ Fo     te ┈┈┈┈┈┈┈╮┆       ┆
┆  ┆  ┆╭┈┈┈┈┈┈ To     30| ┈┈┈╮  ┆┆       ┆
┆  ┆  ┆┆ ╭┈┈┈┈ ge     w ┈┈┈╮ ┆  ┆┆       ┆
┆  ┆  ┆┆ ┆ ╭┈┈ b      e ┈╮ ┆ ┆  ┆┆       ┆
┆  ┆  ┆┆ ┆ ┆  ╭h      l╮ ┆ ┆ ┆  ┆┆       ┆
▽  ▽  ▽▽ ▽ ▽  ▽▼      ▼▽ ▽ ▽ ▽  ▽▽       ▽
    echo "A cheatsheet from quickReference"

上下动作

                  - SCREEN 1 START
   ╭┈┬┈┈┈┈┈┈┈┈┈▷  #!/usr/bin/python
   ┆ ┆     ╭┈┈┈▷      
   ┆ ┆     ┆      print("Hello")
   ┆ ┆     { } ▶  print("Vim")
   ┆ ┆       ┆    print("!")
   ┆ ┆       └┈▷     
   ┆ ┆ ╭┈┈┈┬┈┈┈▷  print("Welcome")
G gg H M L k j ▶  print("to")
┆        ┆   └┈▷  print("Quick Reference")
┆        ┆        print("/vim")
┆        ┆     
┆        ╰┈┈┈┈┈▷ 
 - SCREEN 1 END
╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈▷  print("SCREEN 2")

动作

快捷方式说明
h / j / k / l方向键
<C-u> / <C-d>上/下半页
<C-b> / <C-f>向上/向下翻页

字 (词)

快捷方式说明
b / w上一个/下一个单词
ge / e上一个/下一个词尾

快捷方式说明
0 (zero) / $行的开始/结束
^行开头 (非空白)

字符串

快捷方式说明
Fe / fe移动到上一个/下一个 e
To / to在上一个/下一个 o 之前/之后移动
| / n|转到第一个/n

文档

快捷方式说明
gg / G第一行/最后一行
:n / nG转到第 n
} / {下一个/上一个空行

窗口

快捷方式说明
H / M / L上/中/下屏幕
zt / zz / zb上/中/下这条线

插入模式

快捷方式说明
i / a在光标之前/之后插入
I / A插入行的开始/结束
o / O (letter)在下方/上方插入新行
s / S删除字符/行并插入
C / cc更改到/当前行的结尾
gi在最后一个插入点插入
Esc / <C-[>退出插入模式

保存和退出

快捷方式说明
:w保存
:q关闭文件
:wq / :x / ZZ保存并退出
:wqa保存并退出所有文件
:q! / ZQ强制退出
:qa关闭所有文件
:qa!强制退出所有文件
:w new.txt写入 new.txt
:sav new.txt保存并编辑 new.txt
:w !sudo tee %写入只读文件

正常模式

快捷方式说明
r替换一个字符
R进入替换模式
u / 3u撤消更改 1/3
U在一行上撤消更改
J加入下一行
<C-r> / 5 <C-r>重做更改 1/5

剪切和粘贴

快捷方式说明
x删除字符 (剪切)
p / P在之后/之前粘贴
xp交换两个字符
D删除到行尾 (剪切)
dw删除单词 (剪切)
dd删除线 (剪切)
ddp交换两条线
yy拉线 (复制)
"*p / "+p从系统剪贴板粘贴
"*y / "+y粘贴到系统剪贴板

在可视化模式下

快捷方式说明
d / x删除选择 (剪切)
s替换选择
yYank 选择 (复制)

重复

快捷方式说明
.重复上一个命令
;重复最新的 ftFT
,重复最新的 ftFT 颠倒
&重复最后一个 :s
@:重复命令行命令

可视化模式

快捷方式说明
v进入可视化模式
V进入视线模式
<C-v>进入可视化阻挡模式
ggVG选择所有文本
> / <向右/向左移动文本

3. 理解 Vim 的编辑语法

动词理解

d  # 表示删除delete
r  # 表示替换replace
c  # 表示修改change
y  # 表示复制yank
v  # 表示选取visual select

动词代表我们打算对文本做什么。先想动作,再想范围,比单纯记快捷键更稳。

名词理解

w  # 表示一个单词word
s  # 表示一个句子sentence
p  # 表示一个段落paragraph
t  # 表示一个 HTML 标签tag

名词代表即将处理的文本对象。引号、括号、段落、句子都可以成为对象;这也是 Vim 比普通快捷键系统更像“语言”的地方。

介词理解

i  # 表示在...之内 inside
a  # 表示环绕... around
t  # 表示到...位置前 to
f  # 表示到...位置上 forward

介词界定待编辑文本的范围或者位置。ia 的区别尤其重要:一个偏内部内容,一个连同边界一起处理。

数词理解

数词指定了待编辑文本对象的数量,从这个角度而言,数词也可以看作是一种介词。引入数词之后,文本编辑命令的语法就升级成了下面这样:

动词 介词/数词 名词

下面是几个例子:

c3w  # 修改三个单词:change three words
d2w  # 删除两个单词:delete two words

另外,数词也可以修饰动词,表示将操作执行 n 次。于是,我们又有了下面的语法:

数词 动词 名词

示例

2dw # 两次删除单词(等价于删除两个单词): twice delete word
3x  # 三次删除字符(等价于删除三个字符): three times delete character

组词为句

有了这些基本元素,就可以构造简单命令。文本编辑命令的基本语法如下:

动词 介词 名词

下面是一些例子

dip # 删除一个段落: delete inside paragraph
vis # 选取一个句子: visual select inside sentence
ciw # 修改一个单词: change inside word
caw # 修改一个单词: change around word
dtx # 删除文本直到字符"x"(不包括字符"x"): delete to x
dfx # 删除文本直到字符"x"(包括字符"x"): delete forward x

4. 使用原则

Vim 的基础不需要一次学完。真正值得先掌握的是能让自己不慌的最小闭环:进入插入模式、回到正常模式、移动、保存、退出、撤销、复制、删除、粘贴。

先用语言理解命令ciw 不是三个随机按键,而是 change inside word。dip 是 delete inside paragraph。能读懂这种结构,比记住更多命令更重要。

先学可逆操作u<C-r>:w:q! 让你敢于试错。不会退出 Vim 只是笑话;不知道如何撤销和放弃修改,才是真的风险。

把 Vim 当远程环境底座:本地可以用更完整的 IDE,但 SSH 进服务器、容器或临时机器时,Vim/Neovim 往往是最稳的编辑入口。

别急着插件化:基础动作不熟时,插件只会增加复杂度。先让移动、文本对象和重复命令进入肌肉记忆,再考虑配置管理和高级功能。

下一步

完成入门后,建议按以下路径继续学习:

  1. Vim 配置管理 — 定制你的编辑器
  2. Vim 高级功能 — 深入了解 Vim 生态
  3. Vim 速查与技巧 — 日常开发常用命令速查

另见

来源:Vim 备忘清单 & vim cheatsheet & Quick Reference;仅学术引用,著作权归作者所有。