vi runs into its limits
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.)