让我们说这是我的文字:
这是我的文字
是我的文字这是我的文字
我的文字就是这个
我想突出显示除模式以外的所有文字并删除突出显示的文字
体育text
:这必须是结果。
文字
texttext
文字
我找到了代码如何选择除模式之外的所有文本:
\%(\%(.{-}\)\@!text\zs\)*
但我不知道如何删除所有突出显示的文字
这不起作用:
:%s/\%(\%(.{-}\)\@!bell\zs\)*//
任何人都可以帮助我吗?
答案 0 :(得分:13)
试试这个:
:%s/\(^\|\(text\)\@<=\).\{-}\($\|text\)\@=//g
说明:
\(^\|\(text\)\@<=\) # means start of line, or some point preceded by “text”
.\{-} # as few characters as possible
\($\|text\)\@= # without globbing characters, checking that we reached either end of line or occurrence of “text”.
另一种方法:
:help match()
以帮助您设计):%s/.*/\=repeat('text', matchcount('text', submatch(0)))
答案 1 :(得分:7)
请原谅我,因为我不是vim专家,但不会在v
之前找到相反的搜索,以便你可以做这样的事情吗?
:v/pattern/d
答案 2 :(得分:4)
我在我的PatternsOnText plugin中将Benoit的聪明正则表达式实现为自定义:DeleteExcept
命令。它还提供其他相关命令,如:SubstituteExcept
或:SubstituteInSearch
。
OP的例子是
:%DeleteExcept /text/
与@ Benoit的显式命令(:%s/\(^\|\(text\)\@<=\).\{-}\($\|text\)\@=//g
)相比,它更简单。