предшествует или сопровождается?
Если что-то начинается с 'abc', за которым (сразу) не следует 'defg', вам нужно решение bmdhacks .
Если это что-то, начинающееся с 'abc', которому (сразу) не предшествует 'defg', вам нужен отрицательный взгляд сзади:
/\%(defg\)\@<!abc /
Это будет соответствовать любому вхождению 'abc', если оно не является частью 'defgabc'. Подробнее см. :help \@<!
.
Если вы хотите сопоставить 'abc', если оно не является частью 'defg. * Abc', просто добавьте .*
:
/\%(defg.*\)\@<!abc /
Соответствие 'abc' только в строках, где defg не встречается, похоже:
/\%(defg.*\)\@<!abc \%(.*defg\)\@!/
Хотя, если вы просто делаете это для замены, вы можете сделать это проще, комбинируя :v//
и :s//
:%v/defg/s/abc /<whatever>/g
Это заменит '' на 'abc' во всех строках, которые не содержат 'defg'. Подробнее см. :help :v
.