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: