Faz um certo tempo que não apareço por aqui, mas estou de volta. Tive um bocado de coisas para resolver, que me impediram de postar aqui da maneira que gostaria. Mas sem mais delongas, vamos falar sobre o tema: Vim/Neovim e o VSCode.
Há um certo preconceito que ronda o Vim ou sua variante mais moderna, o Neovim. Por ser um programa antigo e que roda no terminal, quem o vê e compara com o mais querido do momento - o VS Code - logo pensa: "como alguém em sã consciência quer mexer num negócio destes? É feio e difícil de mexer, e quando eu tentei sair dele eu não consegui!"
Por outro lado, quem o utiliza não quer voltar a usar outras IDEs1. Por que será? Deve ter algum motivo, pois não vejo como uma coisa ruim poderia durar tanto tempo. Antes de falar sobre as diferenças, vamos entender primeiro o que é o Vim.
O que é o Vim?
O Vim é apenas um editor de textos que funciona diretamente no terminal ou com uma interface visual, baseado em modos e comandos. Para entendê-lo melhor, antes vamos ver um pouco da sua história.
Vi - Visual editor
Vi é um editor de texto criado por Bill Joy em 1976, para um sistema derivado do Unix, chamado BSD2. Este tal BSD é a base para o sistema usado em Macs hoje em dia.
O vi foi baseado em outro editor chamado Ex, muito útil para editar arquivos de configuração com as limitações dos computadores da época. Ele funciona com comandos inseridos em uma linha na parte inferior da tela. Ao digitar visual
ou sua abreviação vi
no editor, abre-se o modo visual que possibilita uma edição mais livre e com um cursor na tela, semelhante ao que conhecemos. O nome "vi", portanto, vem do comando usado para entrar no modo visual do Ex.
O diferencial do Vi é por ele ser um editor modal, isto é, teclas podem conter funções diferentes a depender do modo em que o editor se encontra. Mais a frente eu entro em detalhes de como estes modos funcionam.
Vim - Vim Improved
O Vim é um editor criado pelo holandês Bram Moolenaar, a partir do editor Stevie, que foi uma versão para o Atari ST do vi que citei anteriormente.
Este possui uma interface bem semelhante e diversas adições ao vi original, deixando-o mais moderno e fácil de utilizar. Dá para configurar o uso de mouse e instalar extensões, por exemplo.
Neovim
Apesar de o Vim ser um editor bom o suficiente, todas as atualizações são aprovadas pelo próprio Bram Moolenaar para ser aplicadas nas novas versões. Como o mundo do código aberto exige mais rapidez e menos centralização, e além disso, o código do Vim já ter se tornado bastante difícil de manter e extender, nasceu o Neovim: mais um clone do Vim, focado na extensibilidade e usabilidade. Parte deste novo código está em Lua3.
Modos
Como prometido, agora vou explicar o que são os modos e como eles funcionam. Certamente você já usou algum aplicativo que tem sua interface dividida em passos. Os modos funcionam de forma semelhante: cada um tem sua forma de interagir com o conteúdo. Ele faz com que você tenha um foco específico ao editar.
Um programa que possui isso hoje em dia, é o Affinity Designer, por exemplo. Você tem um modo de desenho, outro de pintura e outro de exportação. No caso deste, os modos são chamados carinhosamente de "personas".
Desta mesma maneira, o Vim/Neovim trata a edição de textos. A saber, os modos são:
- Normal: Não permite a inclusão de textos, mas alterações rápidas nele, como substituir letras, apagar conteúdo, copiar ou colar linhas. É o modo que o editor abre por padrão e ativado com a tecla
esc
. - Visual: Permite que sejam feitas seleções de áreas do texto. Ativado pelo atalho
v
- Inserção: Este modo é o que permite digitar textos. Ativado com a tecla
i
. - Comando: Nele é possível inserir comandos na barra inferior, como salvar o arquivo ou dividir a tela. Ativado pela tecla
:
. - Substituição: Funciona como a tecla
insert
no teclado. Ao digitar, os caracteres são substituídos. Ativado com oR
.
No final, o que faz a utilização do Vim parecer mais complicada é justamente a presença dos modos. Eles são os responsáveis pelo "não consigo sair do Vim", pois para sair dele, você primeiro precisa entrar no modo de comando e digitar a palavra-chave ou abreviação. Na prática, isto significa digitar :q
e dar enter, sendo :
para entrar no modo de comando e o q
de "quit" em inglês, para sair do programa.
O que parece muito difícil a priori, com o tempo se torna natural, acredite em mim. Não sei quantas vezes me peguei fazendo o comando para salvar :w
em outros editores de texto, hahah...
Comparando com o VS Code
Não me levem a mal, adoro o VS Code. É um editor incrível, e olha que nem de perto sou fã da Microsoft. Apesar de usar o Electron como base, ele conseguiu uma certa "leveza" que outros editores concorrentes que usam a mesma tecnologia não conseguiram: o Atom é um exemplo disso.
VSCode: Electron em todo o seu esplendor
O problema é que, como alguns já sabem, o Electron não é uma aplicação nativa, portanto nunca funcionará de forma comparável a uma. Já sofri várias vezes com travamentos nele, e isso é realmente chato. E quando você sabe que isso se deve a uma falha no Electron, é mais chato ainda, pois não há o que fazer senão colocar mais memória no seu sistema, o que não é nada barato. Isso somado às extensões e os processos rodando de fundo complica ainda mais.
Neovim: Quando bem configurado, nem parece que roda em um terminal
Outra coisa que um editor de terminal pode fazer que o VS Code não pode, é possibilitar a edição direto na linha de comando. Quando se acessa um servidor via SSH, não vai ser possível rodar o VS Code direto dali. Portanto, mesmo que você não use o Vim no dia-a-dia, saber o básico dele vai te ajudar demais nessas ocasiões, já que provavelmente vai estar disponível no sistema.
Conclusão
Como não dependo especificamente do VS Code para fazer o meu trabalho, decidi trocá-lo pelo Neovim, que é uma aplicação nativa e sobretudo leve. Além disso, você aprende uma nova maneira de editar código que se torna bastante eficiente e divertida quando você a domina. Dá para configurá-lo de tal forma, que ele se assemelhe bastante ao VS Code, com suporte a extensões equivalentes, inclusive.
É isto que vou abordar nos próximos artigos.
Links
- IDE: Integrated Development Environment, ou Ambiente Integrado de Desenvolvimento em português. Um IDE é um editor de textos focado em programação, com ferramentas para facilitar a vida do desenvolvedor.↩
- BSD: Berkeley Software Distribution, foi um sistema operacional baseado no UNIX, com uma licença de código aberto bastante permissiva. Hoje é um termo para incluir todos os sistemas operacionais baseados nele, como o OpenBSD, o FreeBSD e o Darwin, no utilizado no MacOs.↩
- Lua: É uma linguagem de programação originalmente projetada para criar extensões para aplicações e sistemas, criada pelos brasileiros Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes, membros da Tecgraf na PUC-RJ. Hoje ela é uma linguagem multi-paradigma usada em diversas áreas.↩