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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.