是否有可能跳到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
答
不,没有(据我所知)一种构建方法来做到这一点。虽然有趣的想法。
如果我在此刻一段时间,我可能会尝试找出一个办法做到这一点 - 可惜的是,忙碌现在我可以建议你是看Detecting a folded line or an incremental search问题(特别是foldclosed
功能)并尝试自己做一个功能。检查每一行,如果折叠打开,跳过...沿着这些行。
令人敬畏。奇迹般有效。非常感谢! – David 2012-02-23 17:11:58
@David:谢谢!我对代码进行了重构,以简化跳转循环,并在所需方向没有关闭折叠的情况下将光标保持在原位。 (后者的行为符合'zj' /'zk'命令的行为,当在下面/上面找不到折叠时。) – 2012-02-24 07:11:37
@ib。你能否提供更改后的脚本? – 2016-08-23 09:57:23