如何在vim中编写零宽度断言?

时间:2014-01-11 06:57:16

标签: vim

以下是我正在使用的原材料:

line1=a1 abc
line2=abc
line3=aba
line4=cbc 

我想匹配不包含字符串“abc”的行,结果是:

line3=aba
line4=cbc

我怎样才能在vim中获得它?也许表达式是perl中的(?!abc),我不知道如何在vim中编写正则表达式。

3 个答案:

答案 0 :(得分:3)

要匹配不以abc结尾的行,您可以用两种方式编写表达式。我的首选是非常神奇的

/\v.*(abc)@!/

并没有非常神奇:

/.*\(abc\)\@!/

我建议你花些时间阅读:

:help magic

答案 1 :(得分:1)

来自Power Of G

  

删除所有与模式不匹配的行。

     

:g!/<pattern>/d

当然,您可以替换最后的d来执行除删除行之外的其他操作...

答案 2 :(得分:1)

您似乎熟悉Perl正则表达式。您可能会对:help perl-patterns感兴趣,您可以在其中使用Vim等效的常见Perl正则表达式模式。在那里,您可以看到,对于零宽度负面预测,您需要\@!

对于其他零宽度模式,包括:help perl-patterns未列出的模式,请参阅:help /\@=及以下内容。同样有用的是\zs\ze,在许多情况下可以避免一些更复杂的零宽度匹配。