Padding con Vim

Tenemos la siguiente imagen ASCII:

Captura de pantalla 2016-07-22 a las 20.06.50

Si nos fijamos, hay líneas de distintas longitudes (las más largas son de 80 caracteres). Queremos hacer padding (rellenar) con el carácter ‘#’ para que todas las líneas sean de la misma longitud (80). Podemos hacerlo con un pequeño script en cualquier lenguaje de programación, pero la idea es: ¿se puede hacer con una única línea que use inteligentemente expresiones regulares y funciones en Vim? Sí 🙂

:%s/\v^.*$/\= submatch(0) . repeat("#", 80 - len(submatch(0)))

\v : magia, literal (ver la ayuda). Todos los caracteres que aparezcan tras este patrón se tomarán como caracteres especiales (no es necesario escaparlos). Efectivamente, olvídate de poner \(.*\) para hacer agrupaciones, basta con \v(.*)

^.*$ : desde el comienzo hasta el final de línea

\=  : comienzo de función

submatch(0) : primer match de la expresión regular (es la línea completa)

.  : concatenar con lo siguiente

repeat(«#», 80 – len(submatch(0)))  : repetir el carácter #  x veces, donde x = 80 – longitud de línea

Éste es el resultado:

Captura de pantalla 2016-07-22 a las 20.19.27

Cambiar el tamaño de letra en GVim

Supongamos que quieres ver el tamaño de letra en GVim siempre a 9 puntos en lugar de a 10.

:set guifont=Monospace 9

Donde Monospace es el tipo de letra que quieras usar. Ojo con la pues es la forma de «escapar» el espacio en blanco antes del número que especifica el tamaño de letra.

Desde el menú Edit / Select font puedes cambiar el tipo y tamaño a mano. También usando el siguiente comando:

:set gfn=*

Finalmente si quieres conservar tu selección al reiniciar GVim, crea el fichero ~/.gvimrc con el mismo set que el del primer ejemplo.

Contar palabras en Vim

Problema: la longitud máxima del abstract de tu artículo es de 150 palabras. Tienes texto antes y después del abstract, por lo que no es trivial contar las palabras sólo del resumen. ¡Pero usas Vim!

Solución: pulsar V para comenzar selección visual. Seleccionas el texto del abstract. Pulsa g y a continuación Ctrl+g. Verás el número de líneas, palabras y caracteres de la selección.

Plegar y desplegar secciones de texto en Vim

Supongamos que tienes 4 secciones en tu documento de texto. Quieres centrar tu atención sólo en la sección 2, de tal forma que el resto de secciones, queden plegadas. Puedes ver en la imagen adjunta lo que buscamos. Esa funcionalidad se conoce como «Code folding». Pero para los no iniciados, mejor plegar o desplegar secciones de texto. ¿Cómo se hace en Vim? Fácil. Seleccionas las líneas que quieras plegar (en modo Visual) y pulsas zf (la z la puedes recordar porque su forma parece que forme un pliegue) Para abrir un pliegue, pulsa zo (open). Para cerrarlo de nuevo zc (close).

Si cierras Vim y lo vuelves a abrir con el mismo fichero de texto, ¿se mantienen los pliegues? Por defecto, NO. Si quieres que se mantengan debes de teclear esto en tu .vimrc:

" Save folds
au BufWinLeave ?* mkview
au BufWinEnter ?* silent loadview