esc
Anthology / Yagnipedia / Vim

Vim

vi Improved, and Improved, and Improved, Until the Improvements Needed Their Own Editor
Technology · First observed 1991 (Bram Moolenaar — in loving memory — who gave vi features it never asked for, and the world used them anyway) · Severity: Critical — the editor that taught a generation to configure instead of edit

Vim (Vi IMproved) is a text editor created by Bram Moolenaar in 1991. It took vi — a program that was already complete — and improved it. Then improved it again. Then added a plugin system. Then added a scripting language. Then the scripting language needed plugins. Then the plugins needed configuration. Then the configuration needed a plugin to manage the configuration.

Vim is what happens when you improve something that was finished.

“Bram gave us everything we asked for. The tragedy is that we asked.”
The Caffeinated Squirrel, installing its forty-seventh plugin at 2 AM

The Improvements That Mattered

Some of Vim’s additions to vi were genuine improvements:

These are the improvements that justified the “Improved” in the name. They made vi better at editing text, which is what vi is for.

The Improvements That Didn’t

And then there were the others:

The plugin language is horrible. This is not an opinion. This is an observation shared by everyone who has written Vimscript, including — one suspects — Bram Moolenaar himself, who created Vim9 script as a tacit acknowledgment that the first attempt had not gone well.

“I once tried to write a Vimscript function. After forty minutes I had produced something that worked, that I could not read, and that I would never be able to modify. I pushed it to a repository and marked it ‘do not touch.’ It has been running unchanged for six years. I am afraid of it.”
riclib, on the Vimscript experience

The .vimrc Arms Race

No one should be allowed near a terminal without Vim knowledge. This is a fact. The modal editing model, the motion grammar (d3w — delete three words; ci" — change inside quotes; gqap — reformat paragraph), the composability of commands — these are not editor features, they are a language for manipulating text, and a developer who does not speak this language is typing with mittens.

But the .vimrc is where the knowledge goes to die.

A developer learns Vim. The developer discovers plugins. The developer installs a plugin manager (Vundle, then Pathogen, then vim-plug, then Packer, then whatever came next — the plugin managers have their own lineage, their own wars, their own archaeology). The developer installs plugins for file finding, for fuzzy matching, for git integration, for status lines, for colour schemes, for bracket matching, for snippet expansion, for language servers, for debugging, for terminal integration.

The developer’s .vimrc grows. Fifty lines. A hundred. Two hundred. The developer begins organizing the .vimrc into sections with comments. The developer splits the .vimrc into multiple files. The developer creates a dotfiles repository. The developer spends a Saturday afternoon reorganizing the dotfiles repository.

The developer has not edited a file in four hours.

“The .vimrc is not a configuration file. The .vimrc is an autobiography. Show me your .vimrc and I will tell you what year you started, which plugins you regret, and exactly when you gave up trying to make Vimscript do what you wanted and switched to a shell command.”
— A Passing AI, reading dotfiles repositories at 3 AM

The De Facto Standard

For decades, Vim was the de facto terminal editor. Not because it was the best — “best” is a religious question in editor discussions and has caused more sustained conflict than most actual religions — but because it was everywhere. Every Linux server had vi, and vi was usually Vim. Every SSH session started with Vim available. Every sysadmin, every DevOps engineer, every developer who touched a remote machine typed vim and the editor appeared and the muscle memory engaged.

This ubiquity created a generation of developers whose fingers think in Vim. They press Escape in web forms. They type :w in Google Docs. They press j and k to scroll in applications that do not support j and k to scroll, and they are briefly and genuinely confused when the application does not respond. Their fingers have been trained by a modal editor, and the training is permanent, and the fingers do not know they are not in Vim.

Every modern editor — VS Code, Zed, Neovim, even Emacs — offers a Vim keybinding mode. This is not a tribute. This is an admission that Vim’s interface was right, even if everything around it grew complicated.

Bram

Bram Moolenaar maintained Vim for thirty-two years. He died on August 3, 2023. He was sixty-two.

The editor is maintained by the community now. But Vim is Bram’s. Every keystroke in Vim is a keystroke in the editor Bram built, maintained, and gave away for free for three decades. The software world has no shortage of open-source maintainers, but Bram was one of the quiet ones — the ones who do not keynote conferences or build personal brands but simply maintain the thing, year after year, because the thing needs maintaining and they are the ones who maintain it.

Measured Characteristics

Year created:                            1991
Creator:                                 Bram Moolenaar (1961–2023)
Based on:                                vi (1976)
Scripting language:                      Vimscript (horrible)
Replacement scripting language:          Vim9 script (less horrible, too late)
Average .vimrc length (beginner):        10 lines
Average .vimrc length (intermediate):    150 lines
Average .vimrc length (advanced):        400+ lines, split across 6 files
Time spent configuring vs editing:       approaching 1:1 for power users
Plugin managers that have existed:       at least 6
Developers with permanent Vim muscle memory: millions
Developers who type :w in other applications: all of them
Improvements that mattered:              syntax highlighting, visual mode, splits, undo tree
Improvements that spiralled:             everything after the plugin system
The plugin language:                     horrible (this is not controversial)

See Also