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

时间:2012-02-22 21:12:50

标签: vim code-folding

在Vim中,我经常发现自己想要快速 z k z j 跳转到文件中的上一个或下一个折叠。问题是,我经常想跳过所有打开的折叠,然后跳到最近的闭合折叠。

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

2 个答案:

答案 0 :(得分:25)

让我提出以下映射来实现所描述的行为。

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

答案 1 :(得分:0)

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

如果我现在有一些时间,我可能会想办法做到这一点 - 不幸的是,现在很忙,我建议你看看 Detecting a folded line or an incremental search 问题(尤其是foldclosed函数)并尝试自己创建一个函数。检查每一行,如果折叠处于打开状态,请跳过这些行中的某些内容。