Despite the fact that I use vi a fair bit, I feel that it has definite limits that
make it not my favorite editor. For me, vi's main limits are two-fold.
First, it doesn't use graphics effectively, and I believe that it
can't; the core of vi, what makes it vi and not some other editor, is
fundamentally screen oriented. You can make vi display graphically
instead of in a terminal window, but I don't think that you can make it
into a true graphical text editor without winding up with something that
no longer feels like vi; the models of operation are just too different.
(I think it is hard to see this because so few people have used text
editors that really effectively use graphics. It is a lot more than just
using colours and highlighting text selections; the mouse and graphics
become essential parts of how you edit, and vi already has how you
edit very, very well settled.)
Second, GNU Emacs is better for being freakily super-intelligent about
things like code indentation. Yes, you can try to wedge that sort of
intelligence into vi (and people have tried), but I feel that it is a
bolt-on addition and that doing so is once again pushing vi too far.
(Why GNU Emacs is much better at this is a complicated subject. In my
opinion, part of it is that GNU Emacs does not have the two sorts of
languages distinction that vi
does, where the core is very different from the periphery. Part of it is
that GNU Emacs is fundamentally built around an interaction model that
permits widespread modification of its behavior, and vi is not.)