2012-02-22 4 views
22

는 빔, 나는 자주 자신이 파일에 이전 또는 다음 배에 뛰어 빠른 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

아니요, 제가 아는 한 멀리 할 수있는 방법으로 빌드가 없습니다. 흥미로운 아이디어.

나는 순간에 약간의 시간이 있다면, 나는 그것을 할 수있는 방법 알아 내려고 시도 할 수 있습니다 - 요즘 바쁜, unfortunatelly을 모두 난 당신이 Detecting a folded line or an incremental search 질문 (특히 foldclosed 기능) 보는 것입니다 제안 할 수 있습니다 그리고 스스로 기능을 만드십시오. 접기가 열려 있으면 모든 줄을 확인하고 그 줄을 건너 뜁니다.

관련 문제