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
:%s/\d\{5\}\(\D\+\)\d\{3\}/\1/
\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:
-
:help regex
-
:help pattern
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