Vim 模式与快捷键速查(工程师版)
核心概念:Vim 有四种模式,Normal 模式是默认状态,所有操作从 Normal 出发,用完回到 Normal。
0. 四种模式速览
| 模式 | 进入方式 | 用途 | 左下角显示 |
|---|---|---|---|
| Normal(普通) | Esc / Ctrl+[ |
移动、删除、复制、粘贴 | 空白或文件名 |
| Insert(插入) | i a o 等 |
输入文本 | -- INSERT -- |
| Visual(可视) | v V Ctrl+v |
选中文本,批量操作 | -- VISUAL -- |
| Command(命令) | : / ? |
保存、退出、搜索、替换 | 底部冒号命令行 |
1. Normal 模式 —— 移动(Cursor Movement)
核心哲学:手指不离开主键盘区,用
hjkl替代方向键。
基础移动
h / l # 左 / 右移动一个字符
j / k # 下 / 上移动一行
单词级移动
w # 跳到下一个单词开头
b # 跳到上一个单词开头
e # 跳到当前/下一个单词结尾
W / B / E # 大写:以空格为分隔的"大词"跳转
行级移动
0 # 跳到行首(第一个字符)
^ # 跳到行首第一个非空字符
$ # 跳到行尾
文件级移动
gg # 跳到文件第一行
G # 跳到文件最后一行
:10 # 跳到第 10 行
10G / 10gg # 同上,跳到第 10 行
Ctrl+f # 向下翻一页(Forward)
Ctrl+b # 向上翻一页(Backward)
Ctrl+d # 向下翻半页(Down)
Ctrl+u # 向上翻半页(Up)
H # 跳到屏幕第一行(High)
M # 跳到屏幕中间(Middle)
L # 跳到屏幕最后一行(Low)
段落/括号跳转
{ / } # 上/下一个空行(段落跳转)
% # 跳转到匹配的括号 ( ) [ ] { }
2. Normal 模式 —— 编辑操作
进入 Insert 模式
i # 在光标前插入(insert)
I # 在行首插入
a # 在光标后插入(append)
A # 在行尾插入
o # 在下方新开一行并插入(open)
O # 在上方新开一行并插入
s # 删除当前字符并进入插入模式
S # 删除当前行并进入插入模式(cc 同效果)
删除(Delete / Cut)
x # 删除光标所在字符
X # 删除光标前一个字符(退格)
dd # 删除(剪切)当前行
5dd # 删除 5 行
dw # 删除到下一个单词开头
de # 删除到当前单词结尾
d$ / D # 删除到行尾
d0 # 删除到行首
dG # 删除到文件末尾
dgg # 删除到文件开头
diw # 删除光标所在单词(不管位置)
di( / di) # 删除括号内的内容
复制 & 粘贴
yy # 复制当前行
5yy # 复制 5 行
yw # 复制一个单词
y$ # 复制到行尾
p # 在光标之后粘贴
P # 在光标之前粘贴
注意:
dd和x是「剪切」,删除的内容会存入寄存器,p可以直接贴回来。相当于 Cut & Paste。
撤销 & 重做
u # 撤销(undo)
Ctrl+r # 重做(redo)
U # 撤销当前行的所有修改
3. Visual 模式 —— 选中 & 批量操作
v # 进入可视模式(逐字符选择)
V # 进入可视行模式(逐行选择)
Ctrl+v # 进入可视块模式(列选择,批量列编辑必备)
常见组合
V + jjj + d # 选中多行后删除
v + e + y # 选中到词尾并复制
Ctrl+v + jjj + I + 内容 + Esc # 列批量插入(块模式多行同时编辑)
列批量编辑(块模式) 是 Vim 最强大的功能之一:
Ctrl+v选列 →I输入 →Esc,所选列同时生效。
4. Command 模式 —— 保存、搜索、替换
保存 & 退出
:w # 保存(write)
:q # 退出(quit)
:wq / :x # 保存并退出
:q! # 强制退出不保存
:w !sudo tee % # 用 sudo 权限保存(忘加 sudo 时救命)
搜索
/keyword # 向下搜索 keyword
?keyword # 向上搜索 keyword
n # 跳到下一个匹配
N # 跳到上一个匹配
* # 搜索光标所在的单词(向下)
# # 搜索光标所在的单词(向上)
替换
:s/old/new # 当前行替换第一个
:s/old/new/g # 当前行替换全部
:%s/old/new/g # 整个文件替换全部
:%s/old/new/gc # 整个文件替换,每次询问确认
:10,20s/old/new/g # 第 10 到 20 行替换
5. 常用高级操作
重复 & 效率
. # 重复上一次操作(超高频使用)
>> / << # 当前行右缩进 / 左缩进
>G # 从当前行到文件尾全部缩进
翻页
zt # 将当前行移到屏幕顶部
zz # 将当前行移到屏幕中间
zb # 将当前行移到屏幕底部
大小写转换
~ # 切换光标字符大小写
gUw # 当前单词转大写
guw # 当前单词转小写
gUU # 当前行全转大写
guu # 当前行全转小写
6. 窗口与分屏
:sp file # 水平分屏打开文件(split)
:vsp file # 垂直分屏打开文件(vertical split)
Ctrl+w h/j/k/l # 在分屏间切换
Ctrl+w w # 循环切换分屏
Ctrl+w q # 关闭当前分屏
Ctrl+w = # 均分所有分屏大小
Ctrl+w > / < # 调整分屏宽度
7. 寄存器 & 宏(进阶)
寄存器(多个剪贴板)
:reg # 查看所有寄存器内容
"ayy # 复制当前行到寄存器 a
"ap # 粘贴寄存器 a 的内容
"+y # 复制到系统剪贴板
"+p # 从系统剪贴板粘贴
| 寄存器 | 含义 |
|---|---|
"" |
默认(未命名)寄存器 |
"0 |
最近一次 yank(复制)的内容 |
"a~"z |
26 个命名寄存器,自由使用 |
"+ |
系统剪贴板 |
"* |
鼠标选中内容 |
宏(录制 & 回放)
qa # 开始录制宏到寄存器 a
...操作... # 执行你想要的任何操作
q # 停止录制
@a # 回放宏 a
10@a # 回放宏 a 十次
@@ # 重复上一次宏
8. 实战场景示例
# 场景 1:批量注释多行
Ctrl+v → jjj 选中多行行首 → I → 输入 # → Esc
# 场景 2:批量取消注释
Ctrl+v → jjj 选中 # 列 → d
# 场景 3:全文替换某个变量
:%s/old_variable/new_variable/g
# 场景 4:删除文件所有空行
:g/^$/d
# 场景 5:在每行末尾加分号
:%s/$/;/g
# 场景 6:交换两行位置
dd p # 剪切当前行,贴到下面(实际效果:当前行下移)
# 场景 7:让 Vim 显示行号
:set number # 显示行号
:set relativenumber # 显示相对行号(推荐,方便跳转)
9. 学习路线建议
| 阶段 | 内容 | 预计时间 |
|---|---|---|
| 第一周 | hjkl 移动 + i/Esc 进出 + :wq 保存退出 |
熬过前两天 |
| 第二周 | w b 单词跳 + dd yy p 删/复/贴 + u 撤销 |
手感建立 |
| 第三周 | v V 可视化 + :%s 替换 + f/t 行内搜索 |
效率暴增 |
| 第四周 | Ctrl+v 块模式 + . 重复 + / 搜索 + 分屏 |
回不去了 |
最重要的建议:前两周会很痛苦,忍过去。一个月后你会觉得没有 Vim 模式的其他编辑器全是阻碍。不要装太多插件,先练好原生按键。
提示:终端输入
vimtutor可以打开 Vim 官方 30 分钟交互教程,中文可用vimtutor zh。
