Vim:找到任何不以"WORD"结尾的行

app*_*454 15 vim

在vim中,如何搜索任何以(在这种情况下)单词"DROP"结尾的行?

Mer*_*ham 24

/\(DROP\)\@<!$
Run Code Online (Sandbox Code Playgroud)

这使用零宽度负后视断言.它发现刚刚结束的线,只有找到行没有结局DROP紧接他们.

如果要查找整行,可以使用:

/^.*\(DROP\)\@<!$
Run Code Online (Sandbox Code Playgroud)

请注意,您必须环绕DROP,\( .. \)因为前瞻和后瞻断言只匹配单个"原子".因此,您可以使用parens将单词分组为单个原子.

如果您尝试过/DROP\@<!$,那么您将获得类似于粗体部分的搜索结果:

abcdef
测试测试DRO
12345DROP
12345 DRO
12345


虽然它没有使用VIM正则表达式语法,但是在这个页面上有一个关于这些断言的教程:

您也可以在VIM中键入此命令以获取有关命令的帮助:

:help \@<!
Run Code Online (Sandbox Code Playgroud)

类似的断言:

\@=
\@<=
\@!
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案.根据你想对这些行做什么,`:global`可能会派上用场:`:v/\(DROP \)$/norm ADROP`将`DROP`添加到不以`DROP`结尾的每一行. (6认同)