Registros y Macros: Automatización Básica
Los registros y macros son características poderosas de Vim que te permiten automatizar tareas repetitivas y almacenar texto de manera eficiente. Son fundamentales para alcanzar velocidades de edición profesionales.
📋 Registros (Registers)
Los registros son ubicaciones de almacenamiento para texto en Vim. Piénsalos como múltiples portapapeles que puedes usar simultáneamente.
Tipos de registros
Registros numerados (0-9)
"0
- Último texto copiado (yank)"1-"9
- Historial de texto eliminado
Registros con nombre (a-z, A-Z)
"a-"z
- Registros minúsculas (sobrescriben)"A-"Z
- Registros mayúsculas (agregan al contenido)
Registros especiales
""
- Registro sin nombre (por defecto)"+
- Portapapeles del sistema"*
- Selección primaria (X11)"/
- Último patrón de búsqueda":
- Último comando ejecutado".
- Último texto insertado"%
- Nombre del archivo actual"#
- Nombre del archivo alternativo
Comandos básicos con registros
Copiar a registro
"ayy " Copiar línea al registro 'a'
"A5yy " Agregar 5 líneas al registro 'a'
"byiw " Copiar palabra al registro 'b'
"cy$ " Copiar hasta final de línea al registro 'c'
Pegar desde registro
"ap " Pegar contenido del registro 'a'
"bP " Pegar antes del cursor desde registro 'b'
"+p " Pegar desde portapapeles del sistema
Ver contenido de registros
:reg " Ver todos los registros
:reg a " Ver solo el registro 'a'
:reg abc " Ver registros 'a', 'b', 'c'
🎬 Macros
Las macros te permiten grabar una secuencia de comandos y reproducirla múltiples veces. Son perfectas para tareas repetitivas.
Grabación básica de macros
qa " Empezar a grabar macro en registro 'a'
[comandos] " Ejecutar los comandos que quieres grabar
q " Parar grabación
Ejecutar macros
@a " Ejecutar macro 'a' una vez
5@a " Ejecutar macro 'a' cinco veces
@@ " Repetir la última macro ejecutada
Ejemplo paso a paso
Supongamos que tienes esta lista y quieres agregar comillas y comas:
Juan
María
Pedro
Ana
- Posiciónate en la primera línea
qa
- Empezar grabación en registro 'a'I"
- Insertar comilla al inicio<Esc>
- Volver a modo normalA",
- Agregar comilla y coma al final<Esc>
- Volver a modo normalj0
- Bajar una línea e ir al inicioq
- Parar grabación
Ahora ejecuta 3@a
para aplicar a las siguientes 3 líneas.
🚀 Técnicas Avanzadas
Macros recursivas
qa " Empezar grabación
[comandos]
@a " Llamar a sí misma (recursión)
q " Parar grabación
La recursión se detendrá cuando encuentre un error (como final de archivo).
Editar macros
:let @a = '@a' " Ver contenido de macro 'a'
Luego puedes editar la línea y ejecutar para modificar la macro.
Guardar macros en archivo
Agrega a tu .vimrc
:
" Macro para formatear función JavaScript
let @j = 'I ^[A {^M}^[kA^M^['
Aplicar macro a selección visual
:'<,'>normal @a " Aplicar macro 'a' a selección
Aplicar macro a patrón
:g/patrón/normal @a " Aplicar macro 'a' a líneas que coincidan
📝 Ejercicios Prácticos
Ejercicio 1: Registros básicos
- Copia diferentes párrafos a registros
a
,b
,c
- Lista los registros con
:reg
- Pega contenido alternando entre registros
- Usa registro de portapapeles
"+
Ejercicio 2: Macro simple - Formatear lista
Dado este texto:
task1: pending
task2: pending
task3: pending
task4: pending
Crea una macro que convierta cada línea a:
- [ ] task1: pending
Ejercicio 3: Macro compleja - Refactoring
Dado este código CSS:
.button {
background-color: blue;
}
.header {
background-color: blue;
}
.footer {
background-color: blue;
}
Crea una macro que cambie blue
por var(--primary-color)
en cada regla.
Ejercicio 4: Macro recursiva
Crea una macro que agregue números de línea al inicio de cada línea:
Línea sin número
Otra línea
Tercera línea
Resultado:
1. Línea sin número
2. Otra línea
3. Tercera línea
🎯 Casos de Uso Reales
Refactoring de código
" Cambiar nombres de variables en múltiples líneas
qa
/oldVar<CR>
cwnewVar<Esc>
@a
q
Formateo de datos
" Convertir CSV a JSON
qa
I"<Esc>
f,r:
A",<Esc>
j0
@a
q
Generación de código repetitivo
" Crear getters/setters automáticamente
qa
yiwIget <Esc>A() {<CR>return this.<Esc>pa;<CR>}<Esc>
j0
@a
q
Limpieza de texto
" Eliminar espacios extra y normalizar
qa
:s/ */ /g<CR>
j0
@a
q
⚙️ Configuración Recomendada
" Mostrar registros fácilmente
nnoremap <Leader>r :reg<CR>
" Usar portapapeles del sistema por defecto
set clipboard=unnamedplus
" Facilitar uso de macros
nnoremap Q @q
" Macro rápida en registro 'q'
nnoremap <Leader>q qq
nnoremap <Leader>Q @q
" Ver último comando
nnoremap <Leader>: :<C-r>:<CR>
🏆 Tips Pro
Preparación de macros
- Planifica primero: Piensa la secuencia antes de grabar
- Posición inicial: Asegúrate de empezar en posición consistente
- Movimientos relativos: Usa movimientos que funcionen en cualquier línea
- Estado final: Termina en posición lista para repetir
Debugging de macros
- Usa
:reg a
para ver el contenido exacto - Prueba paso a paso antes de aplicar masivamente
- Usa
u
para deshacer si algo sale mal - Graba en mayúsculas para agregar a macro existente
Optimización
" En lugar de:
qa
dd
j
@a
q
" Mejor:
qa
ddj
@a
q
Macros complejas
- Usa marcas (
ma
,'a
) para posicionamiento absoluto - Combina con búsquedas para mayor precisión
- Considera usar
:g/patrón/normal @a
para aplicación selectiva
🔗 Comandos Relacionados
Trabajar con múltiples archivos
:argdo normal @a " Aplicar macro a todos los archivos en arglist
:bufdo normal @a " Aplicar macro a todos los buffers
Combinación con substitute
:g/patrón/normal @a " Macro solo en líneas que coincidan
:%s/old/new/g | normal @a " Substitute + macro
📚 Recursos Adicionales
:help registers
- Documentación completa de registros:help recording
- Guía de grabación de macros:help complex-repeat
- Técnicas avanzadas de repetición
¡Los registros y macros son herramientas increíblemente poderosas que separan a los usuarios avanzados de Vim de los principiantes. Con práctica, te permitirán automatizar casi cualquier tarea repetitiva!