是否有可能跳到Vim中的关闭折叠?

问题描述:

在Vim中,我经常发现自己想要做一个快速žķžĴ跳转到上一个或下一个折叠在一个文件中。问题是,我经常想跳过所有打开的折叠,并跳到最近的封闭折叠。是否有可能跳到Vim中的关闭折叠?

有没有办法做到这一点?我在手册中没有看到内置的键盘映射。

让我建议实现上述行为的以下映射。

nnoremap <silent> <leader>zj :call NextClosedFold('j')<cr> 
nnoremap <silent> <leader>zk :call NextClosedFold('k')<cr> 
function! NextClosedFold(dir) 
    let cmd = 'norm!z' . a:dir 
    let view = winsaveview() 
    let [l0, l, open] = [0, view.lnum, 1] 
    while l != l0 && open 
     exe cmd 
     let [l0, l] = [l, line('.')] 
     let open = foldclosed(l) < 0 
    endwhile 
    if open 
     call winrestview(view) 
    endif 
endfunction 
+0

令人敬畏。奇迹般有效。非常感谢! – David 2012-02-23 17:11:58

+0

@David:谢谢!我对代码进行了重构,以简化跳转循环,并在所需方向没有关闭折叠的情况下将光标保持在原位。 (后者的行为符合'zj' /'zk'命令的行为,当在下面/上面找不到折叠时。) – 2012-02-24 07:11:37

+0

@ib。你能否提供更改后的脚本? – 2016-08-23 09:57:23

不,没有(据我所知)一种构建方法来做到这一点。虽然有趣的想法。

如果我在此刻一段时间,我可能会尝试找出一个办法做到这一点 - 可惜的是,忙碌现在我可以建议你是看Detecting a folded line or an incremental search问题(特别是foldclosed功能)并尝试自己做一个功能。检查每一行,如果折叠打开,跳过...沿着这些行。