Don't Say 'Emacs' or 'Vi'
A brief tour of some other editors
Quick, think of your favorite
$EDITOR. If you’re anything like me or the people I work with, you’ve got a horse in this race. And again, if you’re anything like myself or my comrades, you’ll probably say Emacs or Vi. You can check:
egrep 'EDITOR|VISUAL' ~/.bashrc
If you don’t know what I’m talking about, the above command may even show you that somebody made that choice for you!
But, for the sake of argument, let’s say that you do have something in that file that you lovingly placed there. And so what if I asked, what’s your favorite editor and don’t say Emacs or Vi?
While you ponder, I have a brief tour of some of the other means I’ve used to sling text.
Everyone that has owned or been related to someone that has owned a Windows PC in the last 20 years or so has probably used Notepad. Notepad is a kind of lingua franca of applications. I have often used it to probe what was in a file on Windows. When I’d encounter a
.frob file, I’d just say to myself, “maybe this is a text format” and then open it with Notepad. Even in Windows, an OS that does not generally hew to the mantra of “just text”, this sort of exploration usually yielded some useful results.
Notepad is the text editor that you can tell beginning programmers: “if you can’t or won’t use anything else, at least use notepad, because it will not add any formatting to your source code.” You can tell them this without having to get into what a “plain-text” file vs. a Word file really is — just use notepad, we’ll get to some other editor later.
For me, when I’m reaching for the correct word, I even call the default text application on the Mac “Notepad” from time to time (correct answer: “TextEdit,” actually a much more complex application).
I can remember my freshman computational physics class really well. It introduced me to my first programming language, FORTRAN, and my first real UNIX system, IRIX running on an SGI O2. These were little blue coffee-maker shaped computers that hummed away in the basement of the physics building. You felt that you were using UNIX. I remember using
xearth to (half-seriously) check if it was night or day outside.
Anyway, so there we were writing our code to numerically calculate integrals using FORTRAN. I can’t remember if it was a demo by the professor or if it was just my poking around the system that led to my discovery of Nedit. However I found it, I quickly started using it for writing my code, it seemed to have syntax highlighting for everything! No matter if I was banging out clunky C++ or typing up my results in LaTeX, Nedit instantly started up and then decorated my code with colorful keywords. It had a few functions available from the menu bar for doing language-specific things like compiling or spell checking. Mostly though, syntax-highlighting was it.
I ended up using Nedit for quite a bit of my college career. I would go find and compile it, or just snag it from the repos if my Linux of choice didn’t already have it.
If the Windows Notepad is some kind of lingua franca then Acme is like Esperanto: carefully designed, smallish number of very devoted fans, and simultaneously familiar and unfamiliar.
Acme starts with a basic assumption of a modern system: you have a graphical display and a mouse. Not too shocking right, but think about it, in most editors, you’re inputting text as if it were a typewriter. Following up on that idea, Acme espouses some ideas like:
- use the mouse
- buttons can be combined into chords
- moving far in the file is the job of the mouse
words on screen can be clicked for effects
- complex edits use a command language similar to
What’s fascinating is how far these ideas go and the really neat functionality that comes out of it. Also, I think that it is a rare example of a GUI program squarely in the “power user”1 camp.
Back before google docs really popularized the idea of real-time collaborative editing2 , the only place that I had seen something like that was in SubEthaEdit. This was a really nice editor that had the unique feature that you could have people join in and work on the same document as you at the same time. I mention it because I think that this is still a really useful idea. The way we work here at Bendyworks is pair programming, and while it is generally preferable to pair while physically sitting at the same computer, sometimes you remote pair. Having a good solution to co-edit source code with someone far away is really nice.
I hope I’ve sparked some thought outside the Emacs-Vi dichotomy. Even if you, like me, shrug and go back to, say, vim, it is worthwhile to consider other design choices in text editors.
If you want to check out any of these editors
- Windows Notepad: http://en.wikipedia.org/wiki/Notepad_(software)
- Nedit: http://www.nedit.org/
- Acme (screencast): http://research.swtch.com/acme
- SubEthaEdit: http://www.codingmonkeys.de/subethaedit/
- By camp and power user, I’m talking about the natural tension in systems between being designed to be intuitive and user-friendly vs. being harder to learn, but efficient for the experienced user. These kinds of apps are also sometimes said to have steep learning curves.
- If you haven’t done this yet, do so! Sharing a document that everyone can edit real-time, is about a thousand times better
- that trying to approximate this workflow with back-and-forth emails.