modificar los comandos de salto de párrafo de vim a líneas o bloques de código que contienen espacios en blanco

modificar los comandos de salto de párrafo de vim a líneas o bloques de código que contienen espacios en blanco

1) Con los comandos {y} en vim puedo saltar a la línea anterior o siguiente completamente en blanco (o al principio o al final del archivo). ¿Cómo modifico estos comandos para saltar a la línea anterior o siguiente que esté completamente en blanco o que contenga solo espacios en blanco (o el principio o el final del archivo)?

2) ¿Cómo creo comandos para saltar al principio o al final del bloque de código actual, definido por la sangría actual? Por ejemplo, quiero pasar fácilmente de la línea F a la línea D o G (o a la línea C o H):

A
  B
  C
    D
    E
    F
    G
  H
I

Respuesta1

La pregunta 1 parece relativamente fácil (y mi respuesta probablemente sea un poco ingenua):

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

Pero creo que deberías encontrar otro atajo.

También ya tienes ggque saltar a la primera línea del buffer y Gsaltar a su última línea. ¿No es eso suficiente?

No sé cómo responder a la pregunta 2 de forma sencilla. Has probadoobjeto-sangría-vim?

Respuesta2

Combinando los excelentes consejos de romainl y garyjohn obtuve la funcionalidad exacta que estaba buscando para la parte n.° 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

información relacionada