{T}

常用命令

光标移动

在 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全局替换所有 oldnew
:s/old/new/g当前行替换
:1,10s/old/new/g替换第 1-10 行的 oldnew
:%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' 中的 helloda' → 删除 '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 → 删除 hellodaw → 删除 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 → 可视化选择当前段落