Substituições
Para fazer uma busca, certifique-se de que está em modo normal, em seguida digite use o comando ":s", conforme será explicado.
Para substituir "foo" por "bar" na linha atual:
:s/foo/bar
Para substituir "foo" por "bar" da primeira à décima linha do arquivo:
:1,10 s/foo/bar
Para substituir "foo" por "bar" da primeira à última linha do arquivo:
:1,$ s/foo/bar
Ou simplesmente:
:% s/foo/bar
$ ............. significa para o vim final do arquivo
% ............. representa o arquivo atual
O comando ":s" possui muitas opções que modificam seu comportamento.
Exemplos
* Busca usando alternativas:
/end\(if\|while\|for\)
Buscará "endif", "endwhile" e "endfor".
Observe que é necessário "escapar" os caracteres \(, \| e \), caso contrário eles serão interpretados como caracteres comuns.
* Quebra de linha
/quebra\nde linha
* Ignorando maiúsculas e minúsculas
/\cpalavra
Usando \c o vim encontrará "palavra", "Palavra" ou até mesmo "PALAVRA"
Uma dica é colocar no seu arquivo de configuração 'vimrc' veja como editar preferências
set ignorecase ............... ignora maiúsculas e minúsculas na bucsca
set smartcase ................ se sua busca contiver maiúsculas ele passa a considera-las
set hlsearch ................. mostra o que está sendo buscado em cores
set incsearch ................ ativa a busca incremental
Se você não sabe ainda como colocar estas preferências no arquivo de configuração pode
ativa-las em modo de comando precedendo-as com dois pontos, assim:
:set ignorecase
* Procurando palavras repetidas
/\<\(\w*\) \1\>
* Multilinha
/Hello\_s\+World
Buscará "Hello World", separados por qualquer número de espaços, incluindo quebras de linha. Buscará as três seqüências:
Hello World
Hello World
Hello
World
* Buscar linhas de até 30 caracteres de comprimento
/^.\{,30\}$
^ .............. representa começo de linha
* Apaga todas as tags html/xml de um arquivo
:%s/<[^>]*>//g
* Apaga linhas vazias
:%g/^$/d
Ou
:%s/^[\ \t]*\n//g
* Remover duas ou mais linhas vazias entre parágrafos diminuindo para uma só linha vazia.
:%s/\(^\n\{2,}\)/\r/g
Você pode criar um mapeamento e colocar no seu ~/.vimrc
map ,s:%s/\(^\n\{2,}\)/\r/g
No exemplo acima ',s' é um mapeamento para reduzir linhas em branco sucessivas para uma só
* Remove não dígitos (não pega números)
:%s/^\D.*//g
* Remove final de linha DOS/Windows ^M que tem código hexadecimal igual a '0d'
:%s/\%x0d//g
* Troca palavras de lugar usando expressões regulares
:%s/\(.\+\)\s\(.\+\)/\2 \1/ - troca palavras de lugar
* Inserir numeração de linhas do arquivo
:%s/^/\=line('.'). ' '
* Modificando todas as tags html para minusculo
:%s/<\([^>]*\)>/<\L\1>/g
* move linhas 10 a 12 para além da linha 30
:10,12m30
Fonte: wikibooks
Comentários