Шаблон поиска Vim 'foo', но пропускать строки, содержащие 'bar', не удаляя ни одной строки - PullRequest
1 голос
/ 28 мая 2020

Я хочу использовать поиск и выделение в vim по шаблону. Мой первый критерий поиска - искать строку foo в строке. Мой второй критерий поиска - пропустить все foo, если в той же строке содержится bar. Я не хочу удалять все строки, содержащие bar. Мой первый критерий поиска соответствует следующему:

/foo

Мой второй критерий не соответствует:

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

Пример текста:

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

(здесь я хочу для выделения только номеров строк 1)

Что мне здесь не хватает?

Ссылка: http://vimdoc.sourceforge.net/htmldoc/pattern.html

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать

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

В режиме очень magi c:

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

Подробности

  • (bar.*)@<! - отрицательный просмотр назад: нет bar, за которым следует любой 0 или более символов справа от текущего местоположения
  • foo - слово foo
  • (.*bar)@! - a отрицательный просмотр вперед: не допускается bar после любых 0 или более символов справа от текущего местоположения.
...