让我们说这是我的文字:
这是我的文字这
是我的文字这是我的文字
我的文字就是这个
我想突出显示除模式之外的所有文本并删除突出显示的文本.
pe text
:这一定是结果.
文字
texttext
文本
我发现代码如何选择除pattern之外的所有文本:
\%(\%(.{-}\)\@!text\zs\)*
但我不知道如何删除所有突出显示的文本.
这不起作用:
:%s/\%(\%(.{-}\)\@!bell\zs\)*//
谁能帮我?
Ben*_*oit 13
试试这个:
:%s/\(^\|\(text\)\@<=\).\{-}\($\|text\)\@=//g
Run Code Online (Sandbox Code Playgroud)
说明:
\(^\|\(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”.
Run Code Online (Sandbox Code Playgroud)
另一种方法:
:help match()
帮助您设计):%s/.*/\=repeat('text', matchcount('text', submatch(0)))
原谅我,因为我不是vim专家,但是不会在搜索之前v
找到反向,这样你就可以做这样的事情了?
:v/pattern/d
Run Code Online (Sandbox Code Playgroud)
我:DeleteExcept
在PatternsOnText 插件中实现了 Benoit 巧妙的正则表达式作为自定义命令。它也提供其他相关命令,例如:SubstituteExcept
或:SubstituteInSearch
。
OP的例子是
:%DeleteExcept /text/
Run Code Online (Sandbox Code Playgroud)
与@Benoit 的显式命令 ( :%s/\(^\|\(text\)\@<=\).\{-}\($\|text\)\@=//g
) 相比,它要简单得多。