Vim 删除命令完整学习笔记

发布于:2025-06-14 ⋅ 阅读:(24) ⋅ 点赞:(0)

Vim 删除命令完整学习笔记


1. 核心概念

Vim 删除命令遵循 d + 动作 的基本结构,这是 Vim 编辑哲学的核心体现。

基本格式:

  • d{motion} - 删除+动作
  • {count}d{motion} - 数量+删除+动作
  • d{count}{motion} - 删除+数量+动作

核心特点:

  • 删除的内容会自动保存到寄存器中,可以用 p 粘贴
  • 所有删除操作都可以用 u 撤销
  • 可以与数字前缀结合使用

2. 基础删除命令

2.1 字符级删除

  • x - 删除光标所在字符(等价于 dl
  • X - 删除光标左边字符(等价于 dh
  • dl - 删除右边字符
  • dh - 删除左边字符

2.2 单词级删除

  • dw - 删除一个单词(不含空格)
  • dW - 删除到下一个以空白分隔的大词
  • de - 删除到当前词末(含当前字符)
  • diw - 删除当前词(不含空格)
  • daw - 删除当前词(含空格)

💡 单词概念区分:小写 w 以空格和标点为界,大写 W 只以空格为界

2.3 行级删除

  • dd - 删除当前行(等价于 d_
  • D - 删除至行尾(等价于 d$
  • d$ - 删除至行尾(含当前字符)
  • d0 - 删除至行首(不含光标所在字符)
  • d^ - 删除至第一个非空字符

3. 范围删除命令

3.1 到指定位置删除

  • dj - 删除当前行和下一行(等价于 2dd
  • dk - 删除当前行和上一行
  • dG - 删除到文件末尾
  • dgg - 删除到文件开头

3.2 段落和文档级删除

  • d} - 删除到段落结束
  • d{ - 删除到段落开始
  • d] - 删除到下一个段落边界
  • d[ - 删除到上一个段落边界

3.3 查找删除

  • dfx - 删除到字符 x(包括 x)
  • dFx - 删除到字符 x(向左查找)
  • dtx - 删除到字符 x(不含 x)
  • dTx - 删除到字符 x 向左(不含 x)
  • d/pattern - 删除直到匹配的 pattern
  • d% - 删除匹配括号对

💡 记忆技巧:f = find(查找并包含),t = till(查找但不包含)

4. 文本对象删除

4.1 括号和引号删除

  • di" - 删除引号内内容
  • da" - 删除引号内容及引号
  • di' - 删除单引号内内容
  • da' - 删除单引号内容及引号
  • di) / dib - 删除圆括号内内容
  • da) / dab - 删除圆括号内容及括号
  • di] - 删除方括号内内容
  • da] - 删除方括号内容及括号
  • di} / diB - 删除花括号内内容
  • da} / daB - 删除花括号内容及括号

4.2 单词对象删除

  • diw - 删除当前词(inside word)
  • daw - 删除当前词及空格(around word)

💡 记忆技巧:i = inside(内部),a = around(周围)

5. 数字前缀组合

5.1 数字+删除命令

  • 3dd - 删除 3 行
  • 2dw - 删除 2 个单词
  • 5x - 删除 5 个字符

5.2 实用组合示例

命令 解释 数量前缀 动作符 作用
d2j 删除当前行及下两行 2 j 删除当前行及下两行(共三行)
d3w 删除当前单词及其后两个单词 3 w 删除当前单词及之后的两个单词
d5j 删除当前行及接下来的五行 5 j 删除当前行及接下来的五行
d3k 删除当前行及上面三行 3 k 删除当前行及上面三行
d4f, 删除到第4个逗号 4 f, 删除从当前行到第4个逗号之间的内容

6. 高级删除操作(Ex命令模式)

6.1 指定行范围删除

  • :d - 删除当前行
  • :1,10d - 删除第 1 到 10 行
  • :10,$d - 删除第 10 行到文件末尾
  • :.,+5d - 删除当前行及其后 5 行
  • :.-2,.d - 删除当前行前 2 行到当前行

6.2 模式匹配删除

  • :g/pattern/d - 删除包含 pattern 的所有行
  • :v/pattern/d - 删除不包含 pattern 的所有行
  • /pattern/d - 删除第一个匹配 pattern 的行

6.3 条件删除

  • :g/foo/d - 删除包含 “foo” 的所有行
  • :v/foo/d - 删除不包含 “foo” 的行
  • :g/^$/d - 删除所有空行
  • :g/^\s*$/d - 删除空行和只含空白的行

6.4 复杂条件删除

多关键词删除:

  • :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 - 删除匹配行及其前两行

7. sed扩展删除

7.1 sed结合Vim使用

  • :%!sed '/pattern/d' - 使用 sed 删除匹配行
  • :%!sed '/pattern/,+2d' - 删除匹配行及其后两行

7.2 高级sed删除技巧

  • :%!sed '/pcie/,+2d' - 删除包含 “pcie” 的行及其后两行
  • :10,30!sed '/word/d' - 在第10-30行范围内使用sed删除

8. 命令速查表

命令 解释 等价形式 英文含义
基础删除
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, 删除从当前行到下一个逗号之间的内容

类别 命令 功能描述 使用示例 / 备注
删除当前行 :ddd 删除当前行 在普通模式下,按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
删除包含多个关键词foobar(不区分大小写)行 :g/\cfoo|bar/d 删除包含foobar的行,不区分大小写 :g/\cfoo|bar/d

9. 实用技巧和最佳实践

删除策略

  1. 精确删除:使用文本对象(diwdi")进行精确操作
  2. 范围删除:利用查找命令(dfdt)快速定位
  3. 批量删除:使用 Ex 命令进行模式匹配删除

常见使用场景

  1. 代码重构:删除特定函数或代码块
  2. 日志清理:删除包含特定关键词的日志行
  3. 文档编辑:删除空行、重复内容
  4. 数据处理:删除不符合条件的数据行

配置建议

" 在 .vimrc 中添加有用的映射
nnoremap <leader>dd :g/^$/d<CR>          " 删除所有空行
nnoremap <leader>dw :g/^\s*$/d<CR>       " 删除空行和空白行
nnoremap <leader>dt :g/TODO/d<CR>        " 删除包含TODO的行

安全技巧

  1. 备份重要数据:删除前先复制重要内容
  2. 使用撤销:记住 u 可以撤销删除操作
  3. 预览操作:使用 :g/pattern/p 先预览要删除的行
  4. 小范围测试:在小范围内测试复杂删除命令

10. 学习建议

循序渐进的学习路径

  1. 第一阶段:掌握基础删除

    • 重点练习 dddwxD
    • 理解 d + motion 的基本概念
  2. 第二阶段:学习文本对象

    • 掌握 diwdawdi"da"
    • 理解 inside 和 around 的区别
  3. 第三阶段:掌握查找删除

    • 学会使用 dfdtd/pattern
    • 练习与数字前缀的组合
  4. 第四阶段:高级模式匹配

    • 掌握 :g/pattern/d:v/pattern/d
    • 学习复杂条件的组合使用

练习建议

  1. 日常编辑:在实际工作中有意识地使用这些命令
  2. 模拟场景:创建测试文件练习各种删除操作
  3. 记录总结:记录常用的删除模式,形成个人习惯

避免常见错误

  • 不要在不确定的情况下使用 :g//d 命令
  • 记住大小写的区别(如 w vs W
  • 理解 ft 的区别(包含 vs 不包含目标字符)
  • 学会使用 u 撤销误删除的内容

📝 核心提示:删除命令的精髓在于"精确定位+高效删除",掌握好动作命令和文本对象是关键。记住,任何删除操作都可以撤销,大胆练习!


网站公告

今日签到

点亮在社区的每一天
去签到