Busca e substituição
Definição curta: A busca (
/) e o:substitutesão as ferramentas de edição em massa do Neovim, e ambas dependem do dialeto de expressão regular do Vim.
Antes de começar
- Saber sair do Neovim (
:q) e navegar em modo normal
O que você vai aprender
- Explicar Busca com suas palavras
- Explicar Os modos de magia com suas palavras
- Explicar O comando :substitute com suas palavras
- Localizar o assunto desta página no
:helpdo seu próprio Neovim
Busca
/padrao " busca para a frente
?padrao " busca para trás
n / N " próxima / anterior ocorrência
* / # " busca a palavra sob o cursor, adiante / atrás
Opções que mudam o comportamento:
vim.opt.ignorecase = true -- busca sem diferenciar maiúsculas
vim.opt.smartcase = true -- ...exceto se o padrão tiver maiúscula
vim.opt.incsearch = true -- mostra o resultado enquanto digita
vim.opt.hlsearch = true -- destaca todas as ocorrências
A combinação ignorecase + smartcase é quase universal: /erro acha Erro e ERRO, mas /Erro acha só Erro.
Para limpar o destaque: :noh. Um mapeamento comum:
vim.keymap.set('n', '<Esc>', ':nohlsearch<CR>', { silent = true })Os modos de magia
O dialeto de expressão regular do Vim difere do PCRE, e o quanto ele difere depende do prefixo:
| Prefixo | Nome | Comportamento |
|---|---|---|
\v | very magic | mais próximo de PCRE — (, +, ?, { funcionam sem escape |
| (nenhum) | magic (padrão) | . e * especiais; +, ?, ( precisam de \ |
\V | very nomagic | quase tudo literal; só \ é especial |
Comparação do mesmo padrão:
/\v(foo|bar)+ " very magic
/\(foo\|bar\)\+ " magic, o padrão
/\Vfoo.bar " very nomagic: ponto literal
Recomendação prática: use \v sempre. Ele elimina a maior parte das barras invertidas e aproxima a sintaxe do que você já conhece de outras ferramentas.
O comando :substitute
:s/velho/novo/ " primeira ocorrência da linha
:s/velho/novo/g " todas da linha
:%s/velho/novo/g " todas do arquivo
:%s/velho/novo/gc " com confirmação a cada uma
:'<,'>s/velho/novo/g " apenas na seleção visual
:10,20s/velho/novo/g " nas linhas 10 a 20
As flags mais úteis: g (todas da linha), c (confirmar), i (ignorar caixa), I (diferenciar caixa), n (só contar, não substituir).
A flag n é subestimada: :%s/erro//gn responde “quantas vezes isso aparece?” sem alterar nada.
Grupos de captura
:%s/\v(\w+)\s+(\w+)/\2 \1/g " troca duas palavras de lugar
:%s/\v"(.{-})"/'\1'/g " aspas duplas viram simples
\1, \2… referenciam os grupos. .{-} é o quantificador não guloso — o equivalente ao .*? de PCRE, e um dos que mais faltam a quem chega de outra ferramenta.
Substituir em vários arquivos
O caminho nativo passa pela quickfix:
:grep -r 'padrao' . " popula a quickfix
:cdo s/padrao/novo/g | update
:cdo executa um comando em cada entrada da lista quickfix; | update salva os arquivos que mudaram. Para a lista de argumentos, o equivalente é :argdo.
Com ripgrep instalado, vale configurar:
vim.opt.grepprg = 'rg --vimgrep --smart-case'
vim.opt.grepformat = '%f:%l:%c:%m'Expressões no lado direito
Prefixar a substituição com \= avalia uma expressão:
:%s/\v^/\=line('.') . '. '/ " numera todas as linhas
:%s/\v\d+/\=submatch(0) * 2/g " dobra todo número do arquivoErros comuns
- Esquecer
\ve depurar barras invertidas por dez minutos .*onde cabia.{-}— o quantificador guloso engole a linha inteira:%ssemgachando que pegou tudo — pegou a primeira de cada linha:cdosemupdate— as mudanças ficam em buffers não salvos- Usar sintaxe PCRE por hábito —
\dfunciona, mas\w+sem\vnão
Você aprendeu
- Busca
- Os modos de magia
- O comando :substitute
- Grupos de captura
- Substituir em vários arquivos
Perguntas para reflexão
- O que Busca resolve, e o que se perde sem isso?
- O que Os modos de magia resolve, e o que se perde sem isso?
- O que O comando :substitute 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
- Comandos Ex — a família de comandos com
: - Quickfix e location list — onde os resultados vão parar
- Macros — a alternativa quando regex fica complexa demais
Referências
:help pattern— a sintaxe completa:help :substitute:help /magic— os quatro modos de magia