by lproven | 2026-02-10 09:57:14+00:00
Vi is primitive and clunky not because it's a bad design, but because it's from 1976 and computers have changed a lot since then. It dates from a pivotal point: when glass terminals had replaced teletypes.

Glass terminal means with a screen, so any point on the screen could be changed at any time. Screen means a CRT, and that means specifically text-only and single-colour.

But before microcomputers, before a mass market in software that individual people could get and use on their own computers. Vi was from the end of the era of computers that cost as much as a house and so which you had to share.

So, terminals with screens were becoming common enough that an editor designed for them caught on.

But it was before microcomputers, where the computer was so closely coupled with the screen and keyboard that soon they were built into the same casing.

Screen + keyboard + computer in one unit == Commodore PET.

Keyboard + computer in 1 = Apple II

Keyboard, screen, and computer all sold together: TSR-80

All 1977, the year after vi appeared.

Computers with their own keyboards, or in their own keyboards, led to keyboards designed alongside the computer's OS.

Before then terminals were printers with typewriters: instead of just printing, the keyboard sent codes to the computer, and the computer sent them to the printer. Replace printer with screen, this still happened.

A mass market in software for individuals led to UI conventions and keyboard improvements.

Typewriters only have Shift and Tab. But as glass terminals went mainstream, then microcomputers which came with their own dedicated keyboards, they sprouted lots more keys.

Vi is from the early stage: it expects "Esc" and there's a combo for that.

What came right after it was Ctrl and Alt... and at first they went a bit crazy and there was Meta and Hyper and so on too.

To this day, the meaning of "meta" has not been agreed. Emacs and relatives mean one thing, KDE and relatives mean a different key.

Along with these keys, and a way to represent them as bits in a byte, nicknamed after a very young Niklaus Wirth -- "Bucky bits".

(I am guessing this is from him having European teeth not as even and straight as American kids who if they were from families rich enough to send them to university, all had braces.)

Along with all those keys came arrow keys and forwards and backwards delete keys, and rows of F-keys.

And it shows because vi doesn't use all this. It uses letters and Ctrl and nothing much else.

Once all the keys were they, software started to use them. Result, a Cambrian explosion in UI diversity. That's the era Emacs is from.

Then, next, came a great extinction event, as most of the dozens of weird 1980s computer makers went broke, and the industry standardised on CP/M replaced by MS-DOS, and PC clones, plus off to one side a few makers of GUI computers: Apple, Atari with the ST, Commodore with the Amiga, Acorn with the Archimedes.

And a matching great extinction event in UI design, as IBM-lauout keyboard became the standard and GUIs standardised software UI. DOS standardised UIs on CUA as it fought to stop Windows taking over.

It failed. Windows uses CUA. GUIs and CUA killed modal editors and weird UIs.

The Unix world stayed on minicomputers and their single-user descendants, workstations. It avoided all this standardisation. Keyboards stayed weird, UIs remained chaotic.

That's why vi is still weird, and so is Emacs in totally different ways.

The sad thing is this:

Those standardised UI are good ones backed by millions in R&D spend. They are better UIs than vi -- any vi.

Vi users like the rich keyboard controls, and won't move. But CUA editors have equally rich keyboard UI and if you know it you can drive all GUI apps with the same UI. This is massively useful. You can drive the whole OS and all its apps at the speed and control and power of a Vim user who's been practising for a decade.

And it hasn't gone away because this is also the UI that all blind and visually-impaired users use, and those with serious motor coordination problems.

But the Linux shell came straight out of minicomputers and workstations and never got standardised like this.