Temporada 01: iniciándose en Vim

10. Vim: macros

Publicado por

La tarea de editar texto puede resultar monótona a veces, sobre todo cuando se trabaja con porciones de texto que se parecen mucho, en las que se corrige el mismo tipo de error o se realiza el mismo tipo de modificación. Considera el siguiente ejemplo: tienes un archivo que contiene una lista; y quieres que esa lista sea numerada utilizando el editor (el uso de otro tipo de programas no es opción en este ejemplo).

enero
febrero
marzo
abril
mayo
junio
julio
agosto
septiembre
octubre
noviembre
diciembre

Supongo que lo primero que viene a tu mente es ingresar los números a mano, cada uno al inicio de cada línea, pero ¿no crees que es algo tedioso? Es decir, en este caso no es tanto problema, pues la lista es corta, pero ¿qué tal si en lugar de los meses del año, tenemos una lista con los nombres de un grupo grande de personas? La misma solución para el mismo problema con una cantidad de datos mucho mayor comienza a dar pereza ¿no? Al menos a mi sí.

¿No podría hacerlo otro?

Vote for Homer
Homero Simpson en campaña. Su lema: «¿No podría hacerlo otro?»

Afortunadamente, en estos casos Vim nos permite automatizar tareas repetitivas y monótonas. En la entrada sobre edición inteligente, te presenté el comando punto (.) como una manera de realizar trabajo repetitivo con Vim. Sin embargo, no todas las tareas repetitivas constan de un solo comando, por lo que nuestro amigo . a veces no es suficiente.

El editor nos ofrece otro mecanismo para automatizar tareas de edición: las macros. Una macro es una secuencia de movimientos y órdenes almacenadas en memoria, específicamente en alguno de los veintiséis registros con nombre; el hecho de que sean almacenadas en estos registros es importante, pues es a través del nombre del registro que podemos reproducir la macro.

La forma más intuitiva de crear una macro es grabarla. Esto significa, decirle a Vim el momento en que queremos que «ponga atención y tome nota» de lo que hacemos y lo guarde en un registro ¿cuál? El que le digamos. La forma de decirle al editor: «¡Oye! Quiero que grabes una macro» es el comando q en modo -- NORMAL --, seguido del nombre del registro (una de las veintiséis letras del teclado). Por ejemplo qa significa: «¡Oye! Quiero que grabes una macro y la guardes en el registro a». Al hacer esto, aparecerá la palabra «grabando» en la esquina inferior izquierda de la pantalla, lo cual nos indica que Vim está listo para grabar la macro.

El siguiente paso es ejecutar las acciones que queremos que se graben, las cuales serán almacenadas en el registro seleccionado. El editor almacenará TODO lo que hagas a partir de este momento, eso incluye cualquier error que cometas. En cuanto termines de grabar la macro, vuelve a modo -- NORMAL -- si no lo has hecho ya y presiona la tecla q para indicarle a Vim que deje de grabar. Notarás que la palabra «grabando» desaparece una vez que haces esto.

Una vez grabada la macro, para reproducirla utiliza el comando @ de nuevo en modo -- NORMAL -- seguida del nombre del registro (en nuestro caso a). Puedes reproducir la última macro simplemente pulsando dos veces el símbolo arroba (@@) y por su puesto que también puedes usar repetidores como con cualquier otro comando, lo cual nos ahorrará mucho tiempo.

Grabando una macro
Grabando una macro.

Si no te satisface el resultado de reproducir tu macro, puedes deshacer lo que hizo y volver a grabarla. Te recomiendo que analices el resultado de tus macros para que detectes los errores que hayas cometido.

Bien, ahora que te he dicho todo acerca de las macros, voy a explicarte cómo construyo una para numerar la lista que te presenté al principio de la nota.

Macro para numerar los meses del año

Quiero numerar la lista de los meses del año y quiero hacerlo de un solo golpe, por lo que necesito hacer que el editor esté consciente de qué numero debe anteponer a cada mes, por lo tanto: necesito un contador. Voy a colocar una línea arriba del inicio de mi lista que contenga este texto: «1. «, y voy a marcarla para poder regresar a ella con un solo movimiento. La idea es posicionarse en la línea de un mes, de ahí saltar a la línea marcada, copiar de esta el texto y luego incrementar el contador con el comando C-a; una vez hecho esto, saltar de regreso a la línea del mes y pegar el texto copiado previamente. Finalmente moverme a la línea del siguiente mes y terminar la grabación de la macro.

Macro para numerar una lista.
Macro para numerar una lista.

Con la macro lista, voy a ejecutarla varias veces a partir de la línea que dice «febrero» y listo. Cuanto tenga mis meses numerados, podré deshacerme de la línea marcada que contiene el contador (nota cómo el texto ha cambiado).

Numerando una lista usando macros.
Numerando una lista usando macros.

Espero que te haya sido de utilidad esta nota. Nos vemos en la siguiente.

2 comments

  1. Yo tengo otra forma creo más fácil.
    Escribes el primer número en enero, pero si si los números tienen más de dos dígitos entonces tendrás que poner un 0 a la izquierda dependiendo cuantos dígitos tendrá el último número (después se los quitas, en Vim es muy fácil).

    01. enero
    febrero
    marzo
    abril
    mayo
    junio
    julio
    agosto
    septiembre
    octubre
    noviembre
    diciembre

    Y luego te posicionas en la siguiente línea (febrero). Ahí haces tu macro: qai 0 j0q
    Después 3@@ y queda así:

    01. enero
    02. febrero
    03. marzo
    04. abril
    05. mayo
    junio
    julio
    agosto
    septiembre
    octubre
    noviembre
    diciembre

    Luego simplemente le quitas los ceros si no los quieres, tal vez con . Marcas las filas de ceros y pones d

Deja una respuesta

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