Editor de Texto vim/vi - substituições

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