Есть ли в Vim способ выполнить операцию, аналогичную
:v/PATTERN/d
, где PATTERN - это многострочный шаблон регулярных выражений ?Я уверен, что есть способ сделать это в сценарии, но мне в основном любопытно, можно ли это сделать, используя только стандартные подстановки регулярных выражений или команды Vim, потому что на данный момент это скорее академическое, чем реальная потребность.
Мой пример следующий:
asdf
begin
blah
end
asdf
alsdfjasf
begin
random stuff
end
...
Я хочу получить блоки начала / конца со строками между ними, но игнорировать все, что находится за пределами блоков, в конечном итоге заканчивая
begin
blah
end
begin
random stuff
end
...
Мои мысли должны были сделать
:v/begin\_.\{-}end/d
, где все не соответствовало бы тому, что было бы удалено или даже скопировано для регистрации, но очевидно: v и: g работают только в одной строке.
Затем я начал идти по пути выполнения замены и заменять все пустой строкой, которая НЕ соответствовала шаблону begin\_.\{-}end
, но я не могу понять, как этого добиться, используя обходные пути или что-то еще.При регулярном поиске регулярное выражение прекрасно работает, но я не могу понять, как сказать механизму регулярных выражений найти все, НО этот шаблон.Есть идеи?