Automatización: macros, registros y :g
Las herramientas de poder que automatizan lo repetitivo: macros, registros, marcas, la lista quickfix, comandos globales :g y :normal, y user commands propios.
Aquí es donde Neovim deja atrás a cualquier editor. Cuando una tarea se repite, no la haces N veces: la grabas una vez y la aplicas a todo. Macros, registros y comandos globales convierten trabajo de minutos en pulsaciones.
- Grabar y reproducir macros para tareas repetitivas.
- Usar registros y marcas como memoria de trabajo.
- Editar en masa con
:gy:normal. - La lista quickfix para operar sobre muchos archivos.
- Crear tus propios comandos y autocmds.
Macros: graba una vez, repite mil
Una macro graba una secuencia de teclas y la reproduce. Es la automatización más directa de Neovim.
El flujo de oro: haz la edición de una línea usando movimientos que funcionen en cualquier línea (empieza con 0 o ^, termina bajando con j). Luego aplícala a las demás.
Ejemplo: envolver cada línea en comillas y añadir coma.
qa → graba en 'a'
I" → inserta " al inicio
<Esc>A", → añade ", al final
j → baja a la siguiente línea
q → para
99@a → aplica a las 99 líneas restantes
Una macro es solo texto en un registro. Si te equivocaste, pégala con "ap, corrige las teclas a mano y vuelve a cargarla con "ayy (copiando la línea al registro a). Las macros no son mágicas: son teclas guardadas.
Registros: portapapeles múltiple
Neovim tiene decenas de “portapapeles” llamados registros. Antepón "x a un yank/delete/paste para usar el registro x:
| Registro | Contenido |
|---|---|
"a–"z |
los que tú asignas ("ayy copia al registro a) |
"0 |
el último yank (no lo pisan los delete) |
"+ |
el portapapeles del sistema |
"% |
el nombre del archivo actual |
": |
el último comando ejecutado |
Míralos todos con :registers. El registro "0 es un salvavidas: tras borrar algo, tu último yank sigue intacto ahí.
Marcas: teletransporte
Las marcas guardan posiciones. m{letra} pone una marca; el backtick seguido de la letra (por ejemplo, backtick + a) salta a ella exacta.
:g — el comando global (nivel dios puro)
:g/patrón/comando ejecuta un comando Ex en cada línea que coincide. Es edición en masa condicional:
:g/TODO/d " borra todas las líneas con TODO
:g/^$/d " borra todas las líneas vacías
:g/foo/normal A; " añade ; al final de cada línea con foo
:g/error/t$ " copia al final del archivo cada línea con error
:v/importante/d " borra las líneas que NO tienen 'importante'
:normal (o :norm) ejecuta comandos de modo Normal desde la línea de comandos, y combinado con :g aplica ediciones complejas a muchas líneas de golpe.
:g/patrón/normal @a reproduce una macro en cada línea que coincide con un patrón. Macros + comando global es, literalmente, programar tu editor en tiempo real: describes un patrón y una transformación, y Neovim la aplica a todo el archivo en un instante. Pocas herramientas igualan este poder de edición.
Quickfix: operar sobre muchos archivos
La lista quickfix junta ubicaciones (resultados de grep, errores de compilación) para navegarlas y editarlas en masa.
:grep función src/ " llena la quickfix con las coincidencias
:copen " abre la lista
:cdo s/viejo/nuevo/g | update " ejecuta un cambio en CADA entrada
:cdo corre un comando sobre cada entrada de la quickfix: es la forma de hacer un buscar-y-reemplazar en todo el proyecto con control total. Desde el picker de snacks (<leader>fg) puedes mandar resultados a la quickfix y operar sobre ellos.
Tus propios comandos y autocmds
Automatiza tu flujo con comandos a medida:
-- Comando :Reload para recargar la config sin reiniciar
vim.api.nvim_create_user_command("Reload", function()
for name, _ in pairs(package.loaded) do
if name:match("^config") or name:match("^plugins") then
package.loaded[name] = nil
end
end
dofile(vim.env.MYVIMRC)
vim.notify("Config recargada")
end, {})
-- Al abrir un archivo, vuelve a la última posición donde estabas
vim.api.nvim_create_autocmd("BufReadPost", {
callback = function()
local mark = vim.api.nvim_buf_get_mark(0, '"')
if mark[1] > 0 and mark[1] <= vim.api.nvim_buf_line_count(0) then
pcall(vim.api.nvim_win_set_cursor, 0, mark)
end
end,
})
Esto es la automatización del día a día. Para llevarlo al límite, el Nivel 4 (Maestro) dedica lecciones enteras a Registros y marcas a nivel experto y a Quickfix y location list a fondo.
- Graba una macro que transforme una línea y aplícala con
99@a. - Usa
:g/^$/dpara borrar líneas vacías de un archivo. - Copia algo, borra otra cosa, y recupera tu copia con
"0p. - Haz un reemplazo global con
:grep+:copen+:cdo. - Combina macro + global:
:g/patrón/normal @a.