Emacs and Vi are not IDEs. They operate on strings, not ASTs. Intellij Idea is an IDE for Java- it allows you to eg change the name of a method and have all call sites be updated. A text editor forces you to do this yourself with a string based find/replace. Having said that, text editors are easier to extend.
Sounds like you haven't used emacs in a few years (or longer). There are tools like CEDET that allow building language modes with AST-level understanding of the source code. I don't know about the vim world in general, but I use omnisharp in emacs to provide C# refactoring tools like you describe, and that was originally built for vim.