Tree view and go to def plus basic autocompletion (through tags) are very much built into vim.
The rest can be done through plugins, these days very painlessly - but admittedly even a few years ago rather a hassle to set up.
Debugging, while perfectly doable depending on language, is I'd say the one thing still rather awkward.
Debugging, while perfectly doable depending on language, is I'd say the one thing still rather awkward.