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 :help do 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:

    1. Comece pelo início da linha0 ou ^ como primeira tecla
    2. Use motions estruturais, não contagens. f, é mais robusto que 3w, porque a vírgula continua no mesmo lugar mesmo quando o número de palavras varia
    3. Termine descendo uma linhaj no 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çãoMelhor ferramenta
    Transformação puramente textual, mesmo padrão:%s com regex
    Depende de contexto de outras linhasmacro
    Envolve navegar, abrir dobras, usar pluginsmacro
    Precisa contar ou calcular:%s/\= com expressão
    Você não consegue descrever o padrão, mas sabe fazermacro

    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, t ou 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@au desfaz, 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 0 no começo. Uma macro que não normaliza a posição inicial acumula desalinhamento a cada repetição.
    • Usar macro onde :%s resolveria. 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

    1. O que Gravar e executar resolve, e o que se perde sem isso?
    2. O que O ponto e a macro resolve, e o que se perde sem isso?
    3. O que Anatomia de uma macro robusta resolve, e o que se perde sem isso?
    4. Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?

    Artigos relacionados

    Veja também

    Referências

    • :help recording
    • :help :normal
    • :help :global