sexta-feira, 4 de abril de 2008

Vim, taglist e ctags: Programando com produtividade

Cof! Cof! Quanta poeira! Sim, eu sei. Já faz quase um mês que não escrevo. Mas tenho algumas boas descuplas: Fui contratado no LTC e muita coisa mudou: Rotina nova - acordar e chegar em casa em horários diferentes e aula na Unicamp. Computador novo - sim a Lisa se foi. Com a chegada do notebook da IBM a sempre presente Lisa deu lugar ao Maizena.

Bom, o fato é que já dentro da IBM entrei em um projeto majoritariamente em Python. Uns pedaços em shell script, mas a grande maioria em Python. O que me forçou a ser um pouco mais produtivo do que o normal. Com Vim e ferramentas adequadas isso é bastante fácil. :-)

Indo direto ao assunto, ao final deste breve tutorial, iremos ter algo parecido com o screenshot acima: Teremos uma lista de classes e métodos do projeto todo em uma janelinha (split) do Vim. A tela lateral é gerada com o plugin TagList e a lista de classes e métodos (as informações em si) é com o ctags. Tudo muito simples.

Primeiro vamos entender o programa ctags: Ele lê arquivos fonte (e até agora eu já testei com C e Python) e gera um arquivo de tags que contém informações relevantes tais como: Declaração de variáveis, declaração de funções (em caso de linguagem estruturada), classes e seus métodos (em caso de linguagem orientada a objeto) e por ai vai. As tags são orientadas ao caminho do arquivo de onde foram lidas as informações, isso quer dizer que gerar um arquivo de tagas com o caminho absoluto do arquivo é mais interessante do que gerar o mesmo arquivo com o caminho relativo já que vamos manipular informações dentro de um projeto inteiro. Trocando em miudos:

$ find $(pwd) -regex ".*py$" | xargs ctags

Execute este comando na raiz do projeto, ele irá ler todos os arquivos .py e irá mapeá-los com ctags gerando o arquivo tags. Note que o diretório de procura será $(pwd), isto fará com que as tags tenham o caminho absoluto do arquivo mapeado.

Agora, você terá que copiar o arquivo de tags para cada um dos diretórios do projeto:

$ find $(pwd) -type d -exec cp -v tags {} \;


(Quem tiver dúvidas no shell só deixar nas caixas de comentários que eu explico)

Depois de criar e copiar o arquivo de tags para cada diretório de seu projeto, agora é hora de usar TagList dentro do vim. Baixe o arquivo, descompacte e copie o arquivo taglist.vim para dentro de ~/.vim/plugin e taglist.txt para ~/.vim/doc:

$ cp taglist.vim ~/.vim/plugin
$ cp taglist.txt ~/.vim/doc


Agora é só correr pro abraço. O comando mais importante que você deve aprender agora é TlistOpen. Deve saber também que dentro do split você pode apertar F1 e receber ajuda sobre os comandos e keybinds que pode usar para navegar nas classes e métodos.

:TlistOpen

E agora, o mais legal de tudo: Com a split aberta (e com as classes e métodos do arquivo atual lá), você pode usar as keybinds do ctags para pular diretamente para métodos em outras classes e em outros arquivos. Por exemplo, com o cursor em cima de um método qualquer você pode apertar Ctrl+] e pular automaticamente para o arquivo onde está implementado o método. A split irá mostrar a classe em questão e seus métodos como mostra a figura abaixo:

Espero ter ajudado os programadores por ai! :-)
Postar um comentário