Still people insist on writing their code as text strings mumbling "something something but my vim".
As long as people think strings are some "universal format" this madness won't stop.
(The vim people at least insist. The IDE people just roll their eyes, not understanding what is being talked about and how code could look any different.)
And while you'll have to pry my Emacs from my cold, dead hands, the no #1 thing I wish for is the ability to keep the code in a database (or at least treat it as such, and not look at the raw text files) and expose it through various structured view, allowing editing at higher level of abstraction.
There are benefits to 2D textual representation, not the least of which is that both Emacs and vim let you work with it with efficiency and ergonomics unmatched by any other tool. But it should still be seen as representation, not the ground truth, and exploited to its full potential.
Some trivial examples of what I'm thinking about:
1) Render class content as an org-mode table like:
| name | type | access | initializer |
|--------------+---------------------+---------+-------------|
| GetWidget() | () -> Widget | public | |
| widget | Widget | private | {} |
| frobnicators | vector<Frobnicator> | private | {} |
| ... | | | |
With this, I can very quickly add, modify, or reorder fields, and the view should either immediately or on "commit" step ensure that I can't possibly get this wrong syntactically. Renames and other changes should, obviously, do appropriate "refactors".2) Imagine something like 1), but rendering the result of a query "every field of every class in the current module, that is of type Frobalizer<?>". I'd then be able to e.g. rename these fields in bulk using, say, one or two regex-replace calls, and then commit it to execute a mass renaming "refactor".
The benefits of staying with 2D text as a representation form is that vim and Emacs are really that good at navigating and editing it, much better than GUI-based equivalents could ever be. I think it also maps quite nicely to how people think - there's the abstract structure, which you inspect by viewing it in various representation, and when you want to change something, you think in terms of how you'd want the representation to look like after the change - e.g. "I want all those Y and Z to be X and Q instead".
But I've posted something similar to what is described here just the other day:
https://news.ycombinator.com/item?id=34232549
The thing we interact on the surface should stay "text like" of course.
But the tools used should work on the actual data structure (and this should be also what ends up it on disk).
Proper editors (and IDEs) do this partly anyway. Only that things get converted (loosely!) back and forth between the internal representation of the IDE and the text on disk. The compiler than again extracts the rich data form the text, over and over. Pure madness…
If just the LISP machine would have won… Things would likely look much better now. We would work with rich ASTs instead of text blobs I guess.