Можно ли прыгать на закрытые складки в Vim? - PullRequest
23 голосов
/ 23 февраля 2012

В Vim мне часто хочется быстро z k или z j , чтобы перейти к предыдущему илиследующий раз в файле.Проблема в том, что я часто хочу пропустить все открытые сгибы и просто перейти к ближайшему закрытому сгибу.

Есть ли способ сделать это?Я не вижу встроенной раскладки клавиатуры в руководстве.

Ответы [ 2 ]

25 голосов
/ 23 февраля 2012

Позвольте мне предложить следующие отображения, реализующие описанное поведение.

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 голосов
/ 23 февраля 2012

Нет, насколько я знаю, не существует встроенного метода для этого. Интересная идея, хотя.

Если бы у меня было немного времени, я мог бы попытаться найти способ сделать это - к сожалению, будучи занятым в наше время, все, что я могу вам предложить, - это посмотреть на Обнаружение сложенной линии или пошаговый поиск вопрос (в частности, функция foldclosed) и попробуйте создать функцию самостоятельно. Проверяя каждую строку, если сгиб открыт, пропустите ... что-то в этом направлении.

...