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

ModoComandoAcción
Nq{a-z}Inicia la grabación en el registro {a-z}
NqDetiene 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
Nq{A-Z}Añade comandos a la macro existente en {a-z}

Reproducción sobre selecciones y rangos

ModoComandoAcció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

ModoComandoAcción
C:reg {a-z}Muestra el contenido del registro de la macro
N"{a}pPega el contenido de la macro como texto editable
N"{a}yyGuarda 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

ModoComandoAcción
C:g/patrón/cmdEjecuta cmd en cada línea que coincide
C:g!/patrón/cmdEjecuta cmd en líneas que NO coinciden
C:v/patrón/cmdEquivalente a :g!
C:g/^$/dBorra todas las líneas vacías
C:g/patrón/dBorra todas las líneas que contienen el patrón
C:g/patrón/y ACopia 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/m0Mueve 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

ModoComandoAcció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 ddBorra 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 .

ModoComandoAcción
N.Repite el último cambio completo
N{n}.Repite el último cambio n veces
Nn.Salta a la siguiente coincidencia y repite el cambio

Persistencia de macros

ModoComandoAcción
C:let @{a}='contenido'Define una macro en vimrc para persistirla
C:wvGuarda 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.