You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在gVim/Vim中批量删除日志文件每行两单词间的内容?

解决方案

方法一:使用Vim替换命令(最推荐)

直接用substitute命令批量替换,既能删除中间内容,又能自动添加注释文本:

:%s/abc\s*\(.*\)\s*123/abc 123 --> remove \1 of line./g
  • %s:表示对所有行执行替换操作
  • abc\s*\(.*\)\s*123:正则匹配规则,其中:
    • abc:匹配目标前缀
    • \s*:匹配任意数量的空白字符(空格、制表符都包含)
    • \(.*\):捕获abc和123之间的所有内容(后续用\1引用这段内容)
    • 123:匹配目标后缀
  • 替换后的字符串里,\1会自动替换成捕获到的中间内容,直接生成你需要的注释文本。

如果只想处理包含abc和123的行(而非所有行),可以改成:

:g/abc.*123/s//abc 123 --> remove \1 of line./

方法二:Normal模式操作的批量版

如果习惯用Normal模式的编辑动作,可用以下命令批量处理:

:%normal! /abc<CR>w/123<CR>hdT1A --> remove <C-r>" of line.<Esc>

步骤拆解:

  • %normal!:对所有行执行Normal模式命令,!避免自定义映射干扰
  • /abc<CR>:跳转到当前行的abc位置
  • w:移动到abc后的第一个单词开头
  • /123<CR>:跳转到当前行的123位置
  • hdT1:删除abc到123之间的内容(h退到123前一个字符,dT1删到1字符之前)
  • A --> remove <C-r>" of line.<Esc>:在行尾添加注释,<C-r>"会粘贴刚才删除的中间内容

你原有命令的问题

你用的:g/abc * 123/normal nD逻辑存在问题:

  • g命令匹配到目标行后,n是查找下一个匹配项,但当前行已经是匹配行,此时n大概率找不到内容,光标不会移动
  • D是从光标位置删到行尾,根本没定位到abc和123之间的区域,自然达不到删除中间内容的效果

内容的提问来源于stack exchange,提问作者Sri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:33:22