Vim 删除命令遵循 d
+ 动作 的基本结构,这是 Vim 编辑哲学的核心体现。
基本格式:
d{motion}
- 删除+动作{count}d{motion}
- 数量+删除+动作d{count}{motion}
- 删除+数量+动作核心特点:
p
粘贴u
撤销x
- 删除光标所在字符(等价于 dl
)X
- 删除光标左边字符(等价于 dh
)dl
- 删除右边字符dh
- 删除左边字符dw
- 删除一个单词(不含空格)dW
- 删除到下一个以空白分隔的大词de
- 删除到当前词末(含当前字符)diw
- 删除当前词(不含空格)daw
- 删除当前词(含空格)单词概念区分:小写
w
以空格和标点为界,大写W
只以空格为界
dd
- 删除当前行(等价于 d_
)D
- 删除至行尾(等价于 d$
)d$
- 删除至行尾(含当前字符)d0
- 删除至行首(不含光标所在字符)d^
- 删除至第一个非空字符dj
- 删除当前行和下一行(等价于 2dd
)dk
- 删除当前行和上一行dG
- 删除到文件末尾dgg
- 删除到文件开头d}
- 删除到段落结束d{
- 删除到段落开始d]
- 删除到下一个段落边界d[
- 删除到上一个段落边界dfx
- 删除到字符 x(包括 x)dFx
- 删除到字符 x(向左查找)dtx
- 删除到字符 x(不含 x)dTx
- 删除到字符 x 向左(不含 x)d/pattern
- 删除直到匹配的 patternd%
- 删除匹配括号对记忆技巧:f = find(查找并包含),t = till(查找但不包含)
di"
- 删除引号内内容da"
- 删除引号内容及引号di'
- 删除单引号内内容da'
- 删除单引号内容及引号di)
/ dib
- 删除圆括号内内容da)
/ dab
- 删除圆括号内容及括号di]
- 删除方括号内内容da]
- 删除方括号内容及括号di}
/ diB
- 删除花括号内内容da}
/ daB
- 删除花括号内容及括号diw
- 删除当前词(inside word)daw
- 删除当前词及空格(around word)记忆技巧:i = inside(内部),a = around(周围)
3dd
- 删除 3 行2dw
- 删除 2 个单词5x
- 删除 5 个字符命令 | 解释 | 数量前缀 | 动作符 | 作用 |
---|---|---|---|---|
d2j |
删除当前行及下两行 | 2 |
j |
删除当前行及下两行(共三行) |
d3w |
删除当前单词及其后两个单词 | 3 |
w |
删除当前单词及之后的两个单词 |
d5j |
删除当前行及接下来的五行 | 5 |
j |
删除当前行及接下来的五行 |
d3k |
删除当前行及上面三行 | 3 |
k |
删除当前行及上面三行 |
d4f, |
删除到第4个逗号 | 4 |
f, |
删除从当前行到第4个逗号之间的内容 |
:d
- 删除当前行:1,10d
- 删除第 1 到 10 行:10,$d
- 删除第 10 行到文件末尾:.,+5d
- 删除当前行及其后 5 行:.-2,.d
- 删除当前行前 2 行到当前行:g/pattern/d
- 删除包含 pattern 的所有行:v/pattern/d
- 删除不包含 pattern 的所有行/pattern/d
- 删除第一个匹配 pattern 的行:g/foo/d
- 删除包含 “foo” 的所有行:v/foo/d
- 删除不包含 “foo” 的行:g/^$/d
- 删除所有空行:g/^\s*$/d
- 删除空行和只含空白的行多关键词删除:
:g/word1\|word2/d
- 删除包含 “word1” 或 “word2” 的行:v/word1\|word2/d
- 删除不包含 “word1” 或 “word2” 的行:g/.*word1.*word2/d
- 删除同时包含 “word1” 和 “word2” 的行范围内条件删除:
:10,30g/test/d
- 删除第 10-30 行内包含 “test” 的行:10,30v/test/d
- 删除第 10-30 行内不包含 “test” 的行不区分大小写删除:
:g/\cfoo/d
- 删除包含 “foo” 的行(不区分大小写):v/\cfoo/d
- 删除不包含 “foo” 的行(不区分大小写)相邻行删除:
:g/word/,+2d
- 删除匹配行及其后两行:g/word/-2,d
- 删除匹配行及其前两行:%!sed '/pattern/d'
- 使用 sed 删除匹配行:%!sed '/pattern/,+2d'
- 删除匹配行及其后两行:%!sed '/pcie/,+2d'
- 删除包含 “pcie” 的行及其后两行:10,30!sed '/word/d'
- 在第10-30行范围内使用sed删除命令 | 解释 | 等价形式 | 英文含义 |
---|---|---|---|
基础删除 | |||
d |
删除,后接动作符 | 无 | delete |
dd |
删除当前行 | d_ |
delete line |
D |
删除至行尾 | d$ |
Delete (shortcut) |
x |
删除光标所在字符 | dl |
delete character (right) |
X |
删除光标左边字符 | dh |
delete character (left) |
单词删除 | |||
dw |
删除一个单词(不含空格) | daw (包含空格) |
delete word |
dW |
删除到下一个以空白分隔的大词 | - | delete Word |
de |
删除到当前词末(含当前字符) | - | delete to end |
diw |
删除当前词(不含空格) | - | delete inner word |
daw |
删除当前词(含空格) | - | delete a word |
位置删除 | |||
d0 |
删除至行首(不含光标所在字符) | - | delete to beginning |
d^ |
删除至第一个非空字符 | - | delete to first non-blank |
d$ |
删除至行尾(含当前字符) | D |
delete to end of line |
dG |
删除到文件末尾 | - | delete to end of file |
dgg |
删除到文件开头 | - | delete to beginning of file |
查找删除 | |||
dfx |
删除到字符 x(包括 x) | - | delete to (find x) |
dFx |
删除到字符 x(向左) | - | delete to (Find x) |
dtx |
删除到字符 x(不含 x) | - | delete till (x) |
dTx |
删除到字符 x 向左(不含 x) | - | delete Till (x) |
d/pattern |
删除直到匹配的 pattern | - | delete to search |
d% |
删除匹配括号对 | - | delete to matching paren |
文本对象 | |||
di" |
删除引号内内容 | - | delete inside " |
da" |
删除引号内含引号 | - | delete around " |
段落删除 | |||
d} |
删除到段落结束 | - | delete to paragraph end |
d{ |
删除到段落开始 | - | delete to paragraph start |
命令 | 解释 | 数量前缀 | 动作符 | 作用 |
---|---|---|---|---|
d2j |
删除当前行及下两行 | 2 |
j |
删除当前行及下两行(共三行) |
d3w |
删除当前单词及其后两个单词 | 3 |
w |
删除当前单词及之后的两个单词 |
d5j |
删除当前行及接下来的五行 | 5 |
j |
删除当前行及接下来的五行 |
d2d |
删除两行 | 2 |
d |
删除当前行及下一个行 |
d3k |
删除当前行及上面三行 | 3 |
k |
删除当前行及上面三行 |
y2j |
复制当前行及下两行 | 2 |
j |
复制当前行及下两行 |
2dw |
删除当前和下一个单词 | 2 |
w |
删除当前和下一个单词 |
c3l |
删除当前光标所在字符及后两个字符,进入插入模式 | 3 |
l |
删除当前光标所在字符及后两个字符,并进入插入模式 |
d4f, |
删除当前行到下一个逗号 | 4 |
f, |
删除从当前行到下一个逗号之间的内容 |
类别 | 命令 | 功能描述 | 使用示例 / 备注 |
---|---|---|---|
删除当前行 | :d 或dd |
删除当前行 | 在普通模式下,按dd 删除当前行;2dd 删除两行 |
删除指定行范围 | :{start},{end}d |
删除指定行范围 | :1,10d 删除第 1 到 10 行 |
删除包含 pattern 的行 | :g/{pattern}/d |
删除匹配特定内容的所有行 | :g/foo/d 删除包含 “foo” 的所有行 |
删除不包含 pattern 的行 | :v/{pattern}/d |
删除不匹配的行 | :v/foo/d 删除不包含 “foo” 的行 |
删除第一个匹配行 | /pattern/d |
删除第一个匹配的行 | /foo/d 删除第一个匹配 “foo” 的行 |
删除当前行中所有 pattern | :s/{pattern}//g |
删除当前行中指定内容 | :s/foo//g 删除当前行所有 “foo” |
替换当前行内容 | :s/{pattern}/{replacement}/g |
替换当前行中的内容 | :s/foo/bar/g 把所有 “foo” 替换为 “bar” |
删除包含多个关键词的行 | :g/word1|word2/d |
删除包含 “word1” 或 “word2” 的行 | :g/dir|Our/d |
删除不包含多个关键词的行 | :v/word1|word2/d |
删除不包含 “word1” 或 “word2” 的行 | :v/dir|Our/d |
同时包含两个关键词的行 | :g/.*word1.*word2/d |
删除同时包含 “word1” 和 “word2” 的行 | :g/.*word1.*word2/d |
不同时包含两个关键词的行 | :v/.*word1.*word2/d |
删除不同时包含的行 | :v/.*word1.*word2/d |
删除第 10 到 30 行内包含 test 的行 | :10,30g/test/d |
删除该范围内包含 “test” 的行 | :10,30g/test/d |
删除第 10 到 30 行内不包含 test 的行 | :10,30v/test/d |
删除该范围内不包含 “test” 的行 | :10,30v/test/d |
撤销删除操作 | u |
撤销最近删除操作 | 普通模式按u 撤销 |
删除匹配 word 行及其后两行(Vim) | :g/word/,+2d |
删除匹配行及其后两行 | :g/pcie/,+2d |
删除匹配 word 行及其后两行(sed) | :%!sed /word/,+2d 或:%!sed '/word/,+2d' |
使用 sed 删除匹配行及其后两行 | :%!sed '/pcie/,+2d' |
删除第 10 到 30 行中匹配 word 的行及其后两行(Vim) | :10,30g/word/,+2d |
删除该范围匹配及其后两行 | :10,30g/word/,+2d |
删除包含foo (不区分大小写)行 |
:g/\cfoo/d |
删除包含foo 的行,不区分大小写 |
:g/\cfoo/d |
删除不包含foo (不区分大小写)行 |
:v/\cfoo/d |
删除不包含foo 的行,不区分大小写 |
:v/\cfoo/d |
删除包含多个关键词foo 或bar (不区分大小写)行 |
:g/\cfoo|bar/d |
删除包含foo 或bar 的行,不区分大小写 |
:g/\cfoo|bar/d |
diw
、di"
)进行精确操作df
、dt
)快速定位" 在 .vimrc 中添加有用的映射
nnoremap dd :g/^$/d " 删除所有空行
nnoremap dw :g/^\s*$/d " 删除空行和空白行
nnoremap dt :g/TODO/d " 删除包含TODO的行
u
可以撤销删除操作:g/pattern/p
先预览要删除的行第一阶段:掌握基础删除
dd
、dw
、x
、D
d + motion
的基本概念第二阶段:学习文本对象
diw
、daw
、di"
、da"
等第三阶段:掌握查找删除
df
、dt
、d/pattern
第四阶段:高级模式匹配
:g/pattern/d
和 :v/pattern/d
:g//d
命令w
vs W
)f
和 t
的区别(包含 vs 不包含目标字符)u
撤销误删除的内容核心提示:删除命令的精髓在于"精确定位+高效删除",掌握好动作命令和文本对象是关键。记住,任何删除操作都可以撤销,大胆练习!