Navegando com CTags no Sublime Text

Uma coisa legal em IDEs é o recurso de navegação no código usando atalhos de teclado e mouse ("Go To Definition" da vida).

O Sublime Text é apenas um editor de texto, porém, graças a sua extensibilidade, podemos obter o mesmo comportamento via plugin.

Instalação e Setup

Instale o plugin CTags: Ctrl+Shift+P > Package Control: Install Package > CTags.

Instale a biblioteca exuberant-ctags via sudo apt-get install exuberant-ctags (veja aqui instruções para outros sistemas).

No OSX com Xcode instalado, será necessário adicionar o caminho certo do binário do ctags {"command": "/usr/local/bin/ctags" } no arquivo CTags.sublime-settings do Sublime Text (Packages Settings > CTags > Settings - User). Veja mais aqui e aqui.

Agora precisamos gerar um arquivo de tags com a biblioteca acima para que o plugin possa "conhecer" nosso projeto.

Entre no diretório do projeto que deseja mapear e rode o comando ctags -R -f .tags, isso nos gerará um arquivo .tags.

Pronto, já podemos navegar pelo projeto, basta parar o cursor do mouse em cima de alguma classe ou método e usar o atalho Ctrl+Shift+Clique Esquerdo para ir na definição e Ctrl+Shift+Clique Direito em qualquer lugar para retornar.

Regerando Arquivo de Tags

Ao adicionar código, o mapa do projeto ficará desatualizado, então precisamos regerar um novo com as últimas mudanças inclusas.

Podemos fazer isso clicando com botão direito dentro da barra lateral na pasta do projeto e clicando em CTags: Rebuild Tags, via Package Control procurando pelo nome do plugin ou via atalho, pressionando Ctrl+T e Ctrl+R (logo em seguida) e escolhendo o local a partir de onde será gerado e salvo o mapa (eu particularmente sempre escolha o última opção, que é a raiz do projeto, assim ficamos com um mapa só para todo projeto).

Automatizando Geração de Tags

Se seu projeto usa git, você pode configurar hooks para automaticamente regerar as tags. Em meu caso deixo após cada commit (post-commit) e pull (post-merge).

Basta entrar no diretório .git/hooks do projeto e rodar:

$ echo 'ctags -R -f .tags' > post-commit && chmod +x post-commit
$ echo 'ctags -R -f .tags' > post-merge && chmod +x post-merge

Ocultando Arquivo de Tags

Aquivos de tags servem para o plugin apenas, podemos ocultar ele(s) da barra lateral com árvore do projeto e das pesquisas adicionando o trecho abaixo no arquivo Preferences.sublime-settings:

"file_exclude_patterns": [".tags", ".tags_sorted_by_file", ".gemtags"]

Adicionando no .gitignore

Eu também gosto de ignorar os arquivos de tags no git, basta adicionar as linhas abaixo no seu .gitignore:

.tags
.tags_sorted_by_file

Até mais.

Written on January 10, 2015

Share: