Using a *nix system's terminal can feel dangerous. If you don't know what you're doing, you may actually leave your system in a state of disrepair. Simultaneously, the terminal can feel incredibly empowering. It peels back a layer of abstraction, offering a direct way to discover and manipulate a system. Since *nix is ubiquitous, learning it once lets you use it practically anywhere.
The Modern Text Editor
Most modern programming requires a method to precisely select, input, and arrange text. Naturally, this tool should become an indispensable piece of software in the programmer's broader suite of authoring and debugging tools.
According to Stack Overflow's 2024 developer survey , Microsoft's Visual Studio Code is the preferred IDE (integrated development environment)— used by 73.6% of respondents. It was also the "most desired"— by 58.7% of respondents. However, Neovim — a modern text-based editor— was ranked "most-admired" (admired by 82.7% of respondents).

Terminal-Based Editors
An immense benefit of text-based editors is their ability to run within a system's terminal emulator. Every modern system should be accessible via a terminal, so a text editor that's rendered with UTF-8 characters can run on virtually any system.
A terminal emulator can provide direct access even to headless environments— on a computer or virtual machine (VM) without a display. Some systems, like a cloud-hosted website, may not be connected to a display; or, it may lack the compute power needed to run a full graphical user interface (GUI).
Without a GUI, editing with VSCode isn't a viable option.
For a wonderful audio-visual appendix to this article, I highly recommend the Text ed
series by the Linux User Space
YouTube channel.
nvim
Neovim (a character-based text editor) is capable of running directly inside a terminal. It was forked from Vim in 2014 but still retains compatibility with Vim's editing model (commands, shortcuts, and editing "modes").
Since that original fork, however, Neovim has also aggressively refactored much of Vim— evolving into a powerful and highly configurable alternative. It is available across any *nix host (and, yes, Windows ), and it provides modern features comparable to VSCode—
- language server integration
- an abstract syntax tree (AST) parsing engine for precise syntax highlighting and motions
- straight-forward plugin support
- Lua configuration and scripting
Over the past decade, Neovim has attracted widespread admiration within the developer community— even spurring the same cult-like obsession as its immortalized predecessor, Vim.
Human-Computer Interaction
The text editor's contemporaneous technology has always set reasonable limitations on human-computer interaction (HCI). Before more widespread adoption of interactive displays, computers would mark their output on a continuous feed of paper. Before the advent of interactive input devices, a programmer would tediously prepare a stack of sorted punch cards as a means of providing instructions to a machine.
It was during the 1950s and 1960s that "computer science" was established as a formal discipline— with Purdue University actually establishing the first computer science department in 1962. Interactive text-editing— pressing a key and immediately seeing it appear on a screen— wasn't a prevalent HCI until 1976 . For the sake of reigning in the conversation, I'll focus on Unix-based text editors that coincide with the history of the Unix operating system— beginning in 1969.
Turtles All the Way Down
There have been many influential editors to shape the field of software engineering. Candidly, I am an indoctrinee of the Neovim cult. As its devout acolyte, this article serves as a meditation on the origins of the editor for curious and reverent readers.
In order to build context and provide some cultural insight, I've attempted to catalog some of the people and conversations (and even old manuals) surrounding the creation of the most influential terminal editors.
You might see a piece of software attributed to a single contributor, but it's rare that an individual makes something entirely in isolation— without building on the foundation of others. In my experience (and historically), software is derivative, iterative, and collaborative.
Likewise, Neovim was not pulled from thin air— it is a fork of Vim (specifically, version 7). Vim itself was an evolution— of the vi
text editor. The vi
editor emerged from ex
. And there is a clear evolution which unravels back to the first Unix graphical terminal editor— ed
.
qed
Before ed
, we'll take one step further back— to qed
(or QED— for "quick editor"). QED was conceptualized in the late 1960s (circa 1967) by L. Peter Deutsch
and Butler Lampson
at Berkley. Dana Angluin
, who's work on computational learning theory
is credited as foundational to modern machine learning, also contributed to an initial implementation
.
QED was used on the Berkeley Time Sharing system— on an SDS-940 . It was run mainly on Teletype inputs— CRT displays were not considered in its design.
Check out CuriousMarc's video where he uses a Teletype terminal to send a Tweet.
The origins of Unix date back to the mid-1960s when the Massachusetts Institute of Technology, Bell Labs, and General Electric were developing Multics, a time-sharing operating system for the GE 645 mainframe computer1
The name "Unics" was actually a pun on the "Multics" name
. QED would continue to be used in Multics— I even found a manual from 1983
of the later qedx
implementation written by Bob Daley
.
ed
Ken Thompson used QED at Berkeley before he came to AT&T Bell Labs . Upon arriving at Bell Labs, Ken Thompson wrote an improved version of QED— with regular expression pattern matching— for the MIT CTSS (Compatible Time-Sharing System) in the Assembly language. CTSS was used at Bell Labs as part of their participation in the Multics project— which it dropped out of in 1969.
Ken's CTSS
qed
adopted (from the Berkeley one) the notion of multiple buffers to edit several files simultaneously and to move and copy text among them... also the idea of executing a given buffer as editor commands, thus providing programmability. (TECO, which grew into Emacs, was approximately contemporaneous or just a bit later, and elaborated these ideas independently).2
At Bell Labs, Ken and Dennis Ritchie (creator of the C programming language ) conceptualized a simplified operating system— convinced that the current models were overly complex. Concisely, they determined that three essential elements were necessary for the new system:
- An assembler
- A shell
- An editor
Short for editor, but pronounced as distinct characters (ee dee), the ed
text editor became the dedicated (line-mode) text editor for the Unix system. The ed
text editor would later be included in the POSIX standard and, in fact, remains there today. If you're on an Apple computer, try opening the terminal and typing man ed
.
- source code (GNU)
- manual (GNU)
em
In London, in the fall of 1975, Peter Salus
developed em
("editor for mortals") at Queen Mary College (now, Queen Mary University— the first UK site to get Unix). It was an extension/upgrade of ed
which set the terminal mode "raw"— enabling single characters to be read as they were typed. This allowed visual editing within a single line by sending a RETURN
character followed by a new version of the line after each alteration.3
en
Bill Joy
— co-founder of Sun Microsystems and author of the vi
editor— described yet another orphaned editor in the arc of Unix history. In an interview for the August 1984 issue of Unix Review:
So Chuck (Charles Haley ) and I looked at that and we hacked on em for a while, and eventually we ripped the stuff out of em and put some of it into what was then called en, which was really ed with some em features... I'd break the editor and he'd fix it and then he'd break it and I'd fix it. I got really big into writing manual pages, so I wrote manual pages for all the great features we were going to do but never implemented.4
ex
Peter Salus had introduced his em
program to Bill Joy
in 1976— spending the summer at U.C. Berkley's computer science department.
Bill had taken my code as a starting point and had got a long way towards what was to become 'ex' and subsequently 'vi'...
vi
Vi
was originally created for the Unix operating system by Bill Joy
in 1976 as a "visual" mode to the earlier text editor— ex
(short for extended). "Visual" meant that it could be used across multiple lines compared to the line-oriented editing capabilities of ex
. Though, at the beginning, vi
and ex
were interfaces to the same program, and it was even possible to switch back and forth during an editing session.
- In 1987, Tim Thompson created another
vi
clone for the Atari ST— without copying any source code from the OGvi
. He called it STEVIE (ST Editor for VI Enthusiasts).5 - In 1988, STEVIE was ported to OS/2, Amiga, and Unix by Tony Andrews and G. R. (Fred) Walter.67
Using the Stevie source code allowed the program to be distributed. Previously, the vi
source code would have to be licensed by AT&T. The open source port that Andrews implemented was modified by Bram Moolenaar
— eventually becoming Vim (or "Vi IMitation").
vim
Moolenaar would continue to work on Vim for the next few years (on the Amiga
)— making the first public release in 1991. The VIM acronym would be derived as "Vi IMproved" (rather than IMitation) as it started to add features atop the base vi
implementation. In 1992, Vim was ported to Unix and introduced multiple windows, syntax highlighting, folding, and a GUI.8
Like vi, vim supports multiple editing modes. Depending on the mode, typed characters are interpreted either as sequences of commands or are inserted as text. In Vim there are 14 editing modes, 7 basic modes and 7 variants
Normal mode gives you navigational access to the working document— or "buffer" in Vim-lingo. Insert mode lets you type like you would in common GUI text editors (think Google Docs, MS Word, or Notepad). Command mode lets you run regular expressions, shell commands, or Vim-specific commands. Visual mode is a visual selection mode— similar to highlighting text on a GUI but giving you the ability to also select vertical columns. To be honest, I rarely use the other 10 modes.9
Vi (and by extension Vim) tends to allow a typist to keep their fingers on the home row, which can be an advantage for a touch typist.
It's interesting to note that vi
was mainly implemented on an ADM-3A
. This terminal didn't have dedicated arrow keys. Instead, it used the h j k l
keys for navigation (left, down, up, right, respectively).10

h j k l
keys printed with arrows— the origins of vi
's home row navigation.A common allure of Vi/Vim/Neovim is the ability to seamlessly navigate without a mouse— and without having to reach out for the arrow keys. In the lighthearted culture-war between Vi and Emacs users, a common theme is that Emacs users suffer from carpal tunnel because of all the modifier key combinations they're forced to use to complete various editing actions. Vi's multi-modal switching does allow for relatively straightforward shortcuts— providing completely different effects depending on its active mode.
Bram's Death
Vim is eternally tethered to its creator, Bram. Bram was the benevolent dictator of all things Vim. He had a reputation for not allowing many requested changes to be merged into the repo— which can sometimes be a sign of thoughtful code management. Though, it was this stringency (as well as a general dislike for VimScript— the Vim scripting language) which ultimately incited the creation of Neovim.
Bram was also a philanthropist. He established Vim with a charityware license— dedicating it to orphans of AIDS in Uganda through ICCF Holland (which he founded and served on as treasurer). A report, shared by Bram in 2020, showed that between 2011-2019 Vim had annually made over €50k. In 2019, it had made nearly €80k for the charity!11
It was deeply saddening to many programmers when news of Bram's passing spread in August of 2023. The new Vim maintainer, Christian Brabandt, has written about his experience with Vim after Bram — and of the logistics of taking over the code.
As of writing, the Hacker News article of Bram's passing ranked #7 in all-time upvotes. The top-ranking all-time post is an obituary for Stephen Hawking, and #6 is for Steve Jobs. I don't mean to be insensitive by using a social media metric to compare peoples' worth— but Bram (and Vim) clearly stands among giants in the hearts and minds of the tech community at large.
The Legacy of Text Editing
Though I attempted to provide a detailed history of Unix text editing— this is really the tip of the iceberg. In the early days of computing, there was an entanglement of a diverse number of talented computer scientists, mainframe machines, and bygone terminals.
I hope readers will spend some time exploring the resources that I've collected and can correct any mistakes I might have made during my research.
Honorable Mentions
These are other notable text editors that were developed in tandem with the timeline as those which were discussed in the above article. They might not have had the same bearing on the Neovim lineage— but interesting to read about nonetheless.
Other Modern Editors
Kakoune
Kakoune is a code editor that implements Vi’s "keystrokes as a text editing language" model. As it is also a modal editor, it is somewhat similar to the Vim editor (after which Kakoune was originally inspired).
Helix
By starting from scratch we were able to learn from our experience with Vim and make some breaking changes. The result is a much smaller codebase and a modern set of defaults. It's easier to get started if you've never used a modal editor before, and there's much less fiddling with config files.
Footnotes
-
https://en.wikipedia.org/wiki/Unix#History:~:text=The%20origins%20of%20Unix%20date%20back%20to%20the%20mid%2D1960s%20when%20the%20Massachusetts%20Institute%20of%20Technology%2C%20Bell%20Labs%2C%20and%20General%20Electric%20were%20developing%20Multics%2C%20a%20time%2Dsharing%20operating%20system%20for%20the%20GE%20645%20mainframe%20computer ↩
-
https://web.archive.org/web/20180808001533/https://www.bell-labs.com/usr/dmr/www/qed.html#:~:text=he%20did%20on%20arriving%20was%20to%20write%20a%20new%20version%20for%20the%20MIT%20CTSS%20system ↩
-
https://web.archive.org/web/20250102124747/https://www.eecs.qmul.ac.uk/~gc/history/ ↩
-
https://web.archive.org/web/20120210184000/http://web.cecs.pdx.edu/~kirkenda/joy84.html ↩
-
https://web.archive.org/web/20121109202944/http://groups.google.com/group/comp.sources.unix/msg/1fccf6a82259beed?dmode=source ↩
-
https://web.archive.org/web/20160104222833/http://nosuch.com/tjt/stevie/ ↩
-
https://vimhelp.org/intro.txt.html#:~:text=G.%20R.%20(Fred)%20Walter%09Stevie ↩
-
https://web.archive.org/web/20120418061526/http://moolenaar.net/vimstory.pdf ↩
-
Ibid. 7 ↩
-
https://web.archive.org/web/20250104082508/https://www.hillelwayne.com/post/always-more-history/ ↩