Saltar al contenido principal

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
  1. Posiciónate en la primera línea
  2. qa - Empezar grabación en registro 'a'
  3. I" - Insertar comilla al inicio
  4. <Esc> - Volver a modo normal
  5. A", - Agregar comilla y coma al final
  6. <Esc> - Volver a modo normal
  7. j0 - Bajar una línea e ir al inicio
  8. q - 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

  1. Copia diferentes párrafos a registros a, b, c
  2. Lista los registros con :reg
  3. Pega contenido alternando entre registros
  4. 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

  1. Planifica primero: Piensa la secuencia antes de grabar
  2. Posición inicial: Asegúrate de empezar en posición consistente
  3. Movimientos relativos: Usa movimientos que funcionen en cualquier línea
  4. Estado final: Termina en posición lista para repetir

Debugging de macros

  1. Usa :reg a para ver el contenido exacto
  2. Prueba paso a paso antes de aplicar masivamente
  3. Usa u para deshacer si algo sale mal
  4. 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!