我需要以编程方式删除一系列行,这些行由两个变量定义。使用:d
(例如exec l:begin l:end 'd _'
)可以实现这一点,但是当折叠到位时,这不符合预期。
引用vim帮助:
对于在缓冲行上工作的Ex命令,范围将始终调整为 从闭合折叠的第一行开始,到闭合折叠的最后一行结束。
我设法在:foldopen
范围内解决了这个问题,但还有更好的方法吗?
答案 0 :(得分:1)
假设输入文件看起来像(假设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//'
答案 1 :(得分:0)
您可以暂时禁用折叠,而不是使用: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