Skip to content

Instantly share code, notes, and snippets.

@farfanoide
Last active October 30, 2015 18:44
Show Gist options
  • Save farfanoide/ba66aaf0b94de6c36e77 to your computer and use it in GitHub Desktop.
Save farfanoide/ba66aaf0b94de6c36e77 to your computer and use it in GitHub Desktop.

Formateando bloques de texto

Problema: Quiero mantener los párrafos de mis archivos de texto dentro del las 80 lineas para facilitar su lectura.

Solucion: Vim sabe formatear texto con los comandos gw{motion} o gq{motion}.

En modo normal podemos indicarle a Vim que formatee un area de texto mediante gw{motion} o gq{motion} siendo gw un formateador interno de Vim el cual respeta el actual filetype un formateador interno de Vim el cual respeta el actual filetype y gq un formateador externo configurado mediante formatprg o formatxpr.

Mas allá de estas diferencias solo cabe destacar que gw devuelve el cursor a la posición previa al formateo mientras que gq no.

Por defecto se formatea a 80 caracteres máximo pero esto es configurable mediante textwidth. Esto repercute también en nuevas lineas de texto ya que Vim las truncara automáticamente al llegar al tope impuesto sin importar el tipo de archivo que estemos editando.

:set textwidth=100

Una solución a esto es setear dicha variable únicamente cuando la utilicemos o incluso podemos delegar a nuestro editor:

au BufNewFile,BufRead *.md setlocal textwidth=80

Ejemplos:

Así como yy copia toda la linea donde se encuentra el cursor, podemos ahorrarnos escribir un motion completo para gw cuando solo queremos trabajar sobre la linea actual ejecutando gww.

Ejecutando gww sobre el siguiente texto:

# Antes

Lorem ipsum dolor sit amet, consectetur       adipisicing elit, sed do eiusmod tempor incididunt ut labore et [cursor] dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

# Despues

Lorem ipsum dolor sit amet, consectetur       adipisicing elit, sed do eiusmod
tempor incididunt ut labore et [cursor] dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.

[cursor] representa la posición de nuestro cursor al momento de ejecutar el comando.

Notar que no se borran los espacios extras entre consectetur y adipisicing

Ya dijimos que gq utiliza un programa externo, pondremos entonces como ejemplo a par

:set formatprg=par\ -w80

Repitiendo el ejemplo anterior el resultado esta vez es diferente:

# Antes

Lorem ipsum dolor sit amet, consectetur       adipisicing elit, sed do eiusmod tempor incididunt ut labore et [cursor] dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

# Despues

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
[cursor]

Otros ejemplos:

  • gwgg: Formatear desde la linea actual hasta el principio del documento.
  • gwG: Formatear desde la linea actual hasta el final del documento.
  • gwip: Formatear el párrafo actual.
  • gwj: Formatear la linea actual y la siguiente hacia abajo.
  • gwk: Formatear la linea actual y la siguiente hacia arriba.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment