Plus ctags isn't really that smart, or you can say the way it is used. For example I have a struct "foo" that has different independent declarations in several files in my source tree. Whenever, I would try to open that tag, list of all tags would show up regardless the files included in the current source files. This is quite irritating.
Another not-so-smart feature is auto completion (in C++ at least) and refactoring.
However I can live with these missing features as once you get used to something like Vim or Emacs, its quite frustrating to work on bloated IDE's.
How does ctags do when a variable name is repeated in a different scope? I do rather wish for a really good vim type replacement for the editor in NetBeans though. I keep inadvertently entering vim motion commands in my java text - sigh.
It picks the "best" one (typically the one in the scope of your current file), and lets you change which one to go to, without ruining your tag stack.
For example, if I Ctrl-] over `open`, and it pops me to the wrong one, I can then type :ts and pick the proper entry (typically with info about the file, type, and container). I can then Ctrl-t back to the previous context as normal.
Well, if you're using ctags through vim it guesses by default, or you can use :ts to get a list of the possibilities. Not ideal, I know, but often good enough.
Another not-so-smart feature is auto completion (in C++ at least) and refactoring.
However I can live with these missing features as once you get used to something like Vim or Emacs, its quite frustrating to work on bloated IDE's.