I'm specifically interested in tools that can be plugged into Vim to allow CScope-style source browsing (1-2 keystroke commands to locate function definitions, callers, global symbols and so on) for languages besides C/C++ such as Java and C# (since Vim and Cscope already integrate very well for browsing C/C++). I'm not interested in IDE-based tools since I know Microsoft and other vendors already address that space -- I prefer to use Vim for editing and browsing, but but don't know of tools for C# and/or Java that give me the same power as CScope.
The original answer to this question included a pointer to the CSWrapper application which apparently fixes a bug that some users experience integrating Vim and CScope. However, my Vim/CScope installation works fine; I'm just trying to expand the functionality to allow using Vim to edit code in other languages.
What is your most productive shortcut with Vim?
How to force VIM/GVIM show last buffer line at the bottom (instead of top)?
Keep the cursor column while swapping buffers in vim
VIM: RSync on save
Although Cscope was originally intended only for use with C code, it's actually a very flexible tool that works well with languages like C++ and Java.
reformat in vim for a nice column layout
You can think of it as a generic 'grep' database, with the ability to recognize certain additional constructs like function calls and variable definitions.
Vim highlight characters/words/line for Copy to clipboard
By default Cscope only parses C, lex, and yacc files (.c, .h, .l, .y) in the current directory (and subdirectories, if you pass the -R flag), and there's currently no way to change that list of file extensions (yes, we ought to change that).
SuperTab Plugin doesn't work together with the omnicomplete feature (<C-X><C-O>)
So instead you have to make a list of the files that you want to parse, and call it 'cscope.files' (you can call it anything you want if you invoke 'cscope -i foofile').
Selecting resulting files from grep in vim
An easy (and very flexible) way to do this is via the trusty Unix 'find' command:.
-name '*.java' > cscope.files
Now run 'cscope -b' to rebuild the database (the -b just builds the database without launching the Cscope GUI), and you'll be able to browse all the symbols in your Java files.
Apparently there are folks out there using Cscope to browse and edit large volumes of documentation files, which shows how flexible Cscope's parser is..
It seems to treat a method like a function, so it has no idea that A.foo(), A.foo(Object) and B.foo() are all different.
This is a big problem with a large code base (including third-party libraries) with many same-named methods.
(I haven't looked at the Cscope source, but this is what I found trying the latest Cscope, version 15.7a-3.3 from Debian unstable.). I tried Cscope on a large Java project, and it was not at all useful to me due to this limitation.
It's sad that we cannot get a quick answer to a basic question like "who calls this method", using free software outside of the big IDEs, but we may as well accept it.
(I would love it if I'm wrong.
I resort to hacks like commenting out the method and recompiling.).