Vim:查找任何不以“WORD”结尾的行

16
在vim中,我如何搜索不以(在此情况下)单词“DROP”结尾的任何行?
1个回答

25
/\(DROP\)\@<!$

这里使用了零宽度负回顾断言。它仅查找换行符,并且只查找前面没有紧跟着DROP的换行符。

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

/^.*\(DROP\)\@<!$

请注意,您必须使用\( .. \)DROP包围起来,因为向前查找和向后查找断言只会匹配一个“原子”。因此,您使用括号将单词分组为单个原子。
如果您尝试/DROP\@<!$,那么您将获得以下粗体部分的搜索结果:

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

您也可以在VIM中输入此命令以获取帮助:

:help \@<!

类似的断言:
\@=
\@<=
\@!

6
非常好的答案。根据您想要对这些行进行的操作,:global 可能会有用: :v/\(DROP\)$/norm ADROP 会将 DROP 添加到每一行末尾不是以 DROP 结尾的行。 - romainl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接