Macros e repetição
Definição curta: Uma macro é uma sequência de teclas gravada em um registrador e reexecutável — a forma mais direta de automatizar uma edição repetitiva sem escrever código.
Antes de começar
- Saber sair do Neovim (
:q) e navegar em modo normal
O que você vai aprender
- Explicar Gravar e executar com suas palavras
- Explicar O ponto e a macro com suas palavras
- Explicar Anatomia de uma macro robusta com suas palavras
- Localizar o assunto desta página no
:helpdo seu próprio Neovim
Gravar e executar
qa " começa a gravar no registrador a
... " suas edições
q " para de gravar
@a " executa a macro
@@ " repete a última macro executada
5@a " executa cinco vezes
O indicador recording @a aparece na última linha enquanto a gravação está ativa.
O ponto e a macro
Antes de gravar, considere se o . resolve. O comando . repete a última alteração e não custa nada:
cwnovo<Esc> " troca a palavra
w. " próxima palavra, repete
w. " de novo
A regra prática: . para uma edição, macro para uma sequência. Gravar uma macro de três teclas costuma custar mais do que economiza.
Anatomia de uma macro robusta
Macros quebram quando dependem da posição do cursor. Três hábitos resolvem quase tudo:
- Comece pelo início da linha —
0ou^como primeira tecla - Use motions estruturais, não contagens.
f,é mais robusto que3w, porque a vírgula continua no mesmo lugar mesmo quando o número de palavras varia - Termine descendo uma linha —
jno fim permite@@repetido
Exemplo — transformar uma lista em chamadas de função:
entrada: saída:
alpha print("alpha")
beta print("beta")
Macro: qa I print(" <Esc> A") <Esc> j q, depois 5@a.
Executar em muitas linhas de uma vez
Em vez de contar repetições, aplique a macro a um intervalo:
:%normal @a " todas as linhas
:'<,'>normal @a " a seleção visual
:g/^TODO/normal @a " só as linhas que casam com o padrão
:normal executa as teclas como se você as tivesse digitado no modo normal. Combinado com :g, ele cobre a maior parte dos casos em que a alternativa seria um script.
Editar uma macro
Macros são texto em registradores. Se uma macro quase funciona:
:let @a = 'I print("<Esc>A")<Esc>j'
Ou, de forma mais prática: cole o conteúdo do registrador num buffer com "ap, edite à mão e devolva com "ayy (copiando a linha de volta para o registrador a).
Macros recursivas
Uma macro que chama a si mesma processa até o fim do arquivo e para quando um comando falha:
qaqqa ...suas edições... j@aq
O qaq inicial limpa o registrador — necessário, porque a macro se referencia. A execução para sozinha quando o j falha na última linha.
É elegante e frágil. Na prática, :%normal @a é mais legível e igualmente eficaz.
Macro ou expressão regular?
| Situação | Melhor ferramenta |
|---|---|
| Transformação puramente textual, mesmo padrão | :%s com regex |
| Depende de contexto de outras linhas | macro |
| Envolve navegar, abrir dobras, usar plugins | macro |
| Precisa contar ou calcular | :%s/\= com expressão |
| Você não consegue descrever o padrão, mas sabe fazer | macro |
O último caso é o mais frequente e o melhor argumento pela macro: você não precisa descrever a transformação, só executá-la uma vez.
Erros comuns
- Não começar por
0— a macro funciona na primeira linha e falha nas outras - Usar contagens de palavras em vez de
f,tou busca - Gravar sobre uma macro boa — reserve registradores (
q,w) para trabalho descartável - Macro onde
.bastava - Não conferir o resultado antes de rodar
100@a—udesfaz, mas em blocos confusos
Erros comuns
- Gravar sem testar o primeiro passo. Se a macro depende da posição do cursor, ela funciona uma vez e estraga o resto do arquivo.
- Esquecer o
0no começo. Uma macro que não normaliza a posição inicial acumula desalinhamento a cada repetição. - Usar macro onde
:%sresolveria. Substituição é declarativa e reversível; macro é imperativa e cega.
Você aprendeu
- Gravar e executar
- O ponto e a macro
- Anatomia de uma macro robusta
- Executar em muitas linhas de uma vez
- Editar uma macro
Perguntas para reflexão
- O que Gravar e executar resolve, e o que se perde sem isso?
- O que O ponto e a macro resolve, e o que se perde sem isso?
- O que Anatomia de uma macro robusta resolve, e o que se perde sem isso?
- Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?
Artigos relacionados
Veja também
- Registradores — onde as macros ficam guardadas
- Busca e substituição — a alternativa por regex
- Motions — os movimentos que tornam a macro robusta
Referências
:help recording:help :normal:help :global