Vim, 22 , 18 pulsaciones de teclas
O <esc>J:h r<cr>lyEZZ<C-v>{@"
Gran crédito a @Udioica por llegar a una increíble respuesta vim que . Esta respuesta no contiene asteriscos, con la esperanza de ganar la recompensa.
Explicación:
La entrada se escribe antes que el resto del programa. A Udioica se le ocurrió este increíble truco. La escritura <n>O <esc>
creará una pirámide de espacios y una línea vacía, siempre que haya :set autoindent
habilitado. Esta opción se activa de forma predeterminada en vim 8 y neovim, aunque no en versiones anteriores de vim. Como esto también crea una línea extra, usamosJ
para unir esta línea con la siguiente, lo que efectivamente elimina la línea debajo de nosotros.
Ahora, en este punto, necesitamos reemplazar todos estos espacios con asteriscos. Si no me preocupara usar asteriscos en mi código, solo seleccionaría visualmente todo <C-v>{
y escribiríar*
, lo que reemplaza cada carácter de la selección con un asterisco. Pero no puedo hacer eso.
Entonces abrimos las páginas de ayuda a :h r
. Lo interesante de esto es que en la ventana vim, esta página se muestra como:
r
r{char} Replace the character under the cursor with {char}.
...
Con el cursor en la primera 'r'. Sin embargo, el archivo en sí contiene este texto:
*r*
r{char} Replace the character under the cursor with {char}.
...
Muy conveniente Entonces nos movemos sobre un carácter con l
, y tiramos el texto r*
con yE
([y] ank al [E] nd de esta palabra).
Para cerrar este búfer, usamos el acceso directo para guardar un archivo ZZ
. Ahora, seleccionamos visualmente nuestros espacios y ejecutamos el texto extraído como si lo hubiéramos escrito al hacerlo @"
. Esto funciona porque "@" ejecuta el siguiente registro como pulsaciones de teclas vim y "es el registro predeterminado para la extracción".