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

Vim search pattern 'foo' but skip lines containing 'bar' without deleting any line

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

/foo

我的第二个标准不符合:

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

示例文本:

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

(这里我只想强调行号1)

我在这里缺少什么?

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

您可以使用

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

非常神奇的模式:

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

详情

  • (bar.*)@<! - 负面回顾:没有 bar 后跟当前位置右侧的任何 0 个或更多字符
  • foo - 一句话foo
  • (.*bar)@! - 否定前瞻:在当前位置右侧的任意 0 个或多个字符后不允许 bar