VI, Vim e venci

Saiba tudo sobre o editor Vim (VI), sua história, seu arqui-inimigo Emacs, as doações para Uganda e aprenda desde o básico até a utilização dos comandos mais avançados.

Primeiro uma apresentação breve. O Vim é o sucessor mais difundido do vi, que é filho do ex com o ed, que por sua vez são filhos do qed, e por aí vai. O "vi" é a sigla de Visual Interface. Note que naquela época (início dos anos 80), não era comum como hoje, você ter um editor de textos visual, ou seja, você ver na tela o texto que está sendo editado. Tente imaginar como é editar um texto sem vê-lo. Quer tentar? Experimente o editor ed, presente em qualquer distribuição Linux.

Muito mais tarde, em 1992, apareceu no mundo Unix um concorrente do vi, o Vim (de "Vi IMitator", o imitador do vi) e logo se tornou popular, pois além de ser um clone muito bem feito do vi, possuía muitas outras funcionalidades, como uso da tecla TAB para completar nomes de arquivos, vários níveis de "undo" (desfazer comando), reconhecimento de sintaxe e histórico de linha de comando.

Então de "imitator" ele passou a ser chamado de "Vi IMproved", o vi melhorado. O Vim se tornou padrão em sistemas Linux, onde o /bin/vi é uma ligação simbólica para o /usr/vim, e conseqüentemente, a grande maioria usa Vim, mas acha que usa vi. Acabaram quase que virando sinônimos, mas, lembre-se, vi é diferente de Vim, e é sobre Vim que este artigo comentará.

Apesar do Vim ser um editor de textos extremamente voltado para programação, ele também é poderoso para editar textos comuns (como esse) e possui muitas funcionalidades avançadas que outros editores gráficos como o Microsoft Word® têm, como abrir vários arquivos ao mesmo tempo, autocorreção, auto-identação, seleção visual, macros e outras que outro editor nem sonha ter, como seleção vertical de texto, interação total com o sistema operacional, uso de expressões regulares, sintaxe colorida, etc.

O Vim não é uma exclusividade de sistemas Unix, ele já foi portado para várias outras plataformas, como Amiga®, MacOs®, SunOs®, DOS®, Windows® e muitas outras. E como atrativo maior para os usuários novatos, também existe o gVim, para usar no X, com o mouse, menus, botões e todas as facilidades de uma aplicaçã o gráfica. Sendo o gVim apenas uma interface mais amigável do Vim, todas as funcionalidades deste funcionam naquele.

Então vamos começar nossa viagem ao mundo maravilhoso do Vim. Primeiramente, a característica básica dele: ele tem dois modos de operação, um de inserção, em que as letras do teclado são puramente letras, como em qualquer outro editor, identificado por um — INSERT — na parte inferior esquerda da tela, e o outro que é o modo de comandos, em que as letras são comandos de edição e é o modo padrão ativo quando você abre um arquivo no Vim. Para entrar no modo de inserção basta digitar i. Para sair do modo de inserção e voltar ao de comandos, basta apertar a tecla Esc. Todos os comandos que serão apresentados neste artigo deverão ser executados no modo de comandos.

Pode parecer redundante dizer isso, mas para quem não está acostumado com os dois modos, no início pode confundir um pouco. E Se você entrou no Vim e não faz idéia de como sair, basta um ZZ. Lembre-se, no modo de comandos.

Sendo um editor de textos feito para funcionar no modo texto, ele tem suas limitações visuais, que não lhe permitem deixar uma palavra em itálico por exemplo. Mas o que pode ser feito, o Vim faz. Por exemplo, como centralizar a linha atual? Basta um :ce, ou o nome completo, :center. De maneira similar temos o :left e o :right. E para fazer isso em várias linhas? Temos a seleção visual no Vim também.

Digite v e com as setas selecione o texto, depois um :ce centraliza todo o texto. Como característica tradicional do vi, um mesmo comando com letra maiúscula faz uma operação complementar, ou similar, mas com uma variante. No caso da seleção, se usar V (Shift+v) ao invés de v, a seleção automaticamente pega a linha toda. E para seu deleite, e inveja de outros editores, com o Ctrl+v, temos a seleção vertical! Como selecionar as três primeiras letras de várias linhas? O Ctrl+v faz isso pra você. E seguindo essa filosofia podemos deduzir o funcionamento de outros comandos do Vim. Mais um exemplo: o comando x apaga um caractere à direita, enquanto o X apaga à esquerda (como as teclas Delete e Backspace).

Também podemos editar dois ou mais arquivos ao mesmo tempo e ver todos simultaneamente, separados horizontalmente. Experimente, editando um arquivo qualquer no Vim, digite :split /etc/passwd. Para alternar entre as janelas, basta dois Ctrl+w (w de window). Como na linha de comando, a tecla TAB funciona para completar nomes de arquivos (e também de comandos do próprio Vim). Então no split anterior, apenas um :split /etc/pas<TAB> já funcionaria.

Já que o TAB foi citado, no interpretador de comandos Bash, basta digitar set -o vi para utilizar os comandos do vi na linha de comando. Procura, substituição, deleção, entre outros para agilizar seu uso do console.

