Las macros graban secuencias de comandos en registros y las reproducen exactas. Combinadas con contadores y comandos globales, permiten automatizar ediciones repetitivas sin escribir Vimscript.
Abreviaciones de modos: N = Normal | I = Insert | V = Visual | C = Command | VB = Visual Block
Grabar y reproducir macros
Modo
Comando
Acción
N
q{a-z}
Inicia la grabación en el registro {a-z}
N
q
Detiene la grabación en curso
N
@{a-z}
Reproduce la macro del registro {a-z}
N
@@
Reproduce la última macro ejecutada
N
{n}@{a-z}
Reproduce la macro n veces
N
{n}@@
Reproduce la última macro n veces
N
q{A-Z}
Añade comandos a la macro existente en {a-z}
Reproducción sobre selecciones y rangos
Modo
Comando
Acción
C
:{n},{m}normal @{a}
Ejecuta la macro en las líneas n a m
C
:%normal @{a}
Ejecuta la macro en todas las líneas del archivo
C
:'<,'>normal @{a}
Ejecuta la macro en la selección Visual
C
:g/patrón/normal @{a}
Ejecuta la macro en líneas que coinciden con el patrón
Ver y editar macros
Modo
Comando
Acción
C
:reg {a-z}
Muestra el contenido del registro de la macro
N
"{a}p
Pega el contenido de la macro como texto editable
N
"{a}yy
Guarda la línea editada de vuelta al registro
C
:let @{a}='...'
Define o sobreescribe una macro directamente
C
:let @{a}=@{a}.'...'
Añade comandos al final de una macro existente
Comando global :g
Modo
Comando
Acción
C
:g/patrón/cmd
Ejecuta cmd en cada línea que coincide
C
:g!/patrón/cmd
Ejecuta cmd en líneas que NO coinciden
C
:v/patrón/cmd
Equivalente a :g!
C
:g/^$/d
Borra todas las líneas vacías
C
:g/patrón/d
Borra todas las líneas que contienen el patrón
C
:g/patrón/y A
Copia todas las líneas coincidentes al registro a
C
:g/patrón/t$
Copia las líneas coincidentes al final del archivo
C
:g/patrón/m0
Mueve las líneas coincidentes al inicio del archivo
C
:g/patrón/normal {cmd}
Ejecuta un comando Normal en cada coincidencia
Comando :normal en rangos
Modo
Comando
Acción
C
:%normal I//
Comenta cada línea añadiendo // al inicio
C
:%normal A;
Añade ; al final de cada línea
C
:%normal dd
Borra todas las líneas del archivo
C
:'<,'>normal .
Repite el último cambio en cada línea seleccionada
C
:g/patrón/normal .
Repite el último cambio en líneas coincidentes
El comando punto .
Modo
Comando
Acción
N
.
Repite el último cambio completo
N
{n}.
Repite el último cambio n veces
N
n.
Salta a la siguiente coincidencia y repite el cambio
Persistencia de macros
Modo
Comando
Acción
C
:let @{a}='contenido'
Define una macro en vimrc para persistirla
C
:wv
Guarda la sesión incluyendo registros (si viminfo está activo)
C
:set viminfo+=!
Incluye variables globales en el archivo viminfo
Tips
Diseña macros que terminen posicionando el cursor en el punto de inicio de la siguiente operación: así {n}@{a} funciona sin errores en cascada.
Editar una macro es más seguro que regrabarla: "{a}p la pega como texto, editas, "ayy la guarda de vuelta sin riesgo de errores de grabación.
:g/patrón/normal @{a} es más preciso que {n}@{a}: aplica la macro solo donde tiene sentido en lugar de repetirla ciegamente n veces.
. combinado con n es la alternativa ligera a una macro para cambios simples: cgnimp<Esc> cambia la primera coincidencia, luego n. repite sobre cada una.
:g/^$/d seguido de :%s/\s\+$// es la limpieza estándar de un archivo antes de commitear: elimina líneas vacías y espacios finales en dos comandos.