为什么要学 Vim
Vim 快捷键记不住是每个初学者的痛点。但一旦掌握,你会发现:
- 无需离开键盘:双手始终在主键区,编辑效率极高
- 无处不在:服务器、VS Code、JetBrains IDE 都支持 Vim 模式
- 一次学习,终身受益:Vim 的设计哲学 40 年不变
这篇文章整理了最常用的快捷键,按使用场景分类,方便查阅。
模式切换
Vim 有多种模式,这是它与其他编辑器最大的不同:
| 快捷键 | 说明 |
|---|
Esc | 返回 Normal 模式(最常用) |
i | 在光标前插入(Insert) |
a | 在光标后插入(Append) |
I | 在行首插入 |
A | 在行尾插入 |
o | 在下方新建一行并插入 |
O | 在上方新建一行并插入 |
v | 进入 Visual 模式(字符选择) |
V | 进入 Visual Line 模式(行选择) |
Ctrl + v | 进入 Visual Block 模式(块选择) |
: | 进入命令模式 |
光标移动
基础移动
| 快捷键 | 说明 |
|---|
h | 左移一个字符 |
j | 下移一行 |
k | 上移一行 |
l | 右移一个字符 |
记忆技巧:j 像一个向下的箭头,k 像一个向上的支架
单词级移动
| 快捷键 | 说明 |
|---|
w | 跳到下一个单词开头(word) |
W | 跳到下一个空格分隔的单词开头 |
b | 跳到上一个单词开头(back) |
B | 跳到上一个空格分隔的单词开头 |
e | 跳到当前/下一个单词结尾(end) |
E | 跳到空格分隔的单词结尾 |
行内移动
| 快捷键 | 说明 |
|---|
0 | 跳到行首 |
^ | 跳到行首第一个非空字符 |
$ | 跳到行尾 |
f + 字符 | 向右跳到指定字符(find) |
F + 字符 | 向左跳到指定字符 |
t + 字符 | 跳到指定字符前一个位置(till) |
T + 字符 | 向左跳到指定字符后一个位置 |
; | 重复上一次 f/F/t/T |
, | 反向重复上一次 f/F/t/T |
屏幕/文件级移动
| 快捷键 | 说明 |
|---|
gg | 跳到文件开头 |
G | 跳到文件末尾 |
数字 + G | 跳到第 n 行,如 50G 跳到第 50 行 |
: + 数字 | 跳到第 n 行(命令模式),如 :50 |
Ctrl + f | 向下翻页(forward) |
Ctrl + b | 向上翻页(backward) |
Ctrl + d | 向下翻半页(down) |
Ctrl + u | 向上翻半页(up) |
H | 跳到屏幕顶部(High) |
M | 跳到屏幕中间(Middle) |
L | 跳到屏幕底部(Low) |
zz | 将当前行移到屏幕中央 |
zt | 将当前行移到屏幕顶部 |
zb | 将当前行移到屏幕底部 |
编辑操作
删除
| 快捷键 | 说明 |
|---|
x | 删除光标下的字符 |
X | 删除光标前的字符 |
dd | 删除整行 |
D | 删除到行尾 |
dw | 删除到下一个单词开头 |
de | 删除到单词结尾 |
db | 删除到单词开头 |
d$ | 删除到行尾 |
d0 | 删除到行首 |
dgg | 删除到文件开头 |
dG | 删除到文件末尾 |
数字 + dd | 删除多行,如 3dd 删除 3 行 |
修改(删除并进入插入模式)
| 快捷键 | 说明 |
|---|
cc | 修改整行 |
C | 修改到行尾 |
cw | 修改到单词结尾 |
ciw | 修改整个单词(change inner word) |
ci" | 修改双引号内的内容 |
ci' | 修改单引号内的内容 |
ci( | 修改括号内的内容 |
ci[ | 修改方括号内的内容 |
cit | 修改 HTML 标签内的内容 |
s | 删除字符并进入插入模式 |
S | 删除整行并进入插入模式 |
复制与粘贴
| 快捷键 | 说明 |
|---|
yy | 复制整行(yank) |
Y | 复制整行 |
yw | 复制到下一个单词开头 |
yiw | 复制整个单词 |
y$ | 复制到行尾 |
p | 在光标后粘贴(paste) |
P | 在光标前粘贴 |
"0p | 粘贴最近复制的内容(不是删除的) |
"+y | 复制到系统剪贴板 |
"+p | 从系统剪贴板粘贴 |
撤销与重做
| 快捷键 | 说明 |
|---|
u | 撤销(undo) |
Ctrl + r | 重做(redo) |
. | 重复上一次操作 |
其他编辑
| 快捷键 | 说明 |
|---|
r + 字符 | 替换当前字符为指定字符 |
R | 进入替换模式 |
~ | 切换大小写 |
>> | 向右缩进 |
<< | 向左缩进 |
== | 自动缩进当前行 |
J | 合并当前行和下一行 |
搜索与替换
搜索
| 快捷键 | 说明 |
|---|
/ + 关键词 | 向下搜索 |
? + 关键词 | 向上搜索 |
n | 跳到下一个匹配 |
N | 跳到上一个匹配 |
* | 搜索光标下的单词(向下) |
# | 搜索光标下的单词(向上) |
:noh | 清除搜索高亮 |
替换
| 快捷键 | 说明 |
|---|
:s/old/new | 替换当前行第一个匹配 |
:s/old/new/g | 替换当前行所有匹配 |
:%s/old/new/g | 替换整个文件所有匹配 |
:%s/old/new/gc | 替换整个文件,每次询问确认 |
文本对象(Text Objects)
Vim 的强大之处在于可以组合操作符和文本对象:
常用操作符
| 操作符 | 说明 |
|---|
d | 删除(delete) |
c | 修改(change) |
y | 复制(yank) |
v | 选择(visual) |
> | 右缩进 |
< | 左缩进 |
常用文本对象
| 文本对象 | 说明 |
|---|
iw | inner word(单词内部) |
aw | a word(单词 + 周围空格) |
is | inner sentence |
as | a sentence |
ip | inner paragraph |
ap | a paragraph |
i" | 双引号内部 |
a" | 双引号及引号 |
i' | 单引号内部 |
i( 或 ib | 括号内部 |
a( 或 ab | 括号及括号 |
iB | 花括号内部 |
i[ | 方括号内部 |
it | HTML 标签内部 |
at | HTML 标签及标签 |
组合示例
| 命令 | 说明 |
|---|
diw | 删除整个单词 |
daw | 删除单词及周围空格 |
ci" | 修改双引号内的内容 |
da( | 删除括号及内容 |
yap | 复制整个段落 |
>ip | 缩进段落 |
vit | 选中 HTML 标签内容 |
窗口与标签页
窗口分割
| 快捷键 | 说明 |
|---|
:sp 或 Ctrl + w s | 水平分割 |
:vsp 或 Ctrl + w v | 垂直分割 |
Ctrl + w h/j/k/l | 在窗口间移动 |
Ctrl + w H/J/K/L | 移动窗口位置 |
Ctrl + w = | 均分窗口大小 |
Ctrl + w _ | 最大化当前窗口高度 |
Ctrl + w q | 关闭当前窗口 |
Ctrl + w o | 只保留当前窗口 |
标签页
| 快捷键 | 说明 |
|---|
:tabnew | 新建标签页 |
:tabc | 关闭标签页 |
gt | 下一个标签页 |
gT | 上一个标签页 |
数字 + gt | 跳到第 n 个标签页,如 2gt |
文件操作
| 快捷键 | 说明 |
|---|
:w | 保存 |
:w 文件名 | 另存为 |
:q | 退出 |
:q! | 强制退出(不保存) |
:wq 或 :x | 保存并退出 |
ZZ | 保存并退出 |
ZQ | 强制退出 |
:e 文件名 | 打开文件 |
:e! | 放弃修改,重新加载 |
:bn | 下一个 buffer |
:bp | 上一个 buffer |
:bd | 关闭 buffer |
:ls | 列出所有 buffer |
宏(Macros)
| 快捷键 | 说明 |
|---|
q + 字母 | 开始录制宏到寄存器(如 qa) |
q | 停止录制 |
@ + 字母 | 播放宏(如 @a) |
@@ | 重复上一次宏 |
数字 + @ + 字母 | 播放宏 n 次,如 10@a |
宏的使用示例
12345
qa # 开始录制到寄存器 a
I// <Esc> # 在行首添加注释
j # 移动到下一行
q # 停止录制
10@a # 对接下来 10 行执行同样的操作
标记(Marks)
| 快捷键 | 说明 |
|---|
m + 小写字母 | 设置本地标记(如 ma) |
m + 大写字母 | 设置全局标记(跨文件,如 mA) |
' + 标记 | 跳到标记所在行(如 'a) |
` + 标记 | 跳到标记精确位置 |
:marks | 列出所有标记 |
`. | 跳到上次修改位置 |
'' | 跳到上次跳转前的位置 |
实用技巧
数字前缀
几乎所有命令都可以加数字前缀来重复:
| 命令 | 说明 |
|---|
5j | 向下移动 5 行 |
3dd | 删除 3 行 |
10yy | 复制 10 行 |
2dw | 删除 2 个单词 |
50G | 跳到第 50 行 |
常用组合
| 命令 | 说明 |
|---|
ddp | 交换当前行和下一行 |
xp | 交换两个字符 |
yyp | 复制当前行到下一行 |
ea | 在单词末尾追加 |
bi | 在单词开头插入 |
ggVG | 全选 |
gg=G | 全文自动缩进 |
总结
Vim 的学习曲线确实陡峭,但掌握后效率提升是实实在在的。建议:
- 先掌握基础:
hjkl 移动、i/a 插入、:wq 保存退出
- 逐步添加:每周学几个新命令,形成肌肉记忆
- 多用文本对象:
ci", diw, yap 这类组合非常实用
- 打开 Vim Tutor:终端输入
vimtutor 进行交互式学习
记住:Vim 不是要替代鼠标,而是让你的双手不用离开键盘。当你发现自己在想「有没有更快的方式」时,答案通常是「有」。
参考资源