我需要以编程方式删除一系列行,这些行由两个变量定义。使用:d
(例如exec l:begin l:end 'd _'
)可以实现这一点,但是当折叠到位时,这不会达到预期效果。
引用vim帮助:
对于在缓冲线上工作的Ex命令,范围被调整为始终从闭合折叠的第一行开始,并在闭合折叠的最后一行结束。
我已经设法在范围内与:foldopen
一起解决这个问题,但有更好的方法吗?
假设输入文件看起来像(假设set foldmethod=marker
):
{{{
1
2
3
4
5
}}}
7
8
9
我们想用3
和4
删除行,然后用exec begin','end 'd _'
提出的解决方案let begin = 4 | let end = 5
会起作用。但是,如果折叠关闭:
+-- 7 lines: ----------------------------------------------------------
7
8
9
你需要这样的东西:
exec 'folddoc '.begin.','.end.'s/.*//g'
exec 'folddoc '.begin.','.end.'s/^$\n//'
您可以暂时禁用折叠,而不是使用:foldopen
。在互动环节中,我会用zi
... zi
或zn
... zN
这样做。
在脚本/插件中,我将在try..catch
中使用相应的Ex命令:
let l:save_foldenable = &l:foldenable
setlocal nofoldenable
try
exec l:begin l:end 'd _
finally
let &l:foldenable = l:save_foldenable
endtry