For verbose languages, you can't beat auto-completion and auto-import.
And you can get both in vim, emacs, etc. The lines between those and full IDEs are blurry with the right (or wrong) amount of plugins.
There are many other advantages like out of the box support for a lot of common use cases like refactoring, navigation, build tool support, reuse common shortcuts like Control-C Control-V for copy-paste etc.
I would definitely advice new engineers coming into languages like Java to pick up an IDE like Intellij instead of vim.
It's clang-based, so suffers from none of the tags-type issues: it's context-sensitive, and can see straight through gnarly stuff such as identifiers generated by token pasting.
Good points:
- Only mildly fiddly to set up
- Code browsing works well
- Code completion works well when it works
- Cute gcc/g++/etc. wrapper trick means you don't have to change any build settings
Bad points:
- Making it work with code you haven't built yourself on your local system (e.g., 3rd party stuff that's not complete, code for another platform) is less straightforward
- Code completion sometimes doesn't work with certain files (and for no reason that I've ever been able to figure out)
- It's probably my own limitations but I found it extremely inconvenient to debug (internally it's surprisingly complicated: separate client and server, lots of lengthy command lines, client code writes elisp code to stdout and elisp in emacs eats it up, the actual completion popup is a separate package, etc.)
I like how you can use command keys to quickly toggle on and off the project file and current-file's-components browsers, leaving the "distraction free" * editor window for much of your work.
* yeah, there's a mode with this name that auto-wacks ALL the supplemental panels, AND the window frame. I don't usually go that far, but it does show that they "get it" as far as what many of us IDE resisters disliked.