Expressões Regulares no Vim
Boa parte do que está aqui é uma adapatação do :help usr_27.txt (arquivo de ajuda integrada do Vim).
Básico
Início e fim de linha
:help 03.9 (Simple search patterns)
Use as opções :set incsearch e :set hlsearch para praticar. Para “resetar as cores”, :nohlsearch. Crie um arquivo com pedaços de texto que torne possível praticar as dicas aqui apresentadas.
O caractere ^ faz correspondência ao início da linha. O caractere $ corresponde ao fim da linha.
Econtra “teste” somente se estiver no final da linha:
/teste$
Encontra teste somente se estiver no início da linha;
/^teste
Encontra “teste” somente se ele for a única coisa da linha. Não pode haver espaços nem antes e nem depois de “teste”:
/^teste$
Qualquer caractere uma vez
O . (ponto) corresponde a qualquer caractere – uma vez.
Corresponde a “abc”, “azc”, “aYz”, “a b”, “a-b”, etc:
/a.b
Escapar caracteres especiais
Se queremos encontrar literalmente um ponto, devemos escapar o ponto, pois no vim ele é um caractere especial.
Se fizer somente
/.
vai corresponder a todos os caracteres, até mesmo espaços em branco. Para encontrar somente o ponto literalmente:
/\.
Escapando o . ele se torna um reles mortal e perde todos os seus superpoderes de caractere especial.
RegExp nível intermediário
:help usr_27.txt
Ignorando maiúsculas e minúsculas
Por padrão, o vim é sensível à caixa da letra. Portanto, “else”, “ELSE”, Else” são palavras diferentes. Para que o vim ignore a caixa da letra (case):
:set ignorecase
Agora, tanto faz procurar por “else”, “ELSE”, ou “Else”, pois o vim vai tentar encontrar a palavra não importa quais letras nes estejam maiúsculas ou minúsculas.
Para voltar a se importar com o case da letra:
:set noignorecase
Há também a opção smartcase, que é “ignorecase” por padrão, mas se você realizar a procura com pelo menos uma letra maiúscula o vim detecta e passa a ser sensível ao case automaticamente.
:set ignorecase smartcase
Para fazer procura sensível à caixa em uma pesquisa apenas, usamos \C (maiúsculo):
/\Cteste /\CTeste
O primeiro só combina com “teste”, todas minúsculas. O segundo só combina com “Teste” com o primeiro “T” maiúsculo.
Para tornar a pesquisa insensível ao case use \c (minúsculo):
/\cteste
Encontra “teste”, “TESTE”, “teSTE”, etc.
A vantagem de usar \c e \C é que eles ficam no histórico junto com o ‘pattern’ da pesquisa.
NOTA: O uso de \ depende da opção magic. :help ‘magic’.
Offsets de linhas
Quando fazemos uma busca, o cursor para na linha da busca. Se queremos parar duas linhas após o elemento procurado:
/teste/2
Offset de caracteres
Parar o cursor no último caractere do elemento procurado (e = end):
/teste/e
Coloca o cursor 3 caracteres após o último caractere do elemento procurado:
/teste/e+3
Coloca o cursor no penúltimo caractere do elemento procurado:
/teste/e-1
Coloca o cursor na segunda no terceiro caractere do elemento buscado (b = beggin):
/teste/b+2
É b+2 por que b já é o primeiro caractere, então + 2 dá 3.
Estes offsets serão mais úteis quando estudarmos o conteúdo do :help pattern.txt.