Ir para o conteúdo

Usando "Expressões Regulares" em buscas

Comando Descrição
/ inicia uma busca (modo normal)
\%x69 código da letra `i'
/\%x69 localiza a letra `i' - hexadecimal 069
\d localiza números
[3-8] localiza números de 3 até 8
^ começo de linha
$ final de linha
\+ um ou mais
/^\d\+$ localiza somente dígitos
/\r$ localiza linhas terminadas com ^M
/^\s*$ localiza linhas vazias ou contendo apenas espaços
/^\t\+ localiza linhas que iniciam com tabs
\s localiza espaços
/\s\+$ localiza espaços no final da linha

Evitando escapes ao usar Expressões regulares

O Vim possui um modo chamado “very magic” para uso em expressões regulares que evita o uso excessivo de escapes, alternativas etc. Usando apenas uma opção: veja :h /\v.

Em um trecho com dígitos + texto + dígitos no qual se deseja manter só as letras.

12345aaa678
12345bbb678
12345aac678
Sem a opção “very magic” faríamos:
:%s/\d\{5\}\(\D\+\)\d\{3\}/\1/
Já com a opção “very magic\v usa-se bem menos escapes:
:%s/\v\d{5}(\D+)\d{3}/\1/

Explicação do comando acima:

Comando Descrição
: comando
% em todo arquivo
s substitua
/ inicia padrão de busca
\v use very magic mode
\d dígitos
{5} 5 vezes
( inicia um grupo
\D seguido de não dígitos
) fecha um grupo
+ uma ou mais vezes
\d novamente dígitos
{3} três vezes
/ inicio da substituição
\1 referencia o grupo 1

Analisando o exemplo anterior, a linha de raciocínio foi a de “manter o texto entre os dígitos”, o que pode ser traduzido, em uma outra forma de raciocínio, como “remover os dígitos”.

:%s/\d//g

Explicação do comando acima:

Comando Descrição
% em todo arquivo
s substitua
/ inicia padrão de busca
\d ao encontrar um dígito
/ substituir por
vazio exato, substituir por vazio
/g a substituição se torna global

A opção g — de global — faz a substituição valer para todas as ocorrências do padrão em cada linha. Sem ela, apenas a primeira ocorrência de cada linha é substituída.

Classes POSIX para uso em Expressões Regulares

Ao fazermos substituições em textos poderemos nos deparar com erros, pois [a-z] não inclui caracteres acentuados, as classes POSIX são a solução para este problema, pois adequam o sistema ao idioma local, esta é a mágica implementada por estas classes.

Comando Descrição
[:lower:] letras minúsculas incluindo acentos
[:upper:] letras maiúsculas incluindo acentos
[:punct:] ponto, virgula, colchete, etc

Para usar estas classes fazemos:

:%s/[[:lower:]]/\U&/g

Explicando o comando acima:

Comando Descrição
: modo de comando
% em todo o arquivo atual
s substitua
/ inicia o padrão a ser buscado
[ inicia um grupo
[: inicia uma classe POSIX
lower letras minúsculas
:] termina a classe POSIX
] termina o grupo
/ inicia substituição
\U para maiúsculo
& corresponde ao que foi buscado

Nem todas as classes POSIX conseguem pegar caracteres acentuados, portanto deve-se habilitar o destaque colorido para buscas usando:

Comando Descrição
:set hlsearch destaque colorido para buscas
:set incsearch busca incremental

Dessa forma podemos testar nossas buscas antes de fazer uma substituição.

Para aprender mais sobre Expressões Regulares leia:

Uma forma rápida para encontrar a próxima ocorrência de uma palavra sob o cursor é teclar *. Para encontrar uma ocorrência anterior da palavra sob o cursor, existe o # (em ambos os casos o cursor deve estar posicionado sobre a palavra que deseja procurar). As duas opções citadas localizam apenas se a palavra corresponder totalmente ao padrão sob o cursor, pode-se buscar por trechos de palavras que façam parte de palavras maiores usando-se g*. Pode-se ainda exibir “dentro do contexto” todas as ocorrências de uma palavra sob o cursor usando-se o seguinte atalho em modo normal:

[ Shift-i