Vim can do ctags out of the box. If I remember right, the command is C-] (ctrl+ close bracket) to jump to a ctags definition.
For rails projects I wrote a script that kicks off ctags with the following options. "ctags --tag-relative -Rf.git/tags.$$ --exclude=.git --exclude=log --exclude=tmp --exclude=public --languages=ruby --languages=javascript `bundle show --paths` $MY_RUBY_HOME ."
I'd wager there is a better way. That's just the way I roll.
I may have also separately installed ctags, but I don't remember.
Now you can have an outline of the file you're working on in a small pane to the right. You can use this to navigate or see what arguments a function needs (or what attributes a class has). Whenever you save, ctags are automatically generated so you never have to worry about setting that up. ctrl+] will bring directly to the definition, including if it is in another file entirely. Use ctrl+T to go back to where you came. More often than not, I use this not because I forgot what the code says, but because I made an alteration to how I wanted a function or class to behave and I need to go back and change a line or two.
On first blush, this looks like ctags[0] (or etags[1]). In nvi, I go to a function or structure I want to see the definition of and (/me loads nvi to see what I actually do...) ^] (ctrl-bracket) to jump to a definition, and ^T (ctrl-t) to pop that ctag jump off the stack that it maintains. Because it's stack oriented, that means that you can jump through to definitions until you're satisfied, and pop back the same route you took getting to your ultimate destination.
It never seems to work for me. If I put the cursor over a word and type gd, it seems to go to the first line that the word is mentioned, not necessarily the definition. It's handy, for sure, but not too reliable. I think it can be improved with some plugins though.
For rails projects I wrote a script that kicks off ctags with the following options. "ctags --tag-relative -Rf.git/tags.$$ --exclude=.git --exclude=log --exclude=tmp --exclude=public --languages=ruby --languages=javascript `bundle show --paths` $MY_RUBY_HOME ."
I'd wager there is a better way. That's just the way I roll.