vi, vim e venci
Adorado como religião, o VIM duela com o Emacs na preferência dos
linuxers
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 tornoupopular, pois além de ser um clone muito
bem feito do vi, possuía muitas outras funcionalidades, como uso da tecla TAB para completa
r nomes de arquivos, vários níveis de "undo" (desfazer comando), reconhecimento
de sintaxe e histórico de linha decomando.
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 ele 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 let
ras 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" acima, 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
aurélio 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 aficcionados, 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
2Evimrc 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" : ver dois ou mais arquivos abertos na tela,
separados por barras verticais; "folding": 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&a tilde;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 comando
s 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: :help uganda. Se você não achou o vim atraente, pelo menos considere
o fato de usá-lo pelo lado humanitário &:)