Vi/Vim é um dos lendários editores de texto por aí que ainda encontra o seu lugar no arsenal de utilizadores avançados e profissionais. O Vim é especialmente popular entre os programadores. Cada distribuição Linux lá fora inclui o Vim por defeito. Se estiver a correr um sistema não-Linux, deverá ainda poder desfrutar deste editor de texto de qualidade de qualquer sistema. Obtenha Vim.
Porquê este antigo software ainda é relevante? Porque é um atalho leve, de teclado para quase todas as funções, buscas de expressão incorporadas, e um ecossistema de plugins robusto, estável e saudável. Para não mencionar outras características do editor de texto dos tempos modernos, como um belo destaque de sintaxe. Encontrará o Vim mais popular entre os programadores porque o Vim requer um foco pesado no teclado. Esta é uma boa prática para programadores.
Como o título do artigo sugere, o objectivo deste guia é oferecer-lhe uma melhor compreensão das funcionalidades de pesquisa e substituição do Vim. Vim não é nada a temer. De facto, é uma das superpotências que terá sempre ao seu lado.
P>A princípio, precisamos de um texto de demonstração. Para aprender Vim, a forma mais segura é criar um ficheiro de texto descartável e fazer o que quiser com ele. Desta forma, mesmo que algo corra mal, nada de importante se perde.
Utilizo o Manjaro Linux como o meu sistema Linux. Aprenda como instalar o Manjaro Linux. É uma distro baseada em Arch usando o pacman como o gestor de pacotes padrão. Gerei um ficheiro de texto contendo todos os pacotes instalados no meu sistema.


Agora, lançar o ficheiro de texto em Vim!

Vim search
Para a pesquisa, Vim usa a seguinte estrutura.
Por exemplo, vamos procurar por “python”.

Por defeito, a pesquisa assentará num resultado fixo. Para ir para o próximo/anterior resultado de pesquisa, use as seguintes teclas.
Nota: Não se esqueça de carregar em Enter antes de usar as seguintes teclas. Caso contrário, o termo de pesquisa mudará!
n – Encontrar a próxima correspondência
N – Encontrar a correspondência anterior

Esta é apenas a forma básica de pesquisa. Vamos experimentar um método um pouco mais poderoso.

Here, \< é responsável por indicar o início da cadeia de pesquisa e /> é para o fim da cadeia de pesquisa.
Apenas como o exemplo anterior, usar n ou N (dependente de caso) para navegar nos resultados da pesquisa.
A pesquisa também suporta a utilização de wild cards. Por exemplo, existem muitos pacotes com extensão “python-“.

Para procurar todos eles, podemos usar “python*”. Aqui, o asterisco está a dizer que qualquer coisa depois do prefixo “python”. Para qualquer pesquisa, o asterisco pode estar em qualquer parte do termo de pesquisa. Onde quer que esteja, diz a Vim para preencher a lacuna com todos os dados possíveis de todo o ficheiro de texto.

Quando se está a pesquisar, O Vim colocará sempre o cursor no carácter inicial dos jogos. Esta é a acção padrão. Não se preocupe; Vim permite alterar a posição por defeito do cursor de aterragem.

Aqui, o último “e” diz para alcançar o cursor no fim da frase correspondente. Utilizando o exemplo seguinte, também se pode dizer para aterrar o cursor abaixo ou acima do resultado da pesquisa.

É também possível compensar o cursor desde o início/fim da procura. Por exemplo, o seguinte comando irá colocar o cursor a 3 caracteres ao lado do início.



Hahoo, o “s” indica o início, o “+3” indica 3 caracteres desde o início. “b” significa “begin” (começar). Também funciona de forma semelhante a “s”. A partir da captura de ecrã, Vim traduz automaticamente “b” para “s”.
Se estiver interessado em compensar a partir do fim da procura, use “e”.

Aqui está outra forma fantástica de efectuar uma pesquisa num ficheiro de texto.

Uma explicação detalhada do comando encontra-se na secção seguinte do artigo.
Vim substituir
Localizar e substituir é outra função comum e obrigatória para qualquer editor de texto de qualidade. Vim, sendo uma lenda, oferece uma maneira robusta de encontrar e substituir o seu texto desejado de uma forma simples. O comando para a função é simples mas permite fazer trabalhos realmente complexos.
Div>Dividamos cada parte.
- alcance – Definir o intervalo de execução da função “encontrar e substituir”. Existem 2 valores diferentes.
- % – Executar em todo o ficheiro
- <start _line><end_line> – Executar a acção num determinado conjunto de linhas.
- search_string – A string que precisa de substituir.
- replace_string – A nova string que irá substituir a antiga.
- modifier – Determine o comportamento de substituição. Há um par de valores diferentes.
- g – opção “Global”. Executar a substituição em cada ocorrência de uma linha.
- gc – Pedir confirmação antes de fazer cada substituição.
- gn – Ignorar a função de substituição e realçar os achados.
Por exemplo, vamos substituir todo o “python” por “Python3”.


Simples, certo? Agora, vamos ver o seguinte.

Há um punhado de acções que pode escolher. Enquanto algumas delas são familiares, outras não o são. Vamos ver o que significam.
- y – Permitir a realização da alteração.
- n – Não permitir a realização da alteração.
- a – Substituir all.
- q – Sair da tarefa.
- l – Substituir apenas esta ocorrência. Depois, quit.
- E (Ctrl + E) – Descer um ecrã
- Y (Ctrl + Y) – Descer um ecrã
Agora, vamos experimentar a parte do intervalo. No exemplo anterior, já utilizámos a parte da gama “%”. Agora, é tempo de limitar as nossas pesquisas dentro de um certo número de linhas.


A pesquisa começará na linha 200 e terminará na linha 250. Entre os limites, toda a entrada “python” será alterada para “Python3”.
Esta função não está apenas limitada a um termo de pesquisa. É possível incluir vários termos de pesquisa!
/<replace_string>/g
Tentemos mudar todas as entradas “python” e “py” para “Python3”.


Sensibilidade da caixa
Todos os truques descritos anteriormente no guia são altamente sensíveis a maiúsculas e minúsculas. É preciso ter a certeza de que sempre que se está a trabalhar, se está a escrever os caracteres no caso correcto. Por exemplo, “Python”, “python”, “PYTHON” etc., todos são entradas diferentes.
Se não se lembrar do caso, basta dizer a Vim para se tornar insensível a maiúsculas e minúsculas!
:%s/<search_term>\c/<replace_term>/g


Esta insensibilidade também pode ser directamente activada a partir do ficheiro vimrc.

Aqui está outra opção interessante.

A “ignorância” obrigará Vim a ignorar a sensibilidade ao caso. Contudo, se houver alguma letra maiúscula na sua pesquisa, o “smartcase” permitirá a Vim tornar-se novamente sensível ao caso.
Nota: Para que o “smartcase” funcione, precisa primeiro de “ignorecase”.
Pensamentos finais
Há muitas coisas que pode fazer com Vim. É como o editor de texto final que alguma vez precisará. Tudo o que precisa é apenas de paciência e alguma prática.
Desfrute!