1. no code completion -- rarely works well. To get it to work well, it requires set up, and when I start a project, I don't want to waste time setting anything up. Also, doesn't work for interesting things, like code generation. I realize most programmers rarely do anything like that, but I do.
2. Customizability -- emacs is super-customizable. Lisp is easy to understand and you can basically do anything.
3. No mouse -- I'm faster just using keyboard shortcuts
4. Runs in terminal or graphical -- When I ssh into a machine, I want to be able to use Emacs through the terminal
5. Orthogonal user-interface -- In Emacs, everything is a buffer. I can use the same interface to navigate through Emacs 'configuration' as I can through my code. I can use the same interface to navigate through the Emacs terminal emulator as my code as well. This is amazing. Contrast this to 'newer' editors like Sublime or Eclipse, where the configuration dialog, git interface, etc, are all custom UIs. To understand why this makes a difference compare and contrast the experience of using a Web-based App via a browser to the feeling of using a Native App. The native app may 'feel' nicer when you look at it, but nothing beats the consistency of the browser interface (back button, copy/paste integration, links, etc.). There's a reason HTML based interfaces are so popular
6. Universal support -- emacs runs on basically everything. So does VIM (Probably more than emacs)
7. Support for large numbers of libraries, languages, etc -- I've rarely found any new language, framework, etc, which doesn't have support in Emacs. With some changes to my init.el, the package is installed (thanks to use-package), and I'm done.
8. Easy dot files -- I have several computers. To set up emacs on a new computer, I just copy my .elisp directory.
In other words, the advantages of Emacs and VIM over other editors are:
1. Text-based interfaces 2. Universal support 3. Customizability 4. Adherence to the UNIX philosophy (everything represented as text)