はVimので、私は頻繁に自分自身をファイルに前または次の倍にジャンプし、迅速ZにKまたはZJをやりたいと思っ見つけます。問題は、私は頻繁にをスキップしてすべての開いた折り目をスキップし、最も近い閉じた折り目にジャンプすることです。Vimで閉じた折り畳みにジャンプすることはできますか?
これを行う方法はありますか?マニュアルにはキーマップが組み込まれていません。
はVimので、私は頻繁に自分自身をファイルに前または次の倍にジャンプし、迅速ZにKまたはZJをやりたいと思っ見つけます。問題は、私は頻繁にをスキップしてすべての開いた折り目をスキップし、最も近い閉じた折り目にジャンプすることです。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
@David:ありがとう!私はジャンプループを単純化し、所望の方向に折り目が閉じていなければカーソルを所定の位置に保つために、コードをリファクタリングしました。 (後者の振る舞いは、下/上に折り畳みが見つからない場合、 'zj' /' zk'コマンドの動作に従います。) –
@ib。変更されたスクリプトを提供していただけますか? –