Faça os movimentos {} do vim pularem dobras

2

Adoro os movimentos { e } do vim, que saltam para a linha vazia seguinte / anterior.

Recentemente, usei mais a dobra e, apesar de ser um ótimo recurso, ele não faz o que eu esperaria com relação aos movimentos { e } . Se houver uma linha vazia na dobra, então { e } irão parar lá, abrindo assim a dobra.

Existe uma maneira de remapear { e } para ignorar dobras? Ou seja, mesmo que houvesse linhas vazias dentro de uma dobra, { e } não parariam lá, mas buscariam a próxima linha vazia desdobrada? Isso se encaixaria melhor com o que eu esperaria.

    
por Jeff Terrell Ph.D. 06.11.2014 / 18:00

2 respostas

7

Primeira pergunta:

Você deve remover block do valor padrão de 'foldopen' :

set foldopen-=block

Veja :help 'foldopen' .

Segunda pergunta:

Você pode tentar esses mapeamentos

nnoremap <expr> } foldclosed(search('^$', 'Wn')) == -1 ? "}" : "}j}"
nnoremap <expr> { foldclosed(search('^$', 'Wnb')) == -1 ? "{" : "{k{"
    
por 06.11.2014 / 22:50
0

Este método leva em conta várias dobras consecutivas.

function! s:SkipFold(direction) abort
  let l:currentLine = line('.')
  while foldclosed(l:currentLine) != -1
    let l:currentLine = search('^$', (a:direction ? 'Wn' : 'Wnb'))
    if l:currentLine == 0
      if a:direction
        call cursor(line('$'), strlen(getline(line('$'))))
      else
        call cursor(1, 1)
      endif
      break
    endif
    call cursor(l:currentLine, 0)
  endwhile
endfunction

nnoremap <silent>} }:call <SID>SkipFold(1)<cr>
nnoremap <silent>{ {:call <SID>SkipFold(0)<cr>
    
por 18.02.2017 / 01:02

Tags