- 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\bno 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
- 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.
- 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:
- Copie o trecho desejado para o registrador nomeado
kusando"kyiw(yank inner word). - Posicione o cursor sobre a região alvo.
- 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.
- 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.
- Inicie a captura pressionando
qz(armazenando a sequência no registradorz). - Execute a cadeia de comandos: busca (
/padrao<CR>), substituição local (cw), digitação da correção e retorno ao modo normal (<Esc>). - Encerre a gravação pressionando
qnovamente. - 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.