modificando comandos de salto de parágrafo do vim para linhas ou blocos de código contendo espaços em branco

modificando comandos de salto de parágrafo do vim para linhas ou blocos de código contendo espaços em branco

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 ggpular para a primeira linha do buffer e Gpular 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

informação relacionada