Para escritores de textos em geral, o Vim tem facilidades muito úteis. Uma delas é a autocorreção (abbreviation), que funciona como apelidos, por exemplo :ab AMJ aurelio marinho jargas. Então sempre que eu estiver digitando um texto qualquer e digitar AMJ, o Vim automaticamente o expandirá para meu nome completo. Outra característica simples e eficiente é a definição de marcas ao longo do texto. Por exemplo, na linha em que começa a conclusão do texto, você faz uma marca de nome c: mc, em que m é o comando de marcação e c é o nome da marca, que pode ser qualquer letra ou número. De maneira similar, na introdução você pode fazer um mi e no meio do texto você faz um mm. Para pular para uma marca o comando é `. Então para ir para a marca c, da conclusão, basta um `c. Infelizmente como nós utilizamos o sinal ` para representar a crase, fica incômodo utilizá-lo como comando. A solução é fazer um mapeamento de teclas, por exemplo mapear esse comando para a tecla de função F4: :map <f4> `. Pronto, agora para irmos para a marca c, basta digitar <f4>c.

Com o mapeamento de teclas, podemos colocar qualquer seqüência complexa de comandos do Vim numa tecla de função. Mais um exemplo, um mapeamento útil para inserir a data atual pegando a saída do comando do Linux chamado date, fica :map <f5> r!date<cr>. O r! joga para o arquivo a saída do comando date e o <cr> representa a tecla Enter.

Para programadores, o Vim só falta codificar, pois do resto ele toma conta. O principal é o reconhecimento automático da sintaxe de várias linguagens de programação. Na versão 5.5, são mais de 150 linguagens e padrões, que vão desde as mais famosas como Python, C, Perl, Clipper e sql até monstros como dracula, simula e z8a. O Vim identifica a linguagem, colorindo o código, tornando imediatamente visível qualquer erro cometido pelo programador, enquanto este digita (:set syntax on). Tem identação automática (:set autoindent), utilizando tabulação ou espaços (:set expandtab) e mostra o par que complementa as chaves e colchetes quando você os fecha (:set showmatch). E para fechar, ele converte todo o código colorizado para HTML, para você imprimi-lo (2html.vim). Imbatível.

E para os aficionados, o Vim tem uma linguagem própria de programação, em que você pode construir seus próprios comandos, utilizando algoritmos e várias funções pré-definidas como qualquer outra linguagem de programação. Como conseqüência direta disso, existem vários aplicativos feitos pelos usuários que rodam dentro do Vim, sendo talvez o de maior expressão um leitor de correio eletrônico inteiramente feito com funções do Vim e Perl, chamado Vine.

A maioria dos comandos aqui citados que começam com :, são comandos de configuração, e para você não ter que digitá-los a cada vez que entra no Vim, ele tem um arquivo de configuração, que fica no diretório base do usuário: ~/.vimrc. Veja nas referências um endereço em que tem um .vimrc comentado em português.

Outro tópico interessante são os dígrafos. Para sistemas que não têm solução de acentuação ou que estão mal configurados, o Vim resolve o problema. Enquanto digita o texto, basta um Ctrl+k seguido dos dois caracteres que compõem o dígrafo, assim:

á = Ctrl+k ‘a
ç = Ctrl+k ,c
® = Ctrl+k rO

para uma lista completa de todos os dígrafos, :dig. E todas essas funcionalidades estão extensivamente descritas na documentação on-line que acompanha o editor :help, que pode ser facilmente navegada entre tópicos, como numa página HTML, e é um exemplo de documentação eficiente de um programa, com cerca de 1Mb de texto puro!

A tecla Tab ajuda muito aqui também, então para ver os tópicos de ajuda sobre o mouse por exemplo, :help mous<TAB>.

Para este ano de 2000, a versão 6.0 promete duas funcionalidades há muito pedidas pelos usuários: "vertical split" para ver dois ou mais arquivos abertos na tela, separados por barras verticais; "folding" para como no MS Word, você ter aquela visão estruturada, dos tópicos do documento, expansível e retrátil. É difícil de implementar e será um marco na história do Vim.

Um detalhe peculiar é o fanatismo e fidelidade ao programa que existe por parte dos usuários. É como se fosse uma religião, uma seita, em que todos os seguidores defendem seu editor até o último argumento e uma preferência por outro editor pode gerar segmentação de grupos.

O Vim tem um arquiinimigo, que se chama Emacs, e tem usuários igualmente fanáticos.

É desnecessário dizer que quem usa Vim odeia o Emacs e vice-versa. Discussões entre usuários dos dois editores são intermináveis e são chamadas de "guerras santas". E não poderia ser diferente, pois esses editores seguem filosofias completamente opostas.

O Emacs tenta ser uma central de aplicações, tendo embutido nele várias outras tarefas que normalmente não estão num editor de textos como telnet, navegador, jogo e leitor de correio eletrônico/notícias, entre outros, e todos os seus comandos são mnemônicos e extensos como: calendar-mouse-insert-islamic-diary-entry e gnus-summary-lower-same-subject-and-select.

Enquanto isso o Vim é apenas um editor de textos, para editar textos! Seus comandos são todos compostos por uma ou duas letras (ou símbolos), como p, x, /, # e gq. Simples, rápido e eficiente.

E se mesmo com tudo isso você ainda não se convenceu do quão bom o Vim é, saiba que ele é chamado de "charityware", algo como software de caridade, pois apesar de ser um aplicativo de livre distribuição, doações são incentivadas para ajudar órfãos de Uganda, na África. O autor do Vim, Bram Moolenaar, já esteve lá e se comoveu tanto com a situação, que além de ajudar na construção de uma escola para as crianças, quando voltou à Holanda, criou uma fundação, que só em 1998, conseguiu arrecadar US$12mil! Para mais detalhes digite :help uganda. Se você não achou o Vim atraente, pelo menos considere o fato de usá-lo pelo lado humanitário :)

Artigo originalmente publicado na Revista do Linux edição 4, de abril de 2000.
— EOF —

Aprenda mais sobre Vim