zkで折り畳みを移動する時、折り畳み尻ではなく折り畳み頭にジャンプする関数
Vimのバインドzj zkで次の折り畳み、前の折り畳みにジャンプすることができるが、zjはまだ良いとして、zkは折り畳みの末尾にジャンプする。
これではもし移動先の折り畳みが折り畳まれていた場合、一体どこにジャンプしたのか分からない。
尻ではなく頭にジャンプしてほしい。
そんなわけで、カーソルより前の折り畳みの頭に跳ぶ関数作った。
nnoremap zk :<C-u> call ZkJump_to_foldhead()<CR> function! ZkJump_to_foldhead() "{{{ mark ' for i in range(v:count1) call s:__zkJump_to_foldhead_go() endfor mark ' endfunction "}}} function! s:__zkJump_to_foldhead_go() "{{{ let start_lv = foldlevel('.') keepj norm! zk if start_lv > 1 && foldlevel('.') < start_lv "自分の親を飛び越している可能性 keepj norm! zj else let fc_head = foldclosed('.') if fc_head != -1 "ジャンプ先がclosed_foldingの場合 exe fc_head else exe s:__jumpto_last_innerfoldhead() endif endif endfunction "}}} function! s:__jumpto_last_innerfoldhead() "{{{ let foldtail = line('.') keepj norm! [z let fh = line('.') while fh < foldtail keepj norm! zj let old_fh = fh let fh = line('.') endwhile return old_fh endfunction "}}}