删除突出显示的搜索模式之前/之后的所有文本

时间:2011-06-03 09:30:21

标签: search vim

我知道在VIM中如何搜索字符串并删除文本直到行的开头/结尾但我想知道是否也可以在突出显示的搜索模式之前或之后删除所有文本。

5 个答案:

答案 0 :(得分:14)

如果您想在所有行中执行此操作,并且不想重新键入搜索字词,我建议如下:

:%s/.*\ze<Ctrl-r>///

这是做什么的:

  • %s/:替换文件中的所有行
  • .*:匹配任何字符
  • \ze:结束匹配,因此模式的其余部分未被替换
  • <Ctrl-r>/:从'/'寄存器(搜索寄存器)
  • 插入文本
  • //:无需替换

编辑:忘了后续部分。我建议同时删除这两个是:

:%s/.*<Ctrl-r>/.*/<Ctrl-r>//

答案 1 :(得分:12)

要在FOO之前删除同一行上的文字:

:s/^.*\(FOO\)/\1/

答案 2 :(得分:2)

从行首开始到突出显示的搜索模式的开头:0dn

从突出显示的搜索模式结尾到行尾:$N//e<Enter>lD

这些在大多数情况下都有效。

答案 3 :(得分:1)

我不能评论其他答案,所以我在这里回答,但我指的是xofon的回答: 只需在命令行中添加一个'%',即可对文件中的所有行进行操作。

删除所有行中“]”之后的所有字符

:%s/\(\]\).*$/\1/

删除文件中所有行中“ - ”之前的所有字符

:%s/^\( -- \).*/\1/

答案 4 :(得分:1)

要删除搜索匹配之前和之后的行中的所有文本,您还可以执行以下操作:

:g//norm gnd0PlD

这将在与最后一个搜索模式匹配的所有行上执行普通模式命令。命令是gn选择匹配项,d删除匹配项,0P将其粘贴到行的开头,l移动到左侧(刚粘贴的文本)和D删除直到行尾。据了解,gn是vim的最新版本,因此YMMV。