O Vim é um editor de texto muito poderoso, diferenciado pela sua vasta quantidade de atalhos que possibilita uma digitação mais rápida e eficiente. No entanto, nos últimos anos passou a ser um pesadelo para muitos desenvolvedores.
Isso ocorre pelo fato de que, na maioria das vezes, esses desenvolvedores caem de paraquedas no vim, sem ao menos saber o que ele é.
Quem nunca ficou preso no vim?
Pelo fato do vim utilizar uma metodologia um pouco (muito) diferente da maioria dos editores, é comum usuários iniciantes ficarem preso nele, sem conseguir digitar, nem muito menos sair. Se você já passou por isso, você não está só. Só para você ter uma ideia, uma pergunta publicada no Stack Overflow sobre como sair do vim (How to exit the Vim editor?) gerou cerca de 1,450,614 visualizações.
Com o intuito de ajudar essas pessoas, esse é o primeiro de uma série de artigos que visa detalhar as funcionalidades do editor vim.
Aqui será abordado:
- A história do vim
- O que são os modos do vim?
- O que é o modo normal?
- O que é o modo visual?
- O que é o modo de comandos?
- O que é o modo de inserção?
- Vim no seu editor favorito
- Dicas para aprender vim
1. História do editor Vim
Antes de começarmos a estudar vim é importante conhecermos um pouco de sua história, para que possamos entender os motivos que levaram o vim a ser o que ele é hoje.
Tudo começou por volta do final dos anos 70, com o surgimento do VI. Inicialmente, um modo "visual" interativo para um editor de linha ed-like chamado ex. Foi originalmente desenvolvido por Bill Joy, um desenvolvedor do BSD que mais tarde co-fundou a Sun Microsystems.
O VI foi desenvolvido em um antigo terminal ADM-3A, cerca de uma década antes dos mouses se tornarem populares.
As limitações e características do ADM-3A influenciaram algumas das características mais distintivas do vi. Por exemplo, vi foi programado para utilizar as teclas h
, j
, k
, e l
para navegação direcional, porque o teclado ADM-3A tinha setas impressas nessas teclas. Embora tenha sido um acidente, o comando hjkl
mostrou ser extremamente eficiente, sendo utilizado até hoje como inspiração em muitas aplicações.
Quase uma década depois do surgimento do VI, por volta de 1988, Bram Moolenaar insatisfeito com os clones de VI para os computadores AMIGA, desenvolveu um editor que se aproximasse do conjunto de características do vi, chamado VIM (Vi IMitation). A primeira versão do Vim foi publicada em 2 de novembro de 1991.
Posteriormente, novas funcionalidades foram adicionadas e em pouco tempo o Vim incluía mais recursos que o próprio Vi, gerando uma mudança de nome para Vi IMproved.
Ao contrário dos outros clones vi, o Vim ainda está ativamente sendo desenvolvido e tem uma grande base de contribuintes. Novos recursos ainda estão sendo desenvolvidos e adicionados ao editor de texto todos os anos, tornando-o ainda mais poderoso.
O Vim é um projeto de software de código aberto, mas também é um recurso de caridade. A ideia básica é que todos que usam o Vim são convidados a doar para uma instituição chamada ICCF Holland que trabalha para apoiar um centro para crianças em Uganda. Assim, o uso do Vim é gratuito, se você acha que vale a pena, pode dar esse dinheiro para uma boa causa.
2. Modos do Vim
O Vim possui diversos modos e entender esse conceito é de fundamental importância para quem deseja trabalhar com ele. Os principais modos são normal
, comandos
, visual
e inserção
, basicamente eles alteram a funcionalidade do seu teclado, isso é, se estivermos em um modo e pressionarmos alguma tecla, ela irá realizar determinada funcionalidade, mas se estivermos em outro modo e pressionarmos a mesma tecla, a funcionalidade será modificada.
Um bom exemplo para entender esse conceito é a letra w
, visto que, em modo normal ela tem a funcionalidade de ir para o início da próxima palavra, no modo de comando ela salva o arquivo, e no modo de inserção ela é apenas a letra w.
O modo que você está é exibido no canto inferior esquerdo. Caso não seja exibido nada, é porque você está no modo normal.
Se você estiver em algum modo e quiser voltar para o modo normal é só pressionar a tecla ESC
.
3. Modo Normal
Ao entra no vim você irá se deparar com o modo normal, o qual é responsável por ser a porta de entrada para os outros modos, é através dele que entramos no modo visual, de inserção, de comandos, etc. Porém ele não se limita apenas a isso: é no modo normal que podemos realizar diversas funções que facilitam nossa vida no dia a dia.
Movendo o cursor
A setas no vim são equivalentes a hjkl
. Essa combinação faz com que o deslocamento dos dedos sejam bem menores em comparação com as setas dos teclados atuais.
OBS.: Isso não impede o uso das setas.
- h - Move o cursor para esquerda;
- j - Move o cursor para baixo;
- k - Move o cursor para cima;
- l - Move o cursor para direita.
Movimentando através de palavras:
- w - Move o cursor para o início da próxima palavra;
- e - Move o cursor para o final da palavra atual;
- b - Move o cursor para o início da palavra.
Para o vim, caracteres especiais são considerados como uma nova palavra. Se tivermos !@#$%&()-+=[]{}/|/:.,? no meio de uma palavra, o vim irá considerar como o início de uma nova palavra. Usando W, E, B (em maiúsculo) dizemos para o vim que um nova palavra é apenas as antecipadas por um espaço em branco.
Movimentando para o início e final da linha
- $ - Move o cursor para o final da linha;
- 0 - Move o cursor para o início da linha;
- ^ - Move o cursor para o primeiro caracter da linha.
Movimentando para o início e final do arquivo
- gg - Move o cursor para o início do arquivo;
- G - Move o cursor para o final do arquivo.
Movimentando para uma linha específica
- nG ou ngg - n representa a linha específica.
Substituir
- r - substitui o caracter atual;
- R - substitui os próximos caracteres.
Deletar
- X - Deleta da posição atual até o início;
- x - Deleta o caracter atual;
- D - Deleta da posição atual até o fim da linha;
- dd - Deleta a linha atual;
- d{movimento} - Deleta de acordo com o movimento.
Uma das coisas interessantes que o vim possibilita é a combinação de comandos, então se quisermos deletar até o final da palavra, podemos digitar de
.
Copiar e Colar
- p - Cola no local do cursor;
- P - Cola antes do cursor;
- yy ou Y - Copia toda linha.
No vim não existe o conceito de deletar, tudo é recortado. Se você deleta uma linha ou substitui uma palava, ela irá para a área de transferência e então você poderá usar o copando de colar "p".
Ir para
f{carácter}
- Move o cursor para o próximo surgimento de um caracter;F{carácter}
- Move o cursor para o surgimento anterior de um caracter;t{carácter}
- Move o cursor para antes do próximo surgimento de um caracter;T{carácter}
- Move o cursor para antes do surgimento anterior de um caracter;*
Vai para o próximo surgimento de uma palavra;#
Vai para o surgimento anterior de uma palavra.
Repetição de Comandos
Se você quiser deletar a próximas 5 palavras terá que digitar o comando de 5 vezes?
Felizmente não. No vim podemos representar a repetição de comandos adicionando um número antes do comando. Assim para deletarmos as próximas 5 palavras, poderíamos usar o comando 5de
.
Outras combinações:
- 5j - Mover o cursor 5 vezes para baixo;
- 7p - Colar 5 vezes;
- 3dd - Deletar as próximas 3 linhas.
Além dessas combinações é possível fazer muito mais.
4. Modo Visual
O modo visual é simplesmente o modo onde você pode realizar seleção. Basicamente existem 3 modos de seleção:
- v - Seleção livre onde você pode selecionar caracter, palavras ou linhas;
- V - Seleção de linhas;
- CTRL + v - Seleção de bloco.
Podemos usar os comandos de movimentação do modo normal combinados com o modo visual, assim podemos realizar seleção inteligente.
- 5ve ou v5e - Entra no modo de seleção e seleciona as próximas 5 palavras;
- vG - Entra no modo visual e seleciona do local atual até o final do arquivo;
- 5V - Seleciona as próximas 5 linhas.
A partir do que está selecionado podemos realizar ações como: copiar (y), deletar (d), sobrescrever (p), etc.
5. Modo de Comandos
O modo de comandos é o modo onde é possível executar tanto comandos internos como externos, sendo sempre é iniciado por :
. Entre as diversas funcionalidades que podemos exercer nesse modo, as mais comuns são:
- :w - Salvar o arquivo;
- :q - Sair do arquivo;
- :wq - Salvar e sair;
- :q! - Sair ignorando as modificações;
- :! {comando} - Vai para o terminal e executa um determinado comando;
- :help {comando} - Pede ajuda, sendo possível especificar o comando.
6. Modo de Inserção
Esse é o modo no qual você consegue digitar da mesma forma que nos outros editores, cada caracter representando ele mesmo. Existe diversas forma de entrar no modo de inserção, sendo elas:
- i - Insere no local do cursor, sendo uma abreviação para "insert";
- I - Insere no final da linha;
- a - Insere após o cursor, sendo uma abreviação de "append";
- A - Insere no início da linha;
- o - Cria uma nova linha abaixo e entra em modo inserção;
- O - Cria uma nova linha acima e entra em modo inserção;
- cc - Apaga a linha e entra em modo inserção, sendo uma abreviação para "clear";
- C - Apaga do local do cursor até o final da linha e entra em modo inserção;
- s - Apaga o carácter e entra em modo inserção, sendo uma abreviação para "substitute";
- S - Apaga a linha e entra em modo inserção.
Lembra que havíamos realizado algumas combinações com comandos diferentes?
Pois bem, também podemos combinar alguns comandos para entrarmos em modo de inserção de forma mais inteligente. Entre diversas combinações, podemos citar:
- ce ou se - Apaga a palavra e entra em modo inserção;
- 5s - Apaga os próximos 5 carácter;
- c0 - Apaga do local do cursor até o início da linha e entra em modo inserção;
- ct) - Apaga até o próximo surgimento de ")" e entra em modo inserção;
- cG - Apaga do local do cursor até o final do arquivo e entra em modo inserção.
Também podemos executar comandos dentro do modo inserção:
- CTRL + w Apaga a palavra atual;
- CTRL + u Apaga até o início;
- CTRL + c Volta para o modo normal;
- CTRL + o Modo normal rápido, basicamente você consegue ir para o modo normal, executar um comando e automaticamente voltar para o modo inserção;
- CTRL + g + k Subir uma linha;
- CTRL + g + j Descer uma linha.
7. Vim no seu editor Favorito
Sair do seu editor favorito e ir para um editor baseado em terminal não é uma tarefa fácil. Porém é possível trazer o vim para o seu editor, facilitando seu aprendizado. Abaixo será listando os editores e sua extensão que possibilitam o uso do vim.
Visual Studio Code: VSCodeVim
Sublime Text: ActualVim
Atom: Vim-mode
Mesmo que seu editor favorito não for um desses 3, tenho certeza que já deve existir algum tipo de implementação para vim.
8. Dicas para aprender vim
A curva de aprendizado do vim é um pouco difícil, no início você irá sentir que sua produtividade caiu bastante, mas não desanime. Não tente decorar todos os comandos de uma vez; aos poucos você aprenderá cada um deles e irá perceber que os comandos fazem sentido.
Você também pode utilizar algumas ferramentas que auxiliam no aprendizado. O próprio vim traz um tutorial que te ensina os passos básicos, bastando apenas digitar no terminal vimtutor
.
Outra alternativa é o vim-adventures, um pequeno jogo que te ensina vim de uma forma bem descontraída. Existe também o openvim, um tutorial similar ao vimtutor, com o diferencial de ser mais interativo.
Por fim, como qualquer coisa na vida, se você realmente deseja aprender vim, PRATIQUE.