![modificando comandos de salto de parágrafo do vim para linhas ou blocos de código contendo espaços em branco](https://rvso.com/image/1313355/modificando%20comandos%20de%20salto%20de%20par%C3%A1grafo%20do%20vim%20para%20linhas%20ou%20blocos%20de%20c%C3%B3digo%20contendo%20espa%C3%A7os%20em%20branco.png)
1) Com os comandos { e } no vim posso pular para a linha anterior ou seguinte completamente em branco (ou início ou fim do arquivo). Como modifico esses comandos para pular para a linha anterior ou seguinte completamente em branco ou contendo apenas espaços em branco (ou início ou fim do arquivo)?
2) Como crio comandos para pular para o início ou fim do bloco de código atual, definido pelo recuo atual? Por exemplo, quero passar facilmente da linha F para a linha D ou G (ou para a linha C ou H):
A
B
C
D
E
F
G
H
I
Responder1
A pergunta 1 parece relativamente fácil (e minha resposta provavelmente é um pouco ingênua):
nnoremap } /^\s*$<CR>
nnoremap { ?^\s*$<CR>
Mas você deveria encontrar outro atalho, eu acho.
Além disso, você já precisa gg
pular para a primeira linha do buffer e G
pular para a última linha. Isso não é suficiente?
Não sei responder à pergunta 2 de maneira simples. Você tentouvim-indent-objeto?
Responder2
Combinando as ótimas dicas de romainl e garyjohn, obtive exatamente a funcionalidade que procurava para a parte 1:
nnoremap <silent> { :call MyPrevParagraph()<CR>
nnoremap <silent> } :call MyNextParagraph()<CR>
function MyNextParagraph()
let myline = search('^\s*$', 'W')
if myline <= 0
execute 'normal! G$'
else
execute 'normal! '.myline.'G0'
endif
endfunction
function MyPrevParagraph()
let myline = search('^\s*$', 'bW')
if myline <= 0
execute 'normal! gg0'
else
execute 'normal! '.myline.'G0'
endif
endfunction