A maioria das distribuições Linux mantém o vi como opção de editor de textos. Esta poderosa ferramenta foi desenvolvida na década de 1980, quando ainda não se fala de interfaces gráficas (GUIs) da maneira como consentimos hoje. Em 1992 surgiu o vim, ‘vi iMitator’, que em seguida passou a ser conhecido como ‘vi iMproved’ (vi melhorado).

O vim é um dos editores de texto mais utilizados nos sistemas Unix. Na maioria dos casos ao chamar o comando “vi” na verdade o sistema chama o “vim”. Sabendo disso vamos então abordar o “vim”, um editor poderoso que dispõe de diversas funcionalidades. Com o vim é possível abrir vários arquivos ao mesmo tempo, realizar autocorreção, auto-identação, fazer seleção visual, macros, fazer seleção vertical de texto, utilizar expressões regulares, tudo isso com sintaxe colorida. A aplicação não é exclusiva do Linux, funciona também em outras plataformas.

Sendo uma aplicação de terminal naturalmente você terá que abrí-lo a partir do terminal, prompt de comandos.  Bata utilizar comando vi /caminho/do/arquivo para abrir um arquivo existente com o vim. O comando vi /caminho/do/arquivo  também funciona se o arquivo não existir ainda, neste caso o vim vai criar um novo arquivo e escrever no local especificado assim que você salvá-lo.

O vim funciona em modos, que são estados em que a aplicação se encontra. São eles: modo de inserção, comandos, linha de comando, visual, busca e reposição. Veremos os 2 primeiros que são também os mais importantes: modo de inserção e de comandos.

Para executar o vim utilize algum dos comandos.

$ vi => Abre o vim vazio, sem nenhum arquivo e exibe a tela de apresentação da aplicação.
$ vi arquivo => Abre o arquivo de nome “arquivo”.
$ vi arquivo + => Abre o arquivo de nome “arquivo”, com o cursor no final do mesmo.
$ vi arquivo +10 => Abre o arquivo de nome “arquivo”, com o cursor na linha 10.
$ vi arquivo +/Danilo => Abre o arquivo de nome “arquivo”, na primeira ocorrência da palavra “Danilo”.

Para identificar o modo (estado) do vim, basta visualizar a última linha da tela, ela traz informações sobre o modo atual da aplicação. Ao executar o vim, ele inicia diretamente em modo de comando. Podemos observar que a última linha da tela vai está vazia ou com uma informação sobre o arquivo aberto. Para inserir ou editar informações no arquivo, pressione “i” em seu teclado. Neste momento o vim entrará no modo de inserção, observe que o rodapé da tela (última linha) conterá a seguinte marcação: — INSERT —

Após realizar as inserções e/ou alterações no arquivo você pode salvá-lo para editar mais tarde ou simplesmente salvar e continuar editando. Para isso você deve primeiro pressionar a tecla ESC. Com ela você volta ao modo de comando do vi. Veja os comandos para salvar/sair:

:w => Salva o arquivo que está sendo editado no momento.
:q => Sai.
:wq => Salva e sai.
:​x => Idem.
ZZ => Idem.
:w! => Salva forçado.
:q! => Sai forçado.
:wq! => Salva e sai forçado.

Após salvar o texto utilizando o comando “:w” você pode voltar a editar pressionado a tecla “i”. Veja os comandos de edição de texto:

i => Insere o texto antes do cursor
A => Insere o texto no fim da linha onde se encontra o cursor
o => Adiciona uma linha vazia abaixo da linha corrente
O => Adiciona uma linha vazia acima da linha corrente
Ctrl + h => Apaga último caractere à esquerda

Agora os comandos de movimentação pelo texto:

Ctrl + f => Passa para a tela seguinte.
Ctrl + b => Passa para a tela anterior.
H => Move o cursor para a primeira linha da tela.
M => Move o cursor para o meio da tela.
L => Move o cursor para a última linha da tela.
h => Move o cursor para caracter a esquerda.
j => Move o cursor para linha abaixo.
k => Move o cursor para linha acima.
l => Move o cursor para caracter a direita.
w => Move o cursor para o início da próxima palavra (não ignorando a pontuação).
W => Move o cursor para o início da próxima palavra (ignorando a pontuação).
b => Move o cursor para o início da palavra anterior (não ignorando a pontuação).
B => Move o cursor para o início da palavra anterior (ignorando a pontuação).
0 (zero) => Move o cursor para o início da linha corrente.
^ => Move o cursor para o primeiro caracter não branco da linha.
$ => Move o cursor para o fim da linha corrente.
nG => Move o cursor para a linha de número “n” (substitua n pelo número da linha)
G => Move o cursor para a última linha do arquivo.

Copiando e colando textos no vim

Utilizando o mouse

Com o vim no modo de inserção, selecione o texto necessário com o botão esquerdo do mouse. Quando você for colar, saiba que o texto será colado a partir de onde se encontra o cursor. Para colar, depois de ter selecionado o texto, você deve pressionar o botão direito + botão esquerdo do mouse juntos.

Usando o modo visual do vim

Entre no modo visual, pressionando a tecla “v” no modo de comandos. Com as teclas de direção (h, j, k, l) ou as setas de direção do teclado selecione os caracteres movendo o cursor para o fim do onde você deseja copiar. Então pressione a tecla “y” para copiar ou “d” para recortar. Mova novamente o cursor para o ponto onde você deseja colar e pressione a tecla “p” para colar após o cursor ou “P” para colar antes do cursor.

Mais comandps para copiar e colar

yy => Copia a linha onde o cursor se encontra.
5yy => Copia as próximas 5 linhas a partir da posição atual do cursor.
p => Cola o que foi copiado na linha abaixo do cursor atual.

Removendo textos

Para remover um determinado texto você pode utilizar a tecla “Delete” livremente ou dentro do modo visual (v). Você pode remover até o final de uma palavra, utilizando o comando “dw”. Pode também remover até o final de uma linha utilizando “d$”.

Mais opções para remoção de caracteres

x => Apaga o caracter onde o cursor estiver.
dd => Apaga a linha inteira onde o cursor estive
D => Apaga a linha a partir da posição do cursor até o fim.
J => Une a linha corrente à próxima.
2dd => Remove as próximas 2 linhas a partir da posição do atual do cursor (qualquer número).

Desfazendo uma ação

Para desfazer uma ação basta pressionar “u”. Se você precisar voltar o texto na tela, utilize as teclas Ctrl + r.

Opções para substituição de textos

rCARACTER => Substitui o caracter onde o cursor se encontra pelo caracter especificado em CARACTER.
RTEXTO => Substitui o texto corrente pelo texto digitado (sobrepõe).
cw => Remove a palavra corrente para substituição.
cc => Remove a linha corrente para substituição.
C => Substitui o restante da linha corrente, esperando o texto logo após o comando.
J => Une a linha corrente à próxima.
:s/velho/novo => Substitui a primeira ocorrência de “velho” por “novo” na linha corrente.
:% s/velho/novo => Substitui em todo o arquivo (%) a primeira ocorrência de “velho” por “novo” em cada linha.
:% s/velho/novo/g => Substitui em todo o arquivo (%), todas (g) as ocorrências de “velho” por “novo”.
:% s/velho/novo/gc => Igual ao anterior, mas pedindo confirmação para cada substituição.

Opções de conversão de caixa alta e caixa baixa

5~ => Inverte os 5 próximos caracteres.
g~$ => Inverte todos os caracteres até o fim da linha.
seleciona, u => Converte para caixa baixa. A seleção deve ser feita no modo visual (v).
seleciona, U => Converte para caixa alta.
seleciona, ~ => Inverte.

Utilizando registradores

Os registradores são um espaço em memória que o vim usa para armazenar texto. Cada um destes espaços tem um identificador. o que permite que sejam acessados mais tarde. Funciona da mesma maneira de quando você copia algum texto para a área de transferência, com uma vantagem: você terá não várias áreas de transferência, podendo assim armazenar diversos textos diferentes.

Os registradores são acessados usando aspas duplas antes do seu nome. Você pode, por exemplo, acessar o conteúdo do registrador com “a.

Você pode adicionar texto ao registrador a com “ay. Fazendo isso você está copiando (yanking) o texto selecionado, e então adicionando isso ao registrador “a. Para colar o conteúdo deste registrador a lógica é a mesma: “rp. Você pode também acessar os registradores no modo de inserção ou de comandos com Ctrl-r + nome do registrador, por exemplo: Ctrl-r a cola o conteúdo de a no seu buffer atual. O comando :reg pode ser utilizado para visualizar todos os registradores e seus conteúdos, ou filtra apenas aqueles que você está interessad com :reg a b c.

O vim tem um registrador padrão ou “sem nome” que pode ser acessado com “”. Qualquer texto que você deletar (com d, c, s or x) copiar/yank (com y) será colocado nesse registrador. É isso que o vim usa no comando colar (p) quando nenhum registrar explícito é dado. Um simples p é o mesmo que “”p.

Ao utilizar o vim é muito comum copiar textos para colar em algum local. Se antes de fazer a colagem você acabar precisando deletar em outro local o que vai acontecer? O texto copiado não estará mais lá, isso porque o vim substituiu o conteúdo pelo texto você acabou de deletar. Assim você teria que voltar e copiar novamente. O vim sempre substitui o registrador “sem nome”. Mas a boa notícia é que o vim povoa registradores numerados de 0 a 9. Onde o “0” sempre terá o conteúdo da cópia mais recente (yank: y) e o “9” da cópia mais antiga. Isso significa que ao copiar um texto no vim você pode se referir a ele utilizando “0p.

Isso é tudo que eu tenho para vocês. Com os comandos e dicas acima você conseguirá se sair bem em praticamente qualquer situação com o vim. E se você precisar mais funcionalidades você pode utilizar o comando :help a qualquer momento durante a edição de um arquivo no vim ou acessar o site oficial com a documentação do vim. Se você quer aprender tudo sobre o vim de maneira com alguém que é especialista no assunto recomendo o site do Aurélio Jargas, o conteúdo que ele oferece sobre o vim é simplesmente incrível.