vim 删除(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在编程与文本编辑的日常中,Vim 作为一款功能强大的终端编辑器,因其高效的操作模式和高度可定制的特性,成为众多开发者的心头好。而vim 删除操作,作为编辑过程中最基础也最高频的功能之一,其掌握程度直接影响着用户的效率与体验。无论是删除单个字符、整行代码,还是复杂文本块,Vim 提供了灵活且高效的解决方案。本文将从基础到进阶,结合具体场景,系统讲解如何通过 Vim 删除命令提升编码效率,并通过实际案例帮助读者快速上手。


基础删除命令:从单字符到整行的精准操作

Vim 的普通模式(Normal Mode)中,删除操作的核心命令是 d(delete)。通过与方向键、数字或动作命令(如 w$)的组合,可以实现不同粒度的删除。以下分场景详解:

1. 删除单字符与光标移动

  • x 命令:删除光标所在位置的字符,是 Vim 删除的基础操作。例如,在单词 "hello" 的首字母 h 处按下 x,会直接删除 h,光标保持不动。
  • X 命令(大写):删除光标左侧的字符,适合回退修改。例如,在 "world" 的 r 处按下 X,会删除左侧的 o,光标左移一位。

2. 删除单词与行内文本

  • dw:删除光标所在单词及后续空白字符。例如,若光标在 "this is a test" 的 t 处,dw 会删除 "this "(包括空格)。
  • d$:删除从光标到行尾的所有字符。假设当前行是 print("Hello World"),若光标在 ("H 处,d$ 将删除 ello World"),结果变为 print(
  • d0:与 d$ 相反,删除从光标到行首的字符。例如,在 let x = 10x 处执行 d0,会删除 let,仅保留 x = 10

3. 删除整行与多行

  • dd:删除当前整行,是 Vim 删除中使用频率最高的命令之一。例如,在代码行 def function(): 上执行 dd,该行会被移至默认寄存器(剪贴板),同时光标上移一行。
  • 3dd:删除光标下方的三行(包括当前行)。若光标在第 5 行,执行后将删除第 5、6、7 行。
  • dG:删除从光标到文件末尾的所有内容。适用于快速清理冗余代码块。

可视模式:图形化选区的高效删除

Vim 的可视模式(Visual Mode)允许用户像图形界面一样“框选”文本,再通过 d 命令批量删除,尤其适合处理复杂文本块:

1. 可视字符模式(Visual Mode)

按下 v 进入可视模式,通过方向键或动作命令选择文本区域。例如:

  • v$:选中当前行到行尾的文本,随后按 d 删除。
  • v + j:向下扩展选区至下一行,适合删除多行代码。

案例:删除多行注释
假设代码中有:

print("Code")  

将光标置于第一个 #,输入 vjj(选中三行),再按 d,即可一次性删除所有注释。

2. 可视行模式(Visual Line Mode)

V 进入行模式,可快速选中整行。例如:

  • 5V:选中当前行及下方 4 行,随后 d 删除。
  • V + }:选中当前段落(由空行分隔的代码块),适合清理冗余段落。

3. 可视块模式(Visual Block Mode)

Ctrl+v 进入块模式,可垂直选中矩形区域。例如:
在以下代码中,若需删除列 5 到列 8 的内容:

hello   123  
world   456  
test    789  

将光标置于 h,输入 Ctrl+v 后按 l4(右移 4 列)和 2j(下移 2 行),形成矩形选区,再按 d 即可删除数字列。


进阶技巧:寄存器、组合命令与撤销

1. 利用寄存器控制删除内容

Vim 的寄存器(register)可临时存储删除或复制的文本。默认删除内容会进入 "(双引号)寄存器,但可通过以下方式灵活管理:

  • "_d:将删除内容丢弃至“黑洞寄存器”,避免覆盖剪贴板。例如,清理测试代码时使用此命令可避免误粘贴。
  • "ad:将删除内容存入自定义寄存器 a,后续可用 "ap 粘贴。

2. 组合命令:动作与删除的高效配合

  • d+动作:直接组合删除与动作命令。例如:
    • d}:删除光标到当前段落结束的文本。
    • dG:删除至文件末尾(如前文所述)。
  • . 命令:重复上一次删除操作,适合批量处理相同模式。例如连续删除多个注释行时,只需执行一次后多次按 .

3. 撤销与重做

  • u:撤销上一次操作,包括删除。
  • Ctrl+r:重做被撤销的操作。
  • U:恢复当前行至进入普通模式时的状态,适合误删整行后快速恢复。

实战案例:复杂场景下的 vim 删除应用

案例 1:删除特定行并保留内容

假设需删除文件中所有以 # 开头的注释行,同时保留其内容至寄存器:

  1. 使用 :g/^#/d 命令删除所有匹配行(全局搜索以 # 开头的行并删除)。
  2. 若需保留,改用 :g/^#/d A(存入寄存器 A)。

案例 2:替换操作中的删除

若需将 print("Hello") 改为 print("World")

  1. 移动光标到 Hello,输入 cw World(替换命令),但也可通过删除实现:
    • d3w 删除 Hello 及后续空格,再输入 World

案例 3:删除并保留多行代码

在编辑 JavaScript 时,需删除一段函数但保留其内容:

// Old Function  
function oldFunc() {  
  // ...  
}  

步骤:

  1. 进入可视行模式(V),选中 oldFunc 的全部代码。
  2. "ad 删除并存入寄存器 a,后续可通过 "ap 粘贴恢复。

结论

掌握 Vim 删除操作的核心,是理解命令的组合逻辑与模式切换的灵活性。从基础的单字符删除到复杂文本块的寄存器管理,Vim 通过其简洁的命令系统,将删除转化为高效编辑的跳板。对于初学者,建议从 dddw 等高频命令入手,逐步探索可视模式与寄存器的进阶用法;中级开发者则可结合宏(macro)与正则表达式,进一步提升批量删除的自动化程度。记住,实践是精通的唯一路径——通过日常编码中刻意练习这些技巧,你将逐步解锁 Vim 的真正潜力,让“删除”成为优化代码、提升效率的利器。

最新发布