Técnicas de Substituição e Automação de Texto no Vim

  1. Comando Nativo de Substituição: :s

O mecanismo fundamental para alterar conteúdo no Vim baseia-se na expressão :s, que utiliza um delimitador configurável para separar padrões. A estrutura geral é:

[intervalo]s[delim]{busca}[delim]{alteracao}[delim][modificadores]

O caractere delimitador pode ser qualquer símbolo não alfanumérico (#, @, |, etc.), contanto que os três separadores coincidam. A precisão da operação depende da definição do escopo e dos modificadores finais.

Configuração de Escopo

  • Todo o buffer: o símbolo % estende a aplicação para todas as linhas do arquivo.
  • Linha do cursor: a ausência de intervalo ou o uso explícito de . limita a ação à linha atual.
  • Faixas numéricas: utilize notação inicio,fim (ex: 12,30) para atuar em um bloco delimitado.
  • Modo visual: ao destacar texto e pressionar :, o editor preenche automaticamente '<,'>, restringindo a operação à seleção ativa.

Modificadores de Comportamento

  • g: substitui todas as ocorrências por linha, ultrapassando o comportamento padrão que troca apenas a primeira.
  • c: solicita confirmação manual antes de cada alteração, oferecendo controle granular.
  • i: ignora diferenças entre maiúsculas e minúsculas durante a busca.
  • \< e \> (ou \b no modo mágico): restringem a correspondência a limites de palavras inteiras, prevenindo trocas parciais em substrings.

Exemplo de aplicação que modifica variavel_legada para parametro_atual em todo o documento, ignorando capitalização e requisitando aprovação:

:%s#variavel_legada#parametro_atual#gci
  1. Manipulação via substitute() em VimScript

Para rotinas programáticas, a função substitute() processa strings diretamente no motor de expressão do Vim. Diferente do comando :s, ela não alteera o buffer in-place, retornando o resultado processado, o que a torna ideal para fluxos de script e transformações de variáveis.

:let linha_processada = substitute(getline('.'), '\v(log\w*)_(\d{4})', '\2_\1', 'gi')

A função exige quatro argumentos obrigatórios: a string de origem, a expressão regular de busca, o padrão de retorno (com suporte a referências como \1, \2) e os modificadores de fllag. Para execução direta via linha de comando, a sintaxe mantém a mesma ordem lógica.

  1. Fluxo de Trabalho com Registradores

A manipulação via registradores é eficaz quando o texto de substituição é dinâmico ou foi extraído previamente. O procedimento envolve armazenamento e injeção controlada:

  1. Copie o trecho desejado para o registrador nomeado k usando "kyiw (yank inner word).
  2. Posicione o cursor sobre a região alvo.
  3. Sobrescreva o conteúdo atual inserindo o registrador com "kp.

Para integração com o motor de busca, utilize a expressão :\<,'>s//\=@k/g após uma seleção visual. O padrão // reutiliza a última busca ativa, enquanto \=@k enjeta o valor armazenado no registrador k como texto de reposição.

  1. Sequências Automatizadas com Macros

Quando a substituição envolve lógica condicional, múltiplos passos de navegação ou padrões irregulares incompatíveis com regex linear, a gravação de macros oferece a flexibilidade necessária.

  1. Inicie a captura pressionando qz (armazenando a sequência no registrador z).
  2. Execute a cadeia de comandos: busca (/padrao<CR>), substituição local (cw), digitação da correção e retorno ao modo normal (<Esc>).
  3. Encerre a gravação pressionando q novamente.
  4. Reproduza a ação com @z. Para repetição em escala, prefixe com um contador (ex: 15@z) ou utilize @@ para reiterar a última macro executada.

Essa técnica permite encapsular fluxos de edição complexos em um único atalho, garantindo consistência em refatorações estruturais.

Tags: vim substituição-texto vimscript automação-editor macros-vim

Publicado em 9-20 22:40