正则表达式/ Vim:匹配除模式之外的所有内容,其中模式是多行的?

jle*_*wis 4 regex vim

在Vim中有没有办法执行类似的操作

:v/PATTERN/d 
Run Code Online (Sandbox Code Playgroud)

PATTERN是多行正则表达式模式?我确信在脚本中有一种方法可以做到这一点,但我很好奇是否可以只使用标准的正则表达式替换或Vim命令,因为在这一点上,它比实际需要更具学术性.

我的例子如下:

asdf

begin
   blah
end

asdf

alsdfjasf

begin
   random stuff
end
...
Run Code Online (Sandbox Code Playgroud)

我想用它们之间的线条来获得开始/结束的块,但忽略块之外的所有内容,最终结束

begin
   blah
end

begin
   random stuff
end
...
Run Code Online (Sandbox Code Playgroud)

我的想法是做的

:v/begin\_.\{-}end/d 
Run Code Online (Sandbox Code Playgroud)

哪里一切都不匹配,将被删除甚至复制到注册,但显然:v和:g只适用于单行.

然后,我开始沿着运行替代品的路径,用begin\_.\{-}end无法匹配模式的空字符串替换所有内容,但我无法掌握如何使用look-behinds或任何东西来实现.正则搜索时,正则表达式完全正常,但我无法弄清楚如何告诉正则表达式引擎找到所有这些模式.有任何想法吗?