【发布时间】:2012-03-06 00:48:22
【问题描述】:
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 模式不匹配的空字符串替换所有内容,但我无法掌握如何使用后视或任何东西来实现这一点。正则表达式在搜索时工作得非常好,但我不知道如何告诉正则表达式引擎找到除该模式之外的所有内容。有什么想法吗?
【问题讨论】: