2012-02-22 12 views
22

はVimので、私は頻繁に自分自身をファイルに前または次の倍にジャンプし、迅速ZにKまたはZJをやりたいと思っ見つけます。問題は、私は頻繁にをスキップしてすべての開いた折り目をスキップし、最も近い閉じた折り目にジャンプすることです。Vimで閉じた折り畳みにジャンプすることはできますか?

これを行う方法はありますか?マニュアルにはキーマップが組み込まれていません。

答えて

22

上記の動作を実装する以下のマッピングを提案します。

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

+0

@David:ありがとう!私はジャンプループを単純化し、所望の方向に折り目が閉じていなければカーソルを所定の位置に保つために、コードをリファクタリングしました。 (後者の振る舞いは、下/上に折り畳みが見つからない場合、 'zj' /' zk'コマンドの動作に従います。) –

+0

@ib。変更されたスクリプトを提供していただけますか? –

-1

いいえ、私が知っている限り、それを行う方法でビルドがありません。しかし、面白いアイデア。私は、現時点ではいくつかの時間を持っていた場合

することは、私はそれを行う方法を把握しようとするかもしれない - 忙しくて、生憎、今日私はあなたをお勧めすることができ、すべてはDetecting a folded line or an incremental search質問(特にfoldclosed機能)を見ることです自分で機能させるようにしてください。折りたたみが開いている場合は、すべての行をチェックし、その行に沿って何かをスキップしてください。

関連する問題