O Vim é um poderoso editor de texto e possui dezenas de comandos capazes de aumentar consideravelmente sua produtividade.
São tantos comandos que seria praticamente impossível mostrar todos em um único artigo, sem torná-lo excessivamente longo e cansativo.
Portanto, o conteúdo aqui apresentado será o suficiente para você utilizá-lo facilmente como um editor de texto multipropósito, ou seja, destinado a programação, edição de arquivos de configuração, etc.
Antes de começarmos, é importante reforçar que o processo de memorização dos comandos vem apenas com a prática constante.
Certamente você se esquecerá de boa parte do que aprendeu se apenas ler o conteúdo deste material.
Dessa maneira, recomendo fortemente que você faça os exemplos deste artigo em seu computador, quantas vezes forem necessárias.
Além disso, mesmo assim, após algum tempo sem contato com determinados comandos, você sentirá necessidade de relembrá-los.
Então refaça os exercícios que julgar importantes até relembrar completamente o assunto. Infelizmente é um processo um pouco mais demorado, mas muito recompensador!
Sem mais delongas, vamos mergulhar no editor mais amado (e odiado) dos amantes das interfaces de linha de comando! Bons estudos!
Comandos Vim Básicos
Primeiramente, vamos criar nosso primeiro arquivo digitando na linha de comando o seguinte:
vim arquivo.txt
Como resultado, você deverá ver o nosso arquivo vazio dentro do editor:

O Vim, assim como seu antecessor Vi, tem uma abordagem bem diferente dos editores convencionais.
Operações básicas como ler e salvar aquivos ou até mesmo sair do editor são feitas através de uma espécie de “prompt” próprio, habilitado ao pressionar : (dois pontos).
Esse “prompt” sempre aparece na parte inferior do editor, conforme o exemplo abaixo:

A tecla ESC fecha o prompt de comando e retorna ao modo normal do Vim. Veremos adiante o que Vim possui alguns “modos” de operação.
Operações Essenciais
Dentro do prompt utilizamos, quase sempre, letras que indicam alguma ação que o Vim deve executar. Por exemplo, ao digitar :q <enter> ele se encerrá.
A letra q vem de “Quit” (sair) e o Vim somente fecha-se caso o arquivo estiver salvo. Do contrário, você precisa indicar com uma exclamação que deseja sair sem salvar as alterações.
Dessa maneira, ao digitar :q! <enter> o Vim encerrará sua execução, ignorando as alterações do arquivo em questão.
O processo de gravação, por sua vez, segue o mesmo padrão, através do comando :w <enter> (letra w de Write) o Vim salva todas as alterações.
Você pode ainda combinar :w <nome-do-arquivo> para criar um novo arquivo, como fazemos na opção “Salvar como…” dos editores comuns.
Caso queira salvar e sair logo em seguida, a combinação :wq <enter> faz isso para você, ou simplesmente ZZ (shift + zz) – um atalho para o comando :wq.
Recapitulando
- :q = sair (apenas arquivos sem modificações)
- :q! = sair sem salvar o arquivo
- :w = salva o arquivo
- :w <nome-do-arquivo> = cria um novo arquivo e o salva
- :wq ou ZZ = salva e sair do Vim
Começando a praticar
Antes de praticar os comandos acima, você precisa aprender como digitar algo dentro do Vim. Sim, apenas sair digitando não dará certo.
Lembra que mencionei sobre alguns “modos” do Vim? Pois bem, ao entrarmos no editor, por padrão ele aciona o modo normal. Entenda esse modo como uma espécie de modo de navegação.
Para digitar livremente, precisamos acionar o modo de inserção. Existem diversas formas de fazer isso, no entanto, por hora, apenas digite a tecla a.
Note que agora a barra de status informa nosso novo modo através da palavra INSERT, conforme o exemplo abaixo:

Escreva o texto que desejar e tecle ESC para sair do modo de inserção, retornando ao modo normal. Dessa maneira, você pode acionar o modo de comando novamente com o : e executar o que quiser.
Agora, pratique um pouco os comandos acima. Entre e saia do editor, digite qualquer coisa nele, salve as alterações, saia sem salvar, experimente o que desejar!
Por enquanto, somente esses comandos serão suficientes para trabalharmos em nossos arquivos. Mais adiante, quando estiver mais familiarizado(a), veremos outros mais avançados.
Navegação no Texto
Normalmente percorremos o texto no modo normal do Vim, no entanto, nada impede que você o faça dentro do modo de inserção, utilizando as teclas de navegação do seu teclado.
Porém, neste caso, a navegação torna-se bastante ineficiente uma vez que todos os seus comandos ficam indisponíveis.
Vamos a um exemplo simples que demonstra esse cenário. No modo normal, as teclas h,j,k,l funcionam da mesma maneira que as setas de navegação.
Desse modo, a tecla h equivale a seta para esquerda, j seta para baixo, k seta para cima e l seta para direita.
Já no modo de inserção, as teclas h,j,k,l funcionam simplesmente como… letras! Afinal, você está digitando um texto e quer que essas teclas desempenhem sua função de escrita.
Agora pratique um pouco alternando entre os modos normal e inserção. A ideia é fixar bem o conceito da mudança de configuração que o teclado apresenta ao alternar entre os modos do Vim.
Para facilitar um pouco seu ambiente de testes, deixo nesse link um arquivo de texto com algumas linhas, pronto para ser navegado.
Recapitulando o essencial da navegação
- h = seta para esquerda = cursor uma vez à esquerda
- j = seta para baixo = cursor uma vez para baixo
- k = seta para cima = cursor uma vez para cima
- l = seta para direita = cursor uma vez à direita
Atalhos de navegação
Percorrer todo o texto caractere a caractere ou linha a linha é muito lento e tedioso. Há, portanto, algumas formas mais eficientes de deslocar o cursor e facilitar nossa vida.
A primeira delas é o deslocamento por palavras, pressionando a tecla w (word). Importante definir que o Vim entende por palavra tudo que é separado por caracteres diferentes de alfanuméricos e _ (underline).
O exemplo abaixo deixa nítida essa definição:

Lembre-se que sempre que quisermos navegar pelo texto, devemos ficar no modo normal do editor.
O mesmo vale se quisermos navegar pelas palavras no sentido contrário. Utilize a tecla b (back) e em seguida, veja o que acontece:

Semelhantemente, você ainda pode deslocar de palavra em palavra posicionando o cursor ao final de cada uma através da tecla e (end). Veja:

Para ir ao final da linha, igualmente fazemos com a tecla END, digite $:

E para voltar ao início dela, igual a tecla HOME, digite 0 (zero):

Agora imagine que tenha um texto maior e queira ir rapidamente do início ao final do arquivo e vice-versa. Normalmente utilizamos CTRL+HOME e CTRL+END, no entanto no Vim é diferente.
Utilize gg para ir ao topo e G para ir ao final do arquivo. Veja:

E se quisermos ir a uma linha específica do texto? Simplesmente digite o número dela seguido de G:

Por fim, para navegar por página, digite CTRL+F (página abaixo) e CTRL+B (página acima) – igual fazemos com as teclas PgUP e PgDn.
Agora pratique um pouco os atalhos de navegação e percorra o texto do exemplo ou outro qualquer que contenha um volume razoável de linhas.
Quando estiver pronto, siga em frente e aprenda os próximos comandos Vim!
Atalhos de Navegação ainda mais rápidos
Com o intuito de agilizar ainda mais o deslocamento do cursor pelo texto, o Vim permite que combinemos um número com uma determinada ação.
Por exemplo, se quisermos andar três palavras de uma só vez, não precisamos pressionar a tecla w três vezes, basta combinar o número 3 com a ação w.
Portanto veja o que acontece quando digitamos 3w:

Como resultado, veja que pulamos direto para a “palavra4”, andando portanto três palavras da esquerda para direita.
O mesmo pode ser aplicado com o ação da “tecla e” e da “tecla b“. Mais adiante você verá que várias outras ações também podem ser combinadas com números.
Recapitulando os atalhos
- w – move por palavras (adiante), posicionando o cursor no inicio de cada palavra
- e – move por palavras (adiante), posicionando no final de cada palavra
- b – move por palavras (retrocedendo), com o cursor no inicio de cada palavra
- combine um número com as ações w, e, b para fazê-las mais vezes com um único comando
- $ – posiciona no final da linha
- 0 – posiciona no inicio da linha
- gg – posiciona no inicio do arquivo
- G – posiciona no final do arquivo
- <número da linha>G – posiciona na linha desejada
- CTRL+F – página abaixo
- CTRL+B – página acima
Comandos Vim para Edição
O Vim é bastante rico em recursos voltados para a edição de texto. Desta forma, vou dividir esta parte do artigo em três: apagar, adicionar e alterar conteúdos.
Importante ressaltar mais uma vez que todas as ações abaixo também requerem que o editor esteja no modo normal para funcionarem.
Apagando caracteres, palavras e linhas
Simples e direto, primeiramente vamos apagar um único caractere apenas digitando a tecla x sobre a letra que desejamos eliminar. Veja:

As coisas começam a ficar muito interessantes quando combinamos essa ação com instruções de movimento, por exemplo, adicionando o número três antes de x:

No exemplo acima, ao digitar 3x apagamos os três primeiros caracteres da linha, uma vez que nosso cursor estava ali posicionado.
Em alguns casos, contar caracteres antes de apagá-los é muito trabalhoso. Então também podemos combinar ações de movimentação com outro comando que apaga caracteres.
Veja por exemplo um novo comando que funciona exclusivamente combinado com movimentação. Trata-se da tecla d com qualquer outra ação de movimentação (w, e, b, $, 0)
Dessa forma, podemos apagar uma palavra inteira com dw:

Ou ainda duas palavras, com 2dw:

Apague o resto de uma linha a partir de um determinado ponto com d$:

Ou caso necessite, apague a linha toda com dd:

Importante aqui é guardar bem que:
- primeiro vem a quantidade de vezes, caso queira; Ex.: 2
- depois, o comando de alteração; Ex.: d
- por fim, o comando de movimentação, caso queira. Ex.:w
Recapitulando:
- x – apaga um único caractere
- <número>x – apaga uma quantidade específica de caracteres
- d<movimento> – apaga a quantidade de caracteres movimento. Ex.: dw
- <numero>d<movimento> – apaga uma quantidade específica de caracteres envolvidos no movimento. Ex.: 2dw
Com base no que você já aprendeu, experimente comandos semelhantes como por exemplo 2dd (apaga duas linhas) ou ainda 3db (apaga 3 palavras de trás para frente).
Seja criativo e combine ações com movimentação sem medo! Faça uma pausa na leitura e pratique até sentir-se confortável para continuar!
Adicionando conteúdo
Antes de começarmos, para fins didáticos, vou definir que ‘adicionar conteúdo’ significa apenas incluir informações novas, sem modificar o que já existe.
Na próxima seção veremos como “alterar conteúdo” através de comandos específicos para trocar caracteres, palavras ou ainda pedaços de texto.
Dadas as devidas definições, vamos direto ao ponto!
Inserir Antes ou Depois
Lembra do modo de inserção que mencionei antes? Pois bem, todos os comandos que mostrarei nessa seção fazem com que o Vim mude para ele, com pequenas diferenças no posicionamento do cursor.
Vamos começar pelo comando a (append). Ele permite que o Vim mude do modo normal para inserção, posicionando o cursor após o caractere onde ele estava.
Veja no exemplo abaixo, tudo vai ficar mais claro:

Quando pressiono a tecla a sobre o espaço entre as palavras “um” e “texto, o Vim muda para modo de inserção, posiciona o cursor logo após o caractere de espaço e permite que eu comece a digitar a partir dali.
Como resultado, pude digitar a palavra “novo” e assim adicionei uma nova palavra ao texto.
De forma muito semelhante, podemos inserir novos caracteres através do comando i (insert). A diferença é que agora o Vim posiciona o cursor antes do caractere onde ele estava:

Neste caso, como o cursor estava sobre o segundo caractere de aspas, o Vim posiciona o cursor no modo de inserção antes deste segundo caractere.
Assim, pude digitar o “i” dentro das aspas duplas. Caso eu tivesse lançado o comando anterior (a), o Vim teria posicionado o cursor após as aspas e a digitação começaria no lugar errado.
Os próximos comandos são mais simples e ajudam a reforçar a ideia de cursor antes ou depois de algo. O comando A (maiúsculo) permite adicionar texto ao final da linha (depois):

O comando I (maiúsculo), de maneira semelhante, permite inserir texto no início da linha (antes)

*O comando I faz mais sentido quando o cursor está longe do início da linha.
Inserir linhas novas
Apesar de ser uma tarefa muito simples, adicionar uma nova linha apenas com o conhecimento adquirido até agora não seria tão eficiente.
Precisaríamos posicionar o cursor ao final da linha anterior à nova linha com o $, entrar no modo de inserção com a e por fim teclarmos <enter> para criar a linha.
Já com o comando o (open), o Vim abre uma nova linha abaixo da linha onde o cursor está. Portanto, precisamos apenas ir até a linha desejada e teclar o:

Como deixei o cursor na linha 2, o Vim abriu uma nova linha imediatamente abaixo dela e trocou do modo normal para o modo de inserção.
O mesmo quase acontece se utilizarmos O (maiúsculo). Desta vez o Vim abre uma nova linha imediatamente acima da linha onde o cursor está:

Como resultado o Vim posicionou o cursor entre as linhas 1 e 2, uma vez que o deixei da mesma forma que no exemplo anterior.
Recapitulando:
- a – adiciona conteúdo após o cursor
- i – adiciona conteúdo antes do cursor
- A – adiciona conteúdo ao final da linha
- I – adiciona conteúdo no início da linha
- o – abre uma nova linha abaixo da linha onde o cursor está
- O – abre uma nova linha acima da linha onde o cursor está
Importante lembrar você sempre deve estar no modo normal para executar estes comandos.
Conforme de costume, pratique um pouco destes comandos e continue a leitura após algumas rodadas de exercícios!
Alterando conteúdo
Alterar algo no Vim é apenas a combinação da ação de apagar com a inserção de novos caracteres, tudo em um único comando.
Por exemplo, veja como o comando r (replace) se comporta. Ao pressionar a tecla r sobre um determinado caractere, somos capazes de sobrescrevê-lo:

Uma vez que deixei o cursor sobre a letra “v”, ao pressionar a tecla r pude digitar a letra “V” e assim sobrescrevê-lo.
Portanto o comando r permite que sobrescrevamos apenas um caractere por vez. Por outro lado, o comando R (maiúsculo) permite sobrescrevermos livremente:

Neste caso, o Vim entra em um modo diferente dos vistos até aqui: o modo de substituição. Agora, ao pressionar R a barra de status mostra “–REPLACE–” indicando, dessa maneira, que estamos neste modo.
Igualmente quando estamos no modo de inserção, digite livremente e ao final apenas tecle <esc> para retornar ao modo normal. Simples assim.
Modo de Inserção
Já o comando s funciona um pouco diferente. Ele apaga o caractere onde o cursor está e, ao invés de mudar para o modo de substituição, ele passa para o modo de inserção:

