Vim para desenvolvedores Perl

Vim

Esta é uma tradução livre do artigo original de Leonid Mamchenkov em: http://mamchenkov.net/wordpress/2004/05/10/vim-for-perl-developers/.

Tradução feita por Alceu Rodrigues de Freitas Junior (glasswalk3r<at>yahoo<.>com<.>br).


Introdução

Sobre o que se trata esse documento?

Esta é minha tentativa de prover instruções simples e claras sobre adotar o editor de texto Vim com ferramenta de auxílio para programação. Eu estou usando Perl como linguagem de programação para meus exemplos mas esse documento pode ser aplicado igualmente a qualquer outra linguagem de programação.

Algumas pessoas podem argumentar que o Vim não necessita de nenhuma configuração adicional para ser usado com ferramenta de programação, enquanto outros poderão dizer que ele nunca será tão bom quanto um Ambiente de Desenvolvimento Integrado - IDE (ou " Integrated Development Environments" do original em inglês). Eu não irei discutir sobre esses dois pontos de vista no entanto irei dar diversas dicas sobre como fazer com que um simples editor, como visto por algumas pessoas, fique muito próximo a usabilidade de uma IDE, como é necessário para outros.

Quem deveria ler este documento?

Primeiramente, este documento é para pessoas que já estejam usando o Vim para tarefas de programação. Estas pessoas que sentem que falta algo no Vim deveriam definitivamente ler este documento. Para pessoas que recentemente pararam de usar o Vim devido a falta de alguma coisa também deveriam ler esse documento.

Pré-requisitos

Eu assumo que o leitor tenha o Vim instalado no seu sistema e esteja confortável com edição de texto simples usando o mesmo.

Outro ponto assumido é que o leitor tenha uma experiência básica de configuração do Vim, o que significa o arquivo de configuração .vimrc.

Eu assumo que o leitor esteja usando uma máquina com UNIX/Linux para edição com o Vim. Do contrário, exemplos de linha de comando no shell devem ser interpretadas como pseudo código para um algorítimo.

A última mas não menos importante coisa assumida é que o leitor tenha acesso à Internet e saiba como navegar em sites web e fazer download de arquivos.

Estrutura do documento

O documento está separado em duas partes: "Configuração Básica" e "Configuração avançada". A "Configuração Avançada" é depois dividida em "Configuração Comum" e "Configuração Específica para Perl".

A "Configuração Básica" contem os exemplos mais simples de configuração do Vim e não necessitam de conexão com a Internet. Estas são geralmente opções básicas de configuração do Vim.

A "Configuração Avançada" possui exemplos de instalação e configuração de plug-ins do Vim. Você irá precisar de conexão com a Internet para seguir essa seção.

Se você usa o Vim para suas tarefas de programação mas não usa o Perl como linguagem  então a seção "Configuração Comum" é para você. Exemplos na seção "Configuração Específica para Perl" podem ser usados para extender o suporte do Vim para outras linguagens de programação.

Metodologia

Para poder prover exemplos que funcionem, eu criei um novo usuário "macaco" (codemonkey no original em inglês, mas "macaco de programação" não é um bom nome de usuário) no meu servidor caseiro altamente atualizado RedHat Linux 7.3. Esse usuário não tem nenhum arquivo de configuração .vimrc e usa somente o arquivo padrão global de configuração, o qual não foi modificado de nenhuma maneira por mim. O Vim versão 6.1 do RedHat foi instalado no servidor sem nenhuma alteração também.

Eu criei um arquivo vazio .vimrc no diretório /home/macaco/, cujo o qual é o diretório home do usuário "macaco". Eu também criei um diretório específico para o Vim com a seguinte estrutura:

Qual a versão instalada do Vim?

[macaco@gucho macaco]$ rpm -qa | grep -i vim
vim-minimal-6.1-18.7x.2
vim-common-6.1-18.7x.2
vim-enhanced-6.1-18.7x.2

Em qual diretório estou agora?

[macaco@gucho macaco]$ pwd
/home/macaco

Configuração específica do Vim para o usuário

[macaco@gucho macaco]$ touch .vimrc
[macaco@gucho macaco]$ mkdir .vim
[macaco@gucho macaco]$ mkdir .vim/colors
[macaco@gucho macaco]$ mkdir .vim/compiler
[macaco@gucho macaco]$ mkdir .vim/doc
[macaco@gucho macaco]$ mkdir .vim/ftplugin
[macaco@gucho macaco]$ mkdir .vim/plugin
[macaco@gucho macaco]$ mkdir .vim/syntax

Cada recurso de instalação e/ou configuração é explicado em separado e pode ser feita de forma indepentende das outras. Imagens da tela são disponibilizadas aonde for apropriado.

Fontes adicionais de ajuda

O Vim tem uma grande comunidade com um monte de membros amigáveis e dispostos a ajudar. Se você está usando o Vim ou apenas planejando fazê-lo eu sugiro que você se inscreva na lista de discussão do Vim em http://www.vim.org/community.php.

Visite o site do Vim para uma coleção de dicas e plug-ins em http://www.vim.org/.

O Vim é distribuído com uma extensa documentação que você pode encontrar em  /usr/share/doc/vim-common-6.1/docs/directory (esse diretório pode variar). Eu coloquei comentários sobre os arquivos nesse diretório aonde era apropriado.

Configuração Básica

Quebra de Linha

Às vezes, enquando você digita o fluxo do texto vai além da largura da janela do editor. Algumas pessoas gostam que linhas longas sejam quebradas (em outras palavras, continuem na próxima linha), enquanto outras preferem que elas não sejam quebradas. Você pode configurar o Vim para se comportar de acordo com sua preferência adicionando “set wrap” ou “set nowrap” no seu arquivo de configuração .vimrc. Quebra de linha

Tabulação flexível

Tabulação é um dos tópicos mais quentes em discussões entre programadores quando o assunto é estilo. Uma excelente explicação sobre qual o problema com tabulações e espaços pode ser lida em http://www.jwz.org/doc/tabs-vs-spaces.html. Eu devo dizer que, no entanto, que não concordo com a posição do autor sobre o assunto.

O artigo oferece várias opções para configuração do vi/Vim para controlar o comportamento de tabs. Eu irei ajustar/repetir algumas que eu considero importantes.

Adicione “set tabstop=4” em seu .vimrc para mostrar todas as ocorrências do caracter Tab (ASCII #9) usando 4 espaços. Essa opção não irá modificar o texto, irá modificar apenas a visualização do mesmo

Adicione “set autoindent” em seu .vimrc para o Vim automaticamente posicionar o cursor com identação apropriada quando você pressiona Enter e quer escrever a próxima linha de código. Isso é muito útil quando você está identando seu código com estruturas como laços e procedimentos.

O Vim permite que você selecione um bloco de código e muda seu nível de identação (aumentando ou diminuindo o nível). Controle a largura da identação usando “set shiftwidth=4” no seu arquivo de configuração.vimrc.

Enquanto você está no modo de comando, o Vim pode completar os nomes dos arquivos e diretórios que você quer abrir ou salvar um arquivo. Para fazer isso  você deve começar a digitar o nome no prompt de comando e entao pressionar a table de completação. Você pode configuração a tecla de completação para qualquer coisa que você quiser usando a linha“set wildchar=<tab></tab>” no seu arquivo de configuração .vimrc.

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/indent.txt.

Numeração de linha


Enquanto o Vim sempre mostra a linha atual que você está editando, talvez você queira também todas as linhas numeradas. Para fazer isso, você precisará adicionar “set number” no seu .vimrc.

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/usr_03.txt.
Numeração de linha

Marcação de sintaxe (Syntax highlighting)

A primeira coisa que qualquer programador irá notar no Vim é sua excelente marcação de sintaxe. Todas as linguagens populares são suportadas. Sintaxes para linguagens menos populares estão disponíveis no website do Vim. Perl é suportado por padrão. Marcação para fundo claro
Marcação para fundo escuro O Vim identifica palavras chaves, comentários, variáveis, sequências de caracteres, POD e outras partes padrão do programa e as marca. O Vim suporta dois diferentes modos de cor: um para terminais com cor de fundo escuro e outro para terminais com fundo de tela claro. Você pode controlar esses modos usando o comando “set bg=dark” e “set bg=light” no seu .vimrc.

Se você ainda não gosta da aparência do código, fique ligado até a discussão sobre “Esquemas de Cor”.

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/syntax.txt.

Completação de texto

Uma das vantagens do Vim cuja a qual eu não consigo viver sem é completação de texto. Quando editando, pressione Ctrl-n / Ctrl-p para navegar entre as diferentes sugestões de completação o Vim gera uma lista baseadas nas palavras do arquivo corrente. Se você precisa que a completação de texto faça sugestão baseada em outros arquivos, então o Vim entende por padrão o arquivo ctags. Simplesmente execute “ctags *.p?” para gerar ctags para todos os arquivos Perl e módulos que estiverem no diretório corrente (assumindo é claro que você esteja usando “.pl” como extensão para scripts Perl e “.pm” como extensão para módulos Perl). Essa característica do Vim não apenas evita um bom tempo de digitação mas diminui em muito a taxa de erros, especialmente com relação a variáveis e procedimentos com nomes longos no código.

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/usr_24.txt.

Divisão de janela

Algumas vezes eu preciso ver dois ou mais arquivos simultaneamente. Enquanto eu posso sempre iniciar outra sessão do Vim num outro terminal, isso não é tão confortável como usar a opção de dividir janelas.

Divisão de janela

O Vim suporta tanto divisão vertical e horizontal da janela. Para dividir a janela atual horizontalmente execute “:split” enquanto estiver no modo normal. Para dividir no modo vertical, use “:vsplit”. Se você não indicar nenhum arquivo como argumento para o “split/vsplit” o arquivo atual será usado. Você pode continuar dividindo a janela resultante quantas vezes quiser. Use o Ctrl-w w para navegar entre as janelas. O comando “:close” irá fechar todas as janelas abertas. O comando “:only” fechará todas as janelas abertas exceto a janela corrente.

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/usr_08.txt.

Modo Diff

O Vim oferece excelentes características para checar e editar diferenças entre dois ou mais arquivos. Execute “vimdiff main.pl main2.pl” (ou “vim -d main.pl main2.pl“) da linha de comando para ver a diferença entre o arquivo main.pl no arquivo main2.pl. Modo "diff"

O Vim irá mostrar ambos os arquivos no modo de divisão vertical. Quando você mudar de uma linha para outra em uma janela, o Vim automaticamente irá fazer o mesmo na outra janela para você. Você pode remendar (patch) as diferenças individuais usado os comandos do e dp. O do irá pegar o remendo da janela vizinha e aplicar no buffer corrente enquanto o dp irá aplicar a diferença no buffer da janela vizinha.

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/diff.txt.

"Dobra" de texto

Outra característica popular encontrada em editores populares e IDEs é a "dobra" de texto. Eu acho que a "dobra" é mais simples de mostrar do que explicar.

O Vim suporta seis métodos de "dobra": por identação, por expressão, por sintaxe, por alterações no texto, por marca e dobra manual. Fica a seu critério qual método usar. Como exemplo eu irei mostrar como configurar uma dobra usando um marcador.
Antes de "dobrar"

Após "dobrar"

Para dizer ao Vim como usar dobra por marca adicione as seguintes linhas no seu .vimrc:

" Folding configuration
set foldmethod=marker
" Edit and uncomment next line if you want non-default marker
"set foldmarker="{{{,}}}"

Se você precisar de mais informações sobre esse tópico leia os arquvos /usr/share/doc/vim-common-6.1/docs/usr_28.txt e /usr/share/doc/vim-common-6.1/docs/fold.txt.

Marcas

Uma das características do Vim que aceleram a navegação são marcas.  Você pode configurar uma marca em qualquer lugar do texto e então simplesmente voltar para ela. Você pode configurar várias marcas. Você pode também configurar marcas em vários arquivos e rapidamente trocar de uma para o outro. Normalmente eu configuro uma marca num local que eu esteja trabalhando com mc (m é para “marca”, c eu uso para “corrente”) e então eu rapidamente retorno para o mesmo local com um 'c.

Se você precisar de mais informações sobre esse tópico leia o arquivo /usr/share/doc/vim-common-6.1/docs/motion.txt.

Mostrar identação vertical

Para algumas pessoas a identação horizontal não é suficiente. Elas precisam de alguma identação vertical para ajudá-las a ver partes correspondentes do código. Enquanto eu não sou uma dessas pessoas, eu vi essa facilidade por aí com tanta frequência que então resolvi adicioná-la ao.vimrc do macaco.

Tudo o que você precisa fazer para ter identação vertical mostrando um caracter pipe (”|”) é adicionar as seguintes linhas no seu .vimrc:

Identação vertical

" Isto é para identação vertica
set list
set listchars=tab:|
" Note o espaço após a última contrabarra

:set list” força o Vim a mostrar caracteres "escondidos" como tabulações, caracteres de fim de linha e fim de arquivo. “:set listchars=tab:| ” pede ao Vim para mostrar somente os caracteres de tabulação e usar o pipe (”|”) com um espaço (” “) para tanto, ao invés do habitual  “^I” que o Vimi gosta de mostrar.

Configuração Avançada

Configuração Comum

Esquema de cores

Esquema de cor "Dante" Vamos começar com um exemplo simples. O website do Vim oferece um monte de esquemas de cores para todos os gostos e prefências. Encontrar um esquema de cor e baixá-lo pode ser meio chato de fazer, no entanto. Felizmente o mundo não é um lugar sem pessoas gentis. Alguém chamado Robert (MetaCosm) baixou todos os esquemas de cor e colocou-os em um um único arquivo que ele copiou de volta para o website do Vim. Vamos baixar esse arquivo de  http://www.vim.org/scripts/script.php?script_id=625.

Salve o colors.zip no seu diretório .vim/ e rode o unzip nele. Se certificar que todos os arquivos estejam no formato UNIX também é uma boa idéia.

[macaco@gucho .vim]$ ls
colors.zip
[macaco@gucho .vim]$ unzip colors.zip
Archive: colors.zip
creating: colors/
inflating: colors/adaryn.vim
inflating: colors/adrian.vim
inflating: colors/aqua.vim
inflating: colors/astronaut.vim
inflating: colors/asu1dark.vim
inflating: colors/autumn.vim
inflating: colors/biogoo.vim
inflating: colors/blackdust.vim
inflating: colors/BlackSea.vim
inflating: colors/blue.vim
inflating: colors/bluegreen.vim
inflating: colors/bog.vim
inflating: colors/borland.vim
inflating: colors/breeze.vim
inflating: colors/brookstream.vim
inflating: colors/brown.vim
inflating: colors/bw.vim
inflating: colors/c.vim
inflating: colors/camo.vim
inflating: colors/candy.vim
inflating: colors/caramel.vim
inflating: colors/ChocolateLiquor.vim
inflating: colors/coffee.vim
inflating: colors/colorer.vim
inflating: colors/colorscheme_template.vim
inflating: colors/cool.vim
inflating: colors/dante.viminflating: colors/darkblue.vim
inflating: colors/darkdot.vim
inflating: colors/darkocean.vim
inflating: colors/darkslategray.vim
inflating: colors/dawn.vim
inflating: colors/default.vim
inflating: colors/denim.vim
inflating: colors/desert.vim
inflating: colors/elflord.vim
inflating: colors/emacs.vim
inflating: colors/evening.vim
inflating: colors/fine_blue.vim
inflating: colors/fnaqevan.vim
inflating: colors/fog.vim
inflating: colors/golden.vim
inflating: colors/ibmedit.vim
inflating: colors/ironman.vim
inflating: colors/koehler.vim
inflating: colors/lanzarotta.vim
inflating: colors/lilac.vim
inflating: colors/manxome.vim
inflating: colors/midnight.vim
inflating: colors/midnight2.vim
inflating: colors/morning.vim
inflating: colors/murphy.vim
inflating: colors/navajo-night.vim
inflating: colors/navajo.vim
inflating: colors/night.vim
inflating: colors/nightshimmer-theme.vim
inflating: colors/nightwish.vim
inflating: colors/northsky.vim
inflating: colors/oceanblack.vim
inflating: colors/oceandeep.vim
inflating: colors/pablo.vim
inflating: colors/PapayaWhip.vim
inflating: colors/peachpuff.vim
inflating: colors/potts.vim
inflating: colors/print_bw.vim
inflating: colors/rainbow_autumn.vim
inflating: colors/rainbow_breeze.vim
inflating: colors/rainbow_fine_blue.vim
inflating: colors/rainbow_fruit.vim
inflating: colors/rainbow_neon.vim
inflating: colors/rainbow_night.vim
inflating: colors/rainbow_sea.vim
inflating: colors/redblack.vim
inflating: colors/ron.vim
inflating: colors/sand.vim
inflating: colors/scite.vim
inflating: colors/sean.vim
inflating: colors/seashell.vim
inflating: colors/shine.vim
inflating: colors/taqua.vim
inflating: colors/tomatosoup.vim
inflating: colors/toothpik.vim
inflating: colors/torte.vim
inflating: colors/transparent.vim
inflating: colors/whitedust.vim
inflating: colors/wintersday.vim
inflating: colors/xemacs.vim
inflating: colors/xian.vim
inflating: colors/zellner.vim
inflating: colors/zenburn.vim
[macaco@gucho .vim]$ dos2unix colors/*
dos2unix: converting file colors/BlackSea.vim to UNIX format ...
dos2unix: converting file colors/ChocolateLiquor.vim to UNIX format ...
dos2unix: converting file colors/PapayaWhip.vim to UNIX format ...
dos2unix: converting file colors/adaryn.vim to UNIX format ...
dos2unix: converting file colors/adrian.vim to UNIX format ...
dos2unix: converting file colors/aqua.vim to UNIX format ...
dos2unix: converting file colors/astronaut.vim to UNIX format ...
dos2unix: converting file colors/asu1dark.vim to UNIX format ...
dos2unix: converting file colors/autumn.vim to UNIX format ...
dos2unix: converting file colors/biogoo.vim to UNIX format ...
dos2unix: converting file colors/blackdust.vim to UNIX format ...
dos2unix: converting file colors/blue.vim to UNIX format ...
dos2unix: converting file colors/bluegreen.vim to UNIX format ...
dos2unix: converting file colors/bog.vim to UNIX format ...
dos2unix: converting file colors/borland.vim to UNIX format ...
dos2unix: converting file colors/breeze.vim to UNIX format ...
dos2unix: converting file colors/brookstream.vim to UNIX format ...
dos2unix: converting file colors/brown.vim to UNIX format ...
dos2unix: converting file colors/bw.vim to UNIX format ...
dos2unix: converting file colors/c.vim to UNIX format ...
dos2unix: converting file colors/camo.vim to UNIX format ...
dos2unix: converting file colors/candy.vim to UNIX format ...
dos2unix: converting file colors/caramel.vim to UNIX format ...
dos2unix: converting file colors/coffee.vim to UNIX format ...
dos2unix: converting file colors/colorer.vim to UNIX format ...
dos2unix: converting file colors/colorscheme_template.vim to UNIX format ...
dos2unix: converting file colors/cool.vim to UNIX format ...
dos2unix: converting file colors/dante.vim to UNIX format ...
dos2unix: converting file colors/darkblue.vim to UNIX format ...
dos2unix: converting file colors/darkdot.vim to UNIX format ...
dos2unix: converting file colors/darkocean.vim to UNIX format ...
dos2unix: converting file colors/darkslategray.vim to UNIX format ...
dos2unix: converting file colors/dawn.vim to UNIX format ...
dos2unix: converting file colors/default.vim to UNIX format ...
dos2unix: converting file colors/denim.vim to UNIX format ...
dos2unix: converting file colors/desert.vim to UNIX format ...
dos2unix: converting file colors/elflord.vim to UNIX format ...
dos2unix: converting file colors/emacs.vim to UNIX format ...
dos2unix: converting file colors/evening.vim to UNIX format ...
dos2unix: converting file colors/fine_blue.vim to UNIX format ...
dos2unix: converting file colors/fnaqevan.vim to UNIX format ...
dos2unix: converting file colors/fog.vim to UNIX format ...
dos2unix: converting file colors/golden.vim to UNIX format ...
dos2unix: converting file colors/ibmedit.vim to UNIX format ...
dos2unix: converting file colors/ironman.vim to UNIX format ...
dos2unix: converting file colors/koehler.vim to UNIX format ...
dos2unix: converting file colors/lanzarotta.vim to UNIX format ...
dos2unix: converting file colors/lilac.vim to UNIX format ...
dos2unix: converting file colors/manxome.vim to UNIX format ...
dos2unix: converting file colors/midnight.vim to UNIX format ...
dos2unix: converting file colors/midnight2.vim to UNIX format ...
dos2unix: converting file colors/morning.vim to UNIX format ...
dos2unix: converting file colors/murphy.vim to UNIX format ...
dos2unix: converting file colors/navajo-night.vim to UNIX format ...
dos2unix: converting file colors/navajo.vim to UNIX format ...
dos2unix: converting file colors/night.vim to UNIX format ...
dos2unix: converting file colors/nightshimmer-theme.vim to UNIX format ...
dos2unix: converting file colors/nightwish.vim to UNIX format ...
dos2unix: converting file colors/northsky.vim to UNIX format ...
dos2unix: converting file colors/oceanblack.vim to UNIX format ...
dos2unix: converting file colors/oceandeep.vim to UNIX format ...
dos2unix: converting file colors/pablo.vim to UNIX format ...
dos2unix: converting file colors/peachpuff.vim to UNIX format ...
dos2unix: converting file colors/potts.vim to UNIX format ...
dos2unix: converting file colors/print_bw.vim to UNIX format ...
dos2unix: converting file colors/rainbow_autumn.vim to UNIX format ...
dos2unix: converting file colors/rainbow_breeze.vim to UNIX format ...
dos2unix: converting file colors/rainbow_fine_blue.vim to UNIX format ...
dos2unix: converting file colors/rainbow_fruit.vim to UNIX format ...
dos2unix: converting file colors/rainbow_neon.vim to UNIX format ...
dos2unix: converting file colors/rainbow_night.vim to UNIX format ...
dos2unix: converting file colors/rainbow_sea.vim to UNIX format ...
dos2unix: converting file colors/redblack.vim to UNIX format ...
dos2unix: converting file colors/ron.vim to UNIX format ...
dos2unix: converting file colors/sand.vim to UNIX format ...
dos2unix: converting file colors/scite.vim to UNIX format ...
dos2unix: converting file colors/sean.vim to UNIX format ...
dos2unix: converting file colors/seashell.vim to UNIX format ...
dos2unix: converting file colors/shine.vim to UNIX format ...
dos2unix: converting file colors/taqua.vim to UNIX format ...
dos2unix: converting file colors/tomatosoup.vim to UNIX format ...
dos2unix: converting file colors/toothpik.vim to UNIX format ...
dos2unix: converting file colors/torte.vim to UNIX format ...
dos2unix: converting file colors/transparent.vim to UNIX format ...
dos2unix: converting file colors/whitedust.vim to UNIX format ...
dos2unix: converting file colors/wintersday.vim to UNIX format ...
dos2unix: converting file colors/xemacs.vim to UNIX format ...
dos2unix: converting file colors/xian.vim to UNIX format ...
dos2unix: converting file colors/zellner.vim to UNIX format ...
dos2unix: converting file colors/zenburn.vim to UNIX format ...
[macaco@gucho .vim]$

Esquemas de cor para o Vim e Gvim

Esquema de cor "Nightwish" Você irá perceber que alguns esquemas de cores não muda muitas cores no seu vim executado num console. Isso acontece porque eles foram desenvolvidos para a versão gráfica do Vim, chamada Gvim.

Tente executar o comando  “gvim +'colorscheme peachpuff' main.pl” para ver como o Gvim ficará com o esquema de cores selecionado.

Agora você poderá testar todos os esquemas de cores com um “:colorscheme something” e escolher aquele que você mais gostar. Depois de terminar sua escolha, adicione a linha “colorscheme something” no seu .vimrc.

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/usr_06.txt.

Comentar bloco

É algo usual comentar e descomentar blocos de código durante o ciclo de desenvolvimento. Enquanto é possível fazê-lo com o Vim sem nenhuma configuração adicional, eu tento tornar a vida o mais fácil possível instalado o plug-in BlockComment desenvolvido por Chris Russell. Comentar bloco

Vamos baixar o BlockComment.vim de http://www.vim.org/scripts/script.php?script_id=473 e copiá-lo para o diretório .vim/plugin/ directory. Esse plug-in automaticamente provê dois mapeamentos de comando: “.c” para comentar e “.C” para descomentar o código de volta.

Navegador de arquivos e buffer

Navegador de arquivos e buffer O Vim suporta a edição de vários arquivos simultaneamente. Uma pessoa pode iniciar o Vim com um “vim main.pl main2.pl” e então usar “:next” e “:previous” para navegar pelos arquivos abertos (chamados de “buffers”). Também é possível abrir arquivos para edição sem sair do Vim a todo momento. Para isso pode-se usar um simples “:e main2.pl”, onde main2.pl é o nome do arquivo que se quer abrir.

Existem, normalmente, melhores (mais convenientes) formas de trabalhar com arquivos e buffers. O website do Vim lista alguns plug-ins cujos os quais podem lidar somente com arquivos, ou com buffers ou com ambos. Um desses plug-ins é o gerenciador de janelas de Srinath Avadhanula. Vamos buscar esse gerenciador de http://www.vim.org/scripts/script.php?script_id=95.

O plug-in gerenciador de janelas do Vim pode fazer uso do plug-in bufexplorer feito por Jeff Lanzarotta disponível em  http://www.vim.org/scripts/script.php?script_id=42.

A instalação é feita da maneira usual - salvar, descompactar e rodar o dos2unix. Uma vez que não vamos querer o navegador de arquivos/diretórios sempre ligado, vamos adicionar uma linha de mapeamento no nosso.vimrc para “:WMToggle” usando F2.

" Isso é para o gerenciador de janelas
map <F2> :WMToggle<CR>

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/usr_23.txt.

Explorador de tags

Se você me perguntar, eu direi que estou quase feliz. A única coisa que estou sentindo falta é algo para facilitar minha navegação pelo código. Eu preciso de uma forma rápida de mudar para diferentes partes do código e uma visão hierárquivca do mesmo. Mais uma vez eu vou até o website do Vim e dou uma boa olhada no plug-in de listas de tags feita por Yegappan Lakshmanan e disponível em http://www.vim.org/scripts/script.php?script_id=273.  Esse script não tem sequer um arquivo compactado! Tudo o que você tem que fazer é copiá-lo para diretório .vim/plug-in. Vamos mapear o comando “:Tlist” para a tecla F3. Navegador de tags
" Isto é para a lista de tags
map <F3> :Tlist<CR>

Uma coisa chata que eu descobri usando a lista de tags é que ela redimensiona a janela sempre que possível. Eu preferi modificar essa função adicionando em o seguinte em meu .vimrc 

" Isso é para a taglist
let Tlist_Inc_Winwidth = 0
map <F3> :Tlist<CR>

Se você precisar de mais informações sobre esse tópico, leia o arquivo /usr/share/doc/vim-common-6.1/docs/tagsrch.txt.

Configuração específica para Perl

Destaque da sintaxe do Embperl

Se você usa o módulo Perl Embperl para desenvolvimento de websites dinâmicos então você vai querer baixar o plug-in de destaque de sintaxe para Embperl desenvolvido por Lukas Zapletal. Esses passos são similares para configuração de destaque de sintaxe para qualquer outra linguagem não suportada por padrão pelo Vim. Highlighting Embperl

O plug-in está localizado em http://www.vim.org/scripts/script.php?script_id=61. Baixe ele e descompacte-o em seu diretório .vim/. Novamente, processar todos os arquivos usando o comando dos2unix é uma boa idéia se você estiver usando um computador com UNIX/Linux como eu estou. O arquivo vimrc_example empacotado no arquivo contem um exemplo de configuração que você irá precisar copiar para seu .vimrc.

[macaco@gucho .vim]$ ls
colors colors.zip Embperl_Syntax.zip
[macaco@gucho .vim]$ unzip Embperl_Syntax.zip
Archive: Embperl_Syntax.zip
inflating: colors/embperl_yellow.vim
creating: syntax/
inflating: syntax/embperl.vim
inflating: vimrc_example
[macaco@gucho .vim]$ cat vimrc_example
"let perl_fold=1
augroup filetypedetect
autocmd! BufNewFile,BufRead *.epl,*.phtml setf embperl
augroup END
autocmd BufNewFile,BufRead *.epl,*.phtml colorscheme embperl_yellow

O esquema de cores do Embperl

O plug-in de destaque de sintaxe do Embperl syntax tem seu próprio esquema de cores, então não se preocupe se você ver cores diferentes daquelas que você possui.


Compilador de sintaxe do Perl

Perl syntax compiler A maioria dos Ambientes Integrados de Desenvolvimento (IDE) tenta simplificar o ciclo escrever-compilar-verificar. Uma das coisas que tornam o ciclo mais fácil é o posicionamento automático do cursor aonde um erro foi encontrado. O Vim pode fazer isso para qualquer linguagem de programação e compilador. Se você souber o formato que seu compilar usa, você pode configurar o Vim para analisar esses erros e posicionar o cursor para você. Uma vez que eu não sou o primeiro desenvolvedor Perl que usa o Vim, eu assumo que outra pessoa já escreveu um "analisador de sintaxe do compilador do Perl" (isso soa horrível, não?).

Mais uma vez, baixe ele do website do Vim em http://www.vim.org/scripts/script.php?script_id=56. As instruções de instalação são simples: apenas copie o arquivo perl.vim (desenvolvido por Lukas Zapletal) no seu diretório .vim/compiler/. Agora nós queremos especificar para quais arquivos queremos que o Vim use nossos novos scripts de compilador do Perl. Isso é facilmente feito adicionando-se as seguintes linhas no .vimrc.

" Use o compilador do Perl para todos arquivos com extensão *.pl e *.pm
autocmd BufNewFile,BufRead *.p? compiler perl

Agora você pode usar “:make” para checar por erros no seu código. Se você tiver algum problema no código, então o Vim irá posicionar o cursor na linha em que foi encontrado o primeiro problema. Você pode usar “:cnext” e “:cprevious” para ir e voltar entre as mensagens. “:clist” irá mostrar uma lista com todos os erros.

Se você precisar de mais informações sobre o assunto sobre esse tópico leia o arquivo /usr/share/doc/vim-common-6.1/docs/usr_30.txt.


Integração com Perldoc

Outro recurso oferecido pela maioria das IDEs é a documentação online. Os desenvolvedores do Vim ajudaram com isso. Por padrão o Vim é distribuído com um manual de suporte para todos os sistemas UNIX. Isso é muito útil quando você usa comandos de sistema no seus scripts e precisa checar parâmetros de linha de comando. Apenas posicione o cursor na palavra que você está interessado e pressione K. O Vim irá executar  “man palavra“, onde “palavra” é uma palavra sobre o cursor. Isso é útil mas não tanto quanto nós precisamos. Perldoc integration

Mais uma vez vamos visitar o website do Vim e baixar o plug-in Perldoc desenvolvido por Colin Keith de http://www.vim.org/scripts/script.php?script_id=209. unzip perldoc.zip e processe todos os arquivos extraídos usando o comando dos2unix. É uma boa idéia adicionar o mapeamento F1 para “&#58;Perldoc” no seu .vimrc.

" Isso é para o perldoc.vim
autocmd BufNewFile,BufRead *.p? map <F1> :Perldoc<cword><CR>
autocmd BufNewFile,BufRead *.p? setf perl
autocmd BufNewFile,BufRead *.p? let g:perldoc_program='/usr/bin/perldoc'
autocmd BufNewFile,BufRead *.p? source /home/macaco/.vim/ftplugin/perl_doc.vim

Se você estiver usando uma versão mais nova do que eu, então pule a última linha.

Agora sempre que você pressionar F1 quando estiver editando um arquivo Perl, o “&#58;Perldoc” irá ser executado para a palavra que estiver sobre o cursor e sua janela corrente será dividida horizontalmente e você verá a documentação do Perldoc apropriada.

Depois da instalação desse plug-in eu notei que a marcação de sintaxe de alguns dos meus programas foi interrompida. Depois de uma olhada rápida eu entendi o isso aconteceu devido ao uso extensivo do caracter underscore (”_”) em nomes de procedimentos. Eu tive que consertar isso simplesmente adicionando um caracter underscore (”_”) na lista de caracteres chaves na linha 14 do arquivo .vim/ftplugin/perl_doc.vim.

" Adiciona / e . conforme requerido.
" setlocal iskeyword=a-z,A-Z,48-57,:,/,.
" Adiciona / e . como requerido. Adiciona também _ como utilizado em nomes de procedimentos
setlocal iskeyword=a-z,A-Z,48-57,:,/,.,_

Conclusão

Como pôde ser visto acima, o Vim é um poderoso e flexível editor de texto com um monte de funcionalidades que podem ser facilmente adicionadas a distribuição padrão. O website do Vim contêm muitos outros plug-ins além dos que eu mostrei. Alguns desses plug-ins oferecem soluções alternativas para as que eu mostrei nesse documento.

Se você alguma vez sentir que falta algo no Vim enquanto o estiver usando ou se você pensa que deveria haver uma maneira mais simples e/ou fácil de fazer então navegue pela seção Tips and Scripts do website do Vim e peça por ajuda na lista de discussão.

:w

Notas do tradutor

Na data de criação do artigo original, provalvemente o Vim não possuia versões para usuários de sistemas MS Windows®. Você pode encontrar diferentes "sabores" do Vim para Windows aqui: http://www.vim.org/download.php#pc. O que mais provavelmente atenderá suas necessidade está nesse link: ftp://ftp.vim.org/pub/vim/pc/gvim63.exe.

É possível fazer uso do Cygwin (http://www.cygwin.com) e se utilizar dos recursos descritos nesse artigo. O Cygwin ainda permite a instalação de um pacote adicional chamado perl-support.vim (acesse http://vim.sourceforge.net/scripts/script.php?script_id=556 para mais detalhes). Uma vez instalado esse pacote leia o arquivo README.perlsupport para ter maiores informaçães sobre como utilizá-lo. Esse pacote sozinho implementa a maioria dos recursos específicos para Perl descrito durante o artigo.

Se você não possui experiência alguma sobre como usar o Vim, talvez você queira começar seus estudos executando o comando vimtutor que lhe mostrará um tutorial básico ou então pelo link http://www.truth.sk/vim/vimbook-OPL.pdf.

:wq