Vim - 删除行范围,不会影响折叠

时间:2018-04-02 02:58:28

标签: vim neovim

我需要以编程方式删除一系列行,这些行由两个变量定义。使用:d(例如exec l:begin l:end 'd _')可以实现这一点,但是当折叠到位时,这不符合预期。

引用vim帮助:

  

对于在缓冲行上工作的Ex命令,范围将始终调整为   从闭合折叠的第一行开始,到闭合折叠的最后一行结束。

我设法在:foldopen范围内解决了这个问题,但还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

假设输入文件看起来像(假设set foldmethod=marker):

{{{                                                                             
1                                                                               
2                                                                               
3                                                                               
4                                                                               
5                                                                               
}}}                                                                             
7
8
9

我们希望删除包含34的行,然后使用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 ... zizn ... 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