Vim is actually a perfect example for what I'm talking about. In my experience, it's a very polarizing tool, because people either know how to use it (and love it) or don't (and hate it).
This is because vim's interface is both keyboard-based and invisible. It's powerful because it's keyboard-based, but it's difficult to learn because it's invisible, and therefore requires a great deal of memorization.
Something I wish more UI folks would try to tackle is a visible keyboard interface. Use the screen to provide feedback to the user that shows what keys are being pressed, and what potential key combinations can stem from that.
In a basic example, let's say a program implements the usual Ctrl + X/C/V for cut/copy/paste. If the user holds down Ctrl, the UI should detect that and show the user that X, C, and V are all potential key combinations, and it should explain what each of those do.
The reason why the GUI became massively popular is because the interface is discoverable, and doesn't require the user to pore over a manual. The reason why power users hate the GUI is because it doesn't use the keyboard. I see no good reason why we can't make keyboard-based GUIs that make everyone happy.
In fact, the best part about a keyboard-based GUI is that once it helps you learn how to use it, you could simply disable the graphical component to reclaim that screen real estate.