常用命令
光标移动
在 Vim 中,移动光标的键分为 普通模式(Normal Mode) 和 插入模式(Insert Mode) 两种情况
普通模式光标移动
在普通模式下,Vim 使用 hjkl 作为主要方向键,同时支持其他快捷键快速移动
| 键 | 功能 |
|---|---|
h | 向左移动一个字符 |
l | 向右移动一个字符 |
j | 向下移动一行(相当于 ↓) |
k | 向上移动一行(相当于 ↑) |
快速移动
| 键 | 功能 |
|---|---|
w | 跳到下一个单词的开头(word) |
b | 跳到上一个单词的开头 |
e | 跳到当前单词的末尾 |
W | 跳到下一个 WORD 的开头(WORD 包括标点符号) |
B | 跳到上一个 WORD 的开头 |
E | 跳到当前 WORD 的末尾 |
0 | 跳到行首(第一个字符) |
^ | 跳到行首的第一个非空白字符 |
$ | 跳到行尾 |
g_ | 跳到行尾的最后一个非空白字符 |
% | 跳转到匹配的括号(()、[]、{}) |
gg | 跳到文件第一行 |
G | 跳到文件最后一行 |
:n | 跳到第 n 行(如 :10 跳到第 10 行) |
Ctrl + u | 向上翻半页 |
Ctrl + d | 向下翻半页 |
Ctrl + f | 向下翻一页(Forward) |
Ctrl + b | 向上翻一页(Backward) |
H | 跳到屏幕顶部 |
M | 跳到屏幕中间 |
L | 跳到屏幕底部 |
插入模式光标移动
在插入模式下,Vim 的光标移动键与普通编辑器一致(类似 Windows/Linux 的方向键)
| 键 | 功能 |
|---|---|
| 方向键(↑ ↓ ← →) | 移动光标 |
Home / End | 跳到行首/行尾 |
Page Up / Page Down | 上下翻页 |
Ctrl + b / Ctrl + f | 上一页/下一页(部分终端支持) |
注意:在插入模式下,建议尽量少用方向键,因为 Vim 的设计理念是 “用键盘完成一切”,普通模式的
hjkl更高效
文本修改
在 Vim 中文本修改(Editing)是核心操作之一
增加文本
进入插入模式
| 命令 | 功能 |
|---|---|
i | 在光标前插入 |
a | 在光标后追加 |
o | 在当前行下方插入新行 |
O | 在当前行上方插入新行 |
I | 在行首(非空白字符前)插入 |
A | 在行尾追加 |
gI | 在行首(第一个字符前)插入 |
删除文本
删除字符/单词/行
| 命令 | 功能 |
|---|---|
x | 删除光标下的字符 |
X | 删除光标前的字符 |
dw | 删除从光标到下一个单词开头 |
de | 删除到当前单词末尾 |
dE | 删除到当前 WORD 末尾(包括标点) |
db | 删除到上一个单词开头 |
d$ 或 D | 删除到行尾 |
d0 | 删除到行首 |
dd | 删除整行 |
dgg | 删除到文件开头 |
dG | 删除到文件末尾 |
d{motion} | 删除指定范围(如 d5j 删除当前行及下 4 行) |
修改文本
替换/修改内容:
| 命令 | 功能 |
|---|---|
r{char} | 替换光标下的字符为 {char} |
R | 进入替换模式(持续替换直到按 Esc) |
cw | 修改当前单词(删除到单词末尾并进入插入模式) |
ce | 修改到当前单词末尾 |
cE | 修改到当前 WORD 末尾 |
cb | 修改到上一个单词开头 |
c$ 或 C | 修改到行尾 |
c0 | 修改到行首 |
cc | 修改整行 |
cgg | 修改到文件开头 |
cG | 修改到文件末尾 |
c{motion} | 修改指定范围(如 c5j 修改当前行及下 4 行) |
复制/粘贴
复制到的内容只能在 vim 中使用
| 命令 | 功能 |
|---|---|
yy | 复制整行 |
yw | 复制到下一个单词开头 |
ye | 复制到当前单词末尾 |
y$ | 复制到行尾 |
y0 | 复制到行首 |
y{motion} | 复制指定范围(如 y5j 复制当前行及下 4 行) |
粘贴(paste)
| 命令 | 功能 |
|---|---|
p | 在光标后粘贴 |
P | 在光标前粘贴 |
"+p | 粘贴系统剪贴板内容(需 Vim 支持 +clipboard) |
撤销/重做
| 命令 | 功能 |
|---|---|
u | 撤销上一次操作 |
Ctrl + r | 重做被撤销的操作 |
U | 撤销整行的修改(慎用,可能影响多行) |
查找与替换
查找
| 命令 | 功能 |
|---|---|
/pattern | 向下搜索 pattern |
?pattern | 向上搜索 pattern |
n | 跳转到下一个匹配项 |
N | 跳转到上一个匹配项 |
替换
| 命令 | 功能 |
|---|---|
:%s/old/new/g | 全局替换所有 old 为 new |
:s/old/new/g | 当前行替换 |
:1,10s/old/new/g | 替换第 1-10 行的 old 为 new |
:%s/old/new/gc | 全局替换,每次询问确认 |
高级修改技巧
块操作(Visual Block)
| 命令 | 功能 |
|---|---|
Ctrl + v | 进入块选择模式 |
I{char}<Esc> | 在块首插入字符(如对齐列) |
A{char}<Esc> | 在块尾追加字符 |
多行编辑
| 命令 | 功能 |
|---|---|
Ctrl + v + j/k | 选中多行 |
I{char}<Esc> | 在所有选中行前插入 |
A{char}<Esc> | 在所有选中行后追加 |
文本对象选择
在 Vim 中,文本对象选择命令 是高效编辑的核心功能,允许你快速选中单词、句子、段落、引号内容等结构化文本块
文本对象的基本语法 {operator}{text-object}:
{operator}:修改操作(如d删除、c修改、y复制等){text-object}:目标文本范围(如w单词、p段落等)
示例:
diw→ 删除当前光标所在的单词(不包含前后空格)ci"→ 修改当前双引号内的内容(包含引号本身会被删除并进入插入模式)yap→ 复制当前段落(包含前后空行)
常用文本对象分类及示例
字符级对象(Quotes & Brackets)
| 命令 | 功能 | 示例 |
|---|---|---|
i' / a' | 单引号内的内容(不含引号/含引号) | di' → 删除 'hello' 中的 hello; da' → 删除 'hello' |
i" / a" | 双引号内的内容 | ci" → 修改 "world" 为其他内容 |
i( / a( | 圆括号内的内容 | yi( → 复制 (1+2) 中的 1+2 |
i[ / a[ | 方括号内的内容 | di[ → 删除 [foo] 中的 foo |
i{ / a{ | 花括号内的内容 | ca{ → 修改 { key: value } 为其他内容 |
i< / a< | 尖括号内的内容 | yi< → 复制 <div> 中的 div |
示例场景:
- 快速修改函数参数:
ci(→ 修改(x, y)的内容。 - 删除 JSON 键值:
di{→ 删除{ "name": "Alice" }中的name: "Alice"
单词级对象(Words & WORDs)
| 命令 | 功能 | 示例 |
|---|---|---|
iw / aw | 当前单词(不含/含前后空格) | diw → 删除 hello ;daw → 删除 hello(含空格) |
iW / aW | 当前 WORD(含标点符号) | diW → 删除 foo-bar(含 -) |
示例场景:
- 修改变量名:
ciw→ 将count改为total - 删除函数调用:
daw→ 删除foo()(含括号和空格)
行级对象(Lines)
| 命令 | 功能 | 示例 |
|---|---|---|
ip / ap | 当前行及上下相邻的空行(段落) | dip → 删除当前段落(含空行) |
i" / a" | 当前行(需配合光标位置) | 实际常用 dd/yy 替代 |
注意:行级操作通常直接用 dd(删除行)、yy(复制行)更高效
句子和段落
| 命令 | 功能 | 示例 |
|---|---|---|
is / as | 当前句子(需正确标点) | dis → 删除当前句子(含前后空格) |
ip / ap | 当前段落(以空行分隔) | yap → 复制当前段落 |
示例场景:
- 修改段落内容:
cap→ 删除段落并进入插入模式 - 删除错误句子:
dis→ 删除This is a sentence.
组合操作示例
删除操作(d)
di(→ 删除括号内的内容(不含括号)da(→ 删除括号及内容(含括号)dip→ 删除当前段落
修改操作(c)
ci"→ 修改双引号内的内容(光标可在引号内任意位置)cit→ 修改 XML 标签内的内容cap→ 修改当前段落
复制操作(y)
yi"→ 复制双引号内的内容yap→ 复制当前段落(含前后空行)yiw→ 复制当前单词
可视模式选择
vi"→ 可视化选择双引号内的内容va"→ 可视化选择双引号及内容vip→ 可视化选择当前段落