当前位置: 首页 > news >正文

Vim 删除命令完整学习笔记

Vim 删除命令完整学习笔记

文章目录

  • Vim 删除命令完整学习笔记
    • 1. 核心概念
    • 2. 基础删除命令
      • 2.1 字符级删除
      • 2.2 单词级删除
      • 2.3 行级删除
    • 3. 范围删除命令
      • 3.1 到指定位置删除
      • 3.2 段落和文档级删除
      • 3.3 查找删除
    • 4. 文本对象删除
      • 4.1 括号和引号删除
      • 4.2 单词对象删除
    • 5. 数字前缀组合
      • 5.1 数字+删除命令
      • 5.2 实用组合示例
    • 6. 高级删除操作(Ex命令模式)
      • 6.1 指定行范围删除
      • 6.2 模式匹配删除
      • 6.3 条件删除
      • 6.4 复杂条件删除
    • 7. sed扩展删除
      • 7.1 sed结合Vim使用
      • 7.2 高级sed删除技巧
    • 8. 命令速查表
    • 9. 实用技巧和最佳实践
      • 删除策略
      • 常见使用场景
      • 配置建议
      • 安全技巧
    • 10. 学习建议
      • 循序渐进的学习路径
      • 练习建议
      • 避免常见错误


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删除当前行及下两行2j删除当前行及下两行(共三行)
d3w删除当前单词及其后两个单词3w删除当前单词及之后的两个单词
d5j删除当前行及接下来的五行5j删除当前行及接下来的五行
d3k删除当前行及上面三行3k删除当前行及上面三行
d4f,删除到第4个逗号4f,删除从当前行到第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删除光标所在字符dldelete character (right)
X删除光标左边字符dhdelete 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$删除至行尾(含当前字符)Ddelete 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删除当前行及下两行2j删除当前行及下两行(共三行)
d3w删除当前单词及其后两个单词3w删除当前单词及之后的两个单词
d5j删除当前行及接下来的五行5j删除当前行及接下来的五行
d2d删除两行2d删除当前行及下一个行
d3k删除当前行及上面三行3k删除当前行及上面三行
y2j复制当前行及下两行2j复制当前行及下两行
2dw删除当前和下一个单词2w删除当前和下一个单词
c3l删除当前光标所在字符及后两个字符,进入插入模式3l删除当前光标所在字符及后两个字符,并进入插入模式
d4f,删除当前行到下一个逗号4f,删除从当前行到下一个逗号之间的内容

类别命令功能描述使用示例 / 备注
删除当前行: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 撤销误删除的内容

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

相关文章:

  • Vim 光标移动命令总览
  • 【部署】使用华为云容器化部署Java项目指南
  • 统计学核心概念与现实应用精解(偏机器学习)
  • 第1章信息化知识归纳总结补充内容
  • Android 应用开发概述与环境搭建指南
  • 微信小程序抓包(burp + proxifier)
  • DBSyncer:一款开源的数据同步工具
  • 重会python爬虫学习----1
  • 【OSG学习笔记】Day 18: 碰撞检测与物理交互
  • 腾讯开源 AniPortrait:音频驱动的逼真肖像动画生成革命
  • LeetCode:912归并排序,洛谷:ACM风格
  • leetcode:42. 接雨水(秒变简单题)
  • 聊一聊 - 如何像开源项目一样,去设计一个组件
  • Linux系统编程-DAY12
  • Ubuntu下挂载NTFS格式磁盘
  • 延伸大疆AI能力:Coovally一键训练模型,直通无人机部署
  • SALOME源码分析: libBatch
  • [FX5U-PLC] 双重联锁正反转的继电接触控制线路
  • Matlab点云合并函数pcmerge全解析
  • 【算法篇】逐步理解动态规划模型5(子序列问题)
  • 党校网站项目建设的总体目标/网站制作报价
  • 网站建设实践鉴定/软文的目的是什么
  • 昆明网站做的好的公司简介/互联网营销师培训机构哪家好
  • 网站建设相关技术/班级优化大师网页版登录
  • 泰州网站建设物美价廉/谷歌推广怎么操作
  • 强的网站建设/淘宝seo优化怎么做