No Vim, você pode usar tags para pular para a declaração da função (ou onde quiser). É como o recurso de “declaração Goto” em grandes IDEs (por exemplo, RubyMine). O problema é que quando você está usando o Vagrant, você não tem acesso às fontes de gems porque toda a configuração é feita dentro da caixa, mas você está executando o Vim fora dela. A solução que proponho é expor a pasta .rvm do sistema operacional convidado para o sistema operacional host.
Aqui, descrevi todo o processo, desde a criação de um diretório até a geração de tags para o projeto.
Presumo que você já saiba o que é ctags (leia este artigo se não for o caso).
1. Crie o diretório ~ / .vagrant_rvm no sistema operacional host
$ mkdir ~/.vagrant_rvm
2. Exponha a pasta .rvm do sistema operacional convidado para o sistema operacional host
Adicione esta linha ao Vagrantfile do seu projeto:
config.vm.synced_folder "/home/<username>/.vagrant_rvm", "/home/vagrant/.rvm"
3. Gere tags para o seu projeto de dentro do sistema operacional convidado
Instale ctags no sistema operacional convidado (todas as principais distribuições têm um pacote para ctags). Exemplo para Ubuntu:
$ sudo apt-get install exuberant-ctags
Execute este comando (supondo que você esteja na raiz do projeto):
$ ctags -f gems.tags -R `bundle show --paths`
Em seguida, precisamos corrigir os caminhos para que apontem para /home/<username>/.vagrant_rvm
(não /home/vagrant/.rvm
):
$ sed -i 's/\/home\/vagrant\/\.rvm/\/home\/<username>\/\.vagrant_rvm/' gems.tags
4. Verifique se você tem isso em seu .vimrc
set tags+=gems.tags
Você também pode adicionar gems.tags ao .gititgnore-global
.
5. Experimente!
Vá para qualquer método de gema e pressione Ctrl-].
PS Se você conhece uma solução melhor, fique à vontade para deixar um link nos comentários abaixo e irei deletar esse horrível conjunto de hacks 🙂
Bônus: se você estiver usando git, eu recomendaria configurar alguns git hooks , que irão (re) gerar ctags toda vez que você puxar, enviar commit ou rebase (graças a Tim Pope).