Ao pressiona s sobre o ponto final, o Vim apaga-o e muda para o modo de inserção, possibilitando dessa maneira que digitemos normalmente em seguida.
Agora, se pressionar S (maiúsculo), você consegue apagar toda uma linha e entrar no modo de inserção automaticamente:

Sem o comando S, teríamos que primeiramente apagar a linha com dd para somente depois entrar no modo de inserção com a ou i, por exemplo.
Por fim, mas não menos importante, temos o comando c (change). Ele é um comando um pouco mais flexível por permitir que apaguemos uma parte específica do texto.
Funciona assim: ao combinar c com alguma ação de movimento, apagamos o conteúdo desse movimento e entramos em seguida no modo de inserção. Muito útil para trocar valores de arquivos de configuração. Veja:

Ao digitar cw sobre o “a” de always, o Vim apaga a palavra toda (movimento com a tecla w) e passa a operar no modo de inserção.
O mesmo vale se combinarmos c com outras ações como $, 0, e, b. Além disso, ainda podemos adicionar um número que vezes, como por exemplo 2cw (apaga duas palavras).
Recapitulando:
- r – sobrescreve apenas o caractere sobre o cursor
- R – sobrescreve livremente a partir do cursor
- s – apaga o caractere sobre o cursor e entra no modo de inserção
- S – apaga toda a linha onde o cursor está e entra no modo de inserção
- <número>c<movimento> – apaga os caracteres selecionados pela ação de movimento e coloca o Vim no modo de inserção. Ex.: c$ (apaga até o final da linha)
Comandos Vim para Localizar e Substituir
Localizar correspondências
O Vim permite que localizemos algo dentro do texto através um novo “prompt”, acionado com as teclas / (barra) e ? (interrogação).
A diferença entre elas está somente no sentido da busca. Enquanto / inicia a busca avançando pelo texto, ? inicia retrocedendo. Veja no exemplo abaixo:

Ao digitar /em<enter>, o Vim começa a procurar pela palavra “em” do início para o final do arquivo e posiciona o cursos sobre a primeira ocorrência encontrada.
Para navegar entre as palavras encontradas, pressionamos a tecla n. Ao chegar na última ocorrência, o Vim volta automaticamente à primeira. N (maiúsculo) navega no sentido contrário.
O mesmo vale para ?em<enter>, no entanto, a busca começa pelo final do arquivo conforme o exemplo abaixo:

Se quiser retornar o cursor para onde você estava antes da busca, apenas digite CTRL+o.
Localizar Parênteses, Colchetes e Chaves Correspondentes
Dentro do contexto de busca existe um recurso muito interessante, principalmente para programadores. O comando % aplicado quando o cursor está sobre (, [ ou { move o cursor para seu fechamento:

Cada vez que % é pressionado, o cursor alterna entre os parênteses, ou seja, na primeira vez ele vai para o fechamento, na segunda, volta para o início e assim por diante.
Funciona da mesma maneira para colchetes e chaves:

Buscar e Substituir
À princípio, substituir termos no Vim parece um pouco complicado, mas na verdade é bastante simples. A maior “dificuldade”, se é que podemos classificar assim, é memorizar um comando um pouco maior.
Executamos as operações de substituição naquele prompt da tecla : (dois-pontos) e normalmente começamos o comando com a letra s seguido do termo procurado e do termo que deve substituí-lo, tudo entre barras /.
Dessa maneira, observe o comando :s/@/a abaixo:

Como resultado, este comando troca apenas o primeiro símbolo de arroba (@) da linha por a. Portanto, memorize o seguinte:
- todo comando de substituição sempre ocorre dentro do prompt : (dois-pontos)
- começa quase sempre com s (veremos adiante que pode incluir símbolos antes)
- segue com /termo-procurado/novo-termo
- pode terminar com modificadores de comando ao adicionar /<modificador>, conforme veremos à seguir
Agora, ao acrescentar /g (global) nesse mesmo comando, ou seja, :s/@/a/g, substituímos todas as arrobas da linha em questão por a’s:

Podemos ampliar a abrangência deste comando e aplicá-lo a múltiplas linhas, mas não no arquivo todo (ainda).
Fazemos isso indicando um intervalo de linhas (inicial e final) antes da letra s e tudo que estiver entre elas será modificado. Por exemplo, suponha que queremos modificar apenas as linhas 1, 2 e 3.
Então modificamos o comando anterior indicando a linha inicial (1) e a final (3), desta maneira:
:1,3s/@/a/g

Caso queira substituir todas as ocorrências do arquivo, de uma só vez, troque a indicação das linhas (1,3) por %, dessa maneira: :%s/@/a/g

Pedindo confirmação
Basta adicionar a letra c (confirm) ao final de todos os comandos e o Vim pedirá sua permissão para proceder com substituição de termos.
Nesse sentido, vamos voltar ao segundo exemplo e adicionar a letra c. O novo comando fica assim: :s/@/a/gc e você verá isso:

Note que podemos navegar pelas ocorrências da mesma forma que fizemos antes, usando a tecla n (next) para deslocar ao próximo e N (maiúsculo) para voltar ao anterior.
Sendo assim, somos capazes de alterar apenas o termo que nos interessa com a tecla l (last), conforme no exemplo acima.
No entanto, ainda existem outras opções, muitas delas autoexplicativas. Mesmo assim, veja o que cada uma delas faria nesse exemplo: (:s/@/a/gc)
- y (yes): substitui o termo atual e posiciona o cursor na próxima ocorrência
- n (no): não substitui o termo atual e posiciona o cursor na próxima ocorrência.
- a (all): substitui todas as ocorrências
- q (quit): sai do prompt e não substitui nada
- l (last): substitui o termo atual e sai do prompt
- ^E (CTRL+E): rola a tela uma linha para cima
- ^Y(CTRL+Y): rola a tela uma linha para baixo
Ignorando Maiúsculo Minúsculo
Às vezes precisamos de uma busca um pouco mais maleável a fim de encontrar termos semelhantes, como por exemplo MochileiroTI ou mochileiroti.
Fazer isso é relativamente simples, precisamos informar ao Vim através do comando :set que queremos ignorar letras maiúsculas e minúsculas.
Portanto, digite :set ic (ignore case) e encontre todas as palavras independentemente da caixa das letras:

Se quiser voltar ao normal e pesquisar por termos exatos, basta executar :set noic (no ignore case)
Conclusão
Evidentemente que o Vim possui vários outros comandos além dos aqui apresentados, que tornam o editor ainda mais poderoso.
Decidi deixá-los de fora deste artigo para não torná-lo extremamente grande e tedioso. A ideia aqui é tornar você hábil o suficiente para pelo menos “se virar” em um ambiente de linha de comando.
Portanto, caso queira ou sinta necessidade de aprender ainda mais, sugiro a leitura de qualquer um dos livros indicados no site do próprio editor https://iccf-holland.org/vim_books.html
Quem sabe em um futuro próximo eu escreva um artigo mais avançado, demonstrando recursos que acelerem ainda mais atividades de edição/criação de textos.
Apenas para despertar a curiosidade, o Vim possui um “sucessor” mais avançado chamado Neovim, com suporte a diversos plugins que o modificam drasticamente.
E o melhor de tudo: todos os comandos do Vim são compatíveis, portanto, tudo que você aprendeu aqui vale para ele.
Em resumo, o Vi, Vim ou Neovim são editores fantásticos quando utilizados da forma correta. Embora leve mais tempo para aprender como tudo funciona, o ganho de produtividade é notável.
Dessa maneira, vale muito a pena investir um pouco de tempo e usufruir de todos benefícios.
Espero ter ajudado!
Até a próxima!