Tenemos la siguiente imagen ASCII:
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: