Vim搜索模式'foo',但跳过包含'bar'的行而不删除任何行

问题描述 投票:0回答:1

我想使用搜索并使用模式匹配在vim中突出显示。我的第一个搜索条件是在一行中查找字符串foo。我的第二个搜索条件是,如果同一行中包含foo,则跳过所有bar。我不想删除所有包含bar的行。我的第一个搜索条件满足以下条件:

/foo

我的第二个条件不符合:

/foo.*\(bar\)\@<!

示例文本:

1 foo
2 foo bar xx
3 fooobar
4 bar
5 xxx

((在此我仅要突出显示行号1和3)

我在这里想念的是什么?

参考:http://vimdoc.sourceforge.net/htmldoc/pattern.html

regex search design-patterns vim regular-language
1个回答
0
投票

您可以使用

/\(\<bar\>.*\)\@<!foo\(.*\<bar\>\)\@!

非常魔术模式:

/\v(<bar>.*)@<!foo(.*<bar>)@!

详细信息

  • [(<bar>.*)@<!-后面是否定词:没有完整的单词bar,后跟当前位置右侧的0个或多个字符
  • [foo-单词foo] >>
  • [(.*<bar>)@!-否定前瞻:在当前位置右侧的0个或多个字符之后,不允许整个单词bar
© www.soinside.com 2019 - 2024. All rights reserved.