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

0

1) Com os comandos {e} no vim, posso pular para a linha anterior ou para a próxima linha em branco (ou início ou fim do arquivo). Como eu modifico esses comandos para pular para a linha anterior ou para a próxima sendo completamente em branco ou contendo apenas espaço em branco (ou início ou fim do arquivo)?

2) Como eu crio comandos para pular para o começo ou fim do bloco de código atual, definido pelo recuo atual? Por exemplo, eu quero mover 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
    
por Matt 02.05.2012 / 13:46

2 respostas

2

A pergunta 1 parece relativamente fácil (e minha resposta provavelmente é um pouco ingênua):

nnoremap } /^\s*$<CR>
nnoremap { ?^\s*$<CR>

Mas você deve encontrar outro atalho, eu acho.

Além disso, você já tem gg para pular para a primeira linha do buffer e G para pular para a última linha. Não é suficiente?

Eu não sei como responder à pergunta 2 de maneira simples. Você tentou objeto de recuo de vim ?

    
por 02.05.2012 / 14:11
1

Combinando as ótimas dicas de romainl e garyjohn, consegui a funcionalidade exata 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
    
por 03.05.2012 / 12:29

Tags