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)
我在这里缺少什么?
您可以使用
/\(bar.*\)\@<!foo\(.*bar\)\@!
非常神奇的模式:
/\v(bar.*)@<!foo(.*bar)@!
详情
(bar.*)@<!
- 负面回顾:没有 bar
后跟当前位置右侧的任何 0 个或更多字符
foo
- 一句话foo
(.*bar)@!
- 否定前瞻:在当前位置右侧的任意 0 个或多个字符后不允许 bar
。
我想使用模式匹配在 vim 中使用搜索和突出显示。我的第一个搜索条件是在一行中查找字符串 foo
。我的第二个搜索条件是如果同一行中包含 bar
,则跳过所有 foo
。我不想删除所有包含 bar
的行。我的第一个搜索条件符合以下条件:
/foo
我的第二个标准不符合:
/foo.*\(bar\)\@<!
示例文本:
1 foo
2 foo bar xx
3 fooobar
4 bar
5 xxx
(这里我只想强调行号1)
我在这里缺少什么?
您可以使用
/\(bar.*\)\@<!foo\(.*bar\)\@!
非常神奇的模式:
/\v(bar.*)@<!foo(.*bar)@!
详情
(bar.*)@<!
- 负面回顾:没有bar
后跟当前位置右侧的任何 0 个或更多字符foo
- 一句话foo
(.*bar)@!
- 否定前瞻:在当前位置右侧的任意 0 个或多个字符后不允许bar
。