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

问题描述 投票:0回答:2

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

引用vim帮助:

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

我已经设法在范围内与:foldopen一起解决这个问题,但有更好的方法吗?

vim neovim
2个回答
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//'

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
© www.soinside.com 2019 - 2024. All rights reserved.