Est. 1991 Intermediate

Vim

Bram Moolenaar's "Vi IMproved" — the 1991 vi clone that outgrew its original, adding multi-level undo, syntax highlighting, plugins, and its own scripting language while keeping vi's modal grammar, and becoming the standard vi of Linux and macOS.

Created by Bram Moolenaar

Paradigm Modal editing; imperative/scripting via Vim script and Vim9 script
Typing Vim script is dynamically typed; Vim9 script adds compile-time type checking with type annotations
First Appeared 1991
Latest Version Vim 9.2 (February 2026)

Vim (“Vi IMproved”) is the most successful descendant of Bill Joy’s vi — a free, cross-platform, modal text editor created by Dutch programmer Bram Moolenaar and first released for the Amiga on November 2, 1991. What began as a hobbyist’s vi imitation grew, over three decades of continuous development, into one of the most widely used programming editors in the world: the default vi on most Linux distributions and macOS, the subject of one of open source’s largest plugin ecosystems, and the host of its own scripting language, Vim script. More than a program, Vim became the standard-bearer for modal editing itself — when developers speak of “Vim keybindings” in VS Code, JetBrains IDEs, or a web app, they are speaking Vim’s dialect of vi’s grammar.

History & Origins

An Amiga without vi

In 1988 Bram Moolenaar bought a Commodore Amiga, only to find that the editor he used at work — vi — didn’t exist for it. Among the free vi clones circulating at the time was Stevie (“ST Editor for VI Enthusiasts”), written by Tim Thompson for the Atari ST and ported to the Amiga by Tony Andrews. Moolenaar took the Stevie port as his starting point and began improving it: fixing bugs, filling in missing vi commands, and adding features vi never had, most importantly multi-level undo (vi could only undo one change).

Version 1.14 — the first public release, then standing for “Vi IMitation” — was released on November 2, 1991 and reached Amiga users via Fred Fish’s freely distributable disk #591. A Unix port followed, and with Vim 2.0 in December 1993 the name’s expansion officially changed to “Vi IMproved”: the imitation had overtaken the original.

Charityware

Vim’s license is one of the most distinctive in open source. It is free software (GPL-compatible), but it is also charityware: the license and the editor’s :help uganda documentation ask users who enjoy Vim to consider donating to help children in Uganda. Moolenaar had volunteered at the Kibaale Children’s Centre in southern Uganda in the 1990s and founded the ICCF Holland foundation to support it; Vim’s popularity funneled decades of donations to the project, and the community has continued this charitable mission — more recently through the Kuwasha organization — since his death.

Design Philosophy

Keep vi’s grammar, remove vi’s limits

Vim’s core bet was that vi’s modal command language — operators (d, c, y) composed with motions (w, $, /pattern) and counts, so that d2w deletes two words — was worth preserving exactly, while everything around that grammar could be modernized. Vim kept compatibility with vi’s commands (and for years defaulted to a compatible mode) but layered on what 1970s hardware had made impossible:

  • Multi-level undo with, since Vim 7, a full undo tree of branching history
  • Multiple windows and tab pages, including vertical splits
  • Syntax highlighting for hundreds of file types
  • Text objectsdiw (delete inner word), ci" (change inside quotes) — extending vi’s grammar itself
  • Visual mode for selecting text by character, line, or block
  • Registers, macros (q), marks, and sessions for repeatable, resumable work
  • Comprehensive built-in documentation (:help), plus the vimtutor interactive tutorial

An editor you program

The second bet, made explicit when Vim 5.0 added scripting in 1998, was that an editor should be extensible in its own language. Vim script (also called VimL) lets users and plugin authors automate anything the editor can do:

1
2
3
4
5
6
7
8
" Legacy Vim script
function! TrimTrailingWhitespace() abort
  let l:save = winsaveview()
  keeppatterns %s/\s\+$//e
  call winrestview(l:save)
endfunction

autocmd BufWritePre * call TrimTrailingWhitespace()

Vim script is dynamically typed and famously idiosyncratic, but it powered an enormous ecosystem: plugin managers, fuzzy finders, git integrations, and language tooling, distributed for decades through vim.org and later GitHub. Vim9 script, introduced with Vim 9.0 in 2022, is a redesigned dialect — compiled rather than interpreted, with def functions, type annotations, and compile-time checking — that executes much faster than legacy script (the project’s documentation cited expected speedups of roughly 10 to 100 times for compiled functions versus legacy script, achieved by compiling functions instead of re-parsing lines):

1
2
3
4
5
vim9script
def Greet(name: string): string
  return $'Hello, {name}!'
enddef
echo Greet('World')

Legacy and Vim9 script coexist; Vim 9.1 added classes and objects, and Vim 9.2 added enums, generic functions, and tuples, turning what began as macro glue into a genuine, if niche, programming language.

Evolution

Vim’s major releases trace a steady expansion from vi clone to programmable editing platform:

VersionDateHeadline features
1.14Nov 1991First public release (Amiga), “Vi IMitation”
2.0Dec 1993Renamed “Vi IMproved”
3.0Aug 1994Multiple windows
4.0May 1996GUI (gvim)
5.0Feb 1998Syntax highlighting, basic Vim script
6.0Sep 2001Folding, plugin architecture, multi-language support
7.0May 2006Spell check, omni completion, tab pages, undo branches
8.0Sep 2016Async I/O, jobs, channels, timers, lambdas, packages
8.2Dec 2019Popup windows, text properties
9.0Jun 2022Vim9 script
9.1Jan 2024Vim9 classes and objects, smooth scrolling
9.2Feb 2026Vim9 enums, generics, tuples; experimental Wayland support, XDG support

The Neovim fork

By the early 2010s, Vim’s aging C codebase and conservative pace frustrated some contributors. In 2014 Neovim launched as a fork with an explicit agenda: refactor the core, make plugins asynchronous and remotely scriptable, and embed Lua as a first-class configuration language. The fork proved healthy for both projects — Vim 8.0’s async jobs and channels arrived in 2016, the first major Vim release in a decade — and today Vim and Neovim advance in parallel, sharing vi’s grammar and much of Vim’s runtime while serving different tastes: Vim prioritizing stability, portability, and Vim9 script; Neovim prioritizing Lua, built-in LSP, and rapid iteration.

After Bram

Bram Moolenaar led Vim as its benevolent dictator for life for over thirty years, personally reviewing essentially every patch. His death on August 3, 2023, at age 62, was mourned across the software world and raised real questions about the project’s future. The community answer came quickly: longtime contributor Christian Brabandt and a team of maintainers took over the repository, and the releases since — Vim 9.1 in 2024, dedicated to Bram, and the feature-rich Vim 9.2 in 2026 — demonstrated that the project could outlive its founder.

Current Relevance

Vim in 2026 is simultaneously infrastructure and enthusiasm. As infrastructure, it is simply there: the vi command on most Linux systems resolves to Vim or a minimal build of it, macOS ships it in the base system, and anyone administering servers over SSH will meet it. As enthusiasm, it remains a top-tier developer editor by choice: developer surveys consistently place Vim (and increasingly Neovim) among the most-used editors, its plugin ecosystem remains active, and its editing model keeps spreading through emulation — the VS Code Vim extension alone counts millions of installs. Development is active under the post-Bram maintainer team, with Vim 9.2’s Vim9 language work, experimental Wayland support, and XDG-aware configuration showing a project still evolving rather than merely maintained.

Why It Matters

Vim settled an argument that vi started: that modal, composable, keyboard-only editing is not a relic of slow terminals but a durable local optimum that developers will voluntarily climb a steep learning curve to reach. It proved that a lone programmer’s free-time clone could become more important than the commercial original, that an editor could be a programmable platform a decade before “extensions marketplace” was a phrase, and that open source could fund humanitarian work through nothing more coercive than a :help uganda screen. Its influence is everywhere its name appears — Neovim, IdeaVim, “vim mode” — and in younger modal editors like Kakoune and Helix that treat Vim as the tradition to build on or argue with. Few pieces of software have been both a universal default and a lifelong personal craft; Vim, thirty-five years on, is still both.

Timeline

1988
Bram Moolenaar, wanting a vi-like editor for his new Amiga, begins extending Tony Andrews' Amiga port of Tim Thompson's Stevie vi clone — the codebase that grows into Vim
1991
Vim 1.14, the first public release of "Vi IMitation," is released on November 2, 1991 and distributed to Amiga users via Fred Fish disk #591
1993
Vim 2.0 is released in December 1993 — the first release under the name "Vi IMproved," acknowledging that Vim's features had grown beyond a mere clone of vi
1994
Vim 3.0 (August 1994) adds support for multiple windows, a headline departure from single-view vi
1996
Vim 4.0 (May 1996) introduces the graphical user interface, gvim
1998
Vim 5.0 (February 1998) adds syntax highlighting and basic scripting — the beginnings of Vim script and the plugin culture built on it
2001
Vim 6.0 (September 2001) brings code folding, a plugin architecture, vertical splits, and multi-language support
2006
Vim 7.0 (May 2006) adds spell checking, omni (insert-mode code) completion, tab pages, and undo branches
2014
Neovim, a community fork aimed at refactoring Vim's codebase and adding first-class async and Lua support, launches with a successful crowdfunding campaign
2016
Vim 8.0 (September 2016), the first major release in ten years, adds asynchronous I/O, jobs, channels, timers, lambdas, and native package support
2019
Vim 8.2 (December 2019) adds popup windows and text properties, enabling richer plugin UIs inside the terminal
2022
Vim 9.0 (June 28, 2022) introduces Vim9 script, a redesigned, compiled scripting language built to execute much faster than legacy Vim script
2023
Bram Moolenaar dies on August 3, 2023 at age 62; longtime contributor Christian Brabandt and the community take over maintenance of the project
2024
Vim 9.1 (January 2, 2024), dedicated to Bram Moolenaar, adds classes and objects to Vim9 script along with smooth scrolling
2026
Vim 9.2 (February 14, 2026) brings enums, generic functions, and tuples to Vim9 script, plus experimental Wayland support, XDG Base Directory support, and a modernized diff mode

Notable Uses & Legacy

Linux distributions and macOS

Vim is the vi of the modern Unix world: most major Linux distributions install it (or a small build of it) as their default vi, and macOS ships Vim in the base system, putting it on essentially every developer workstation and server.

Server and cloud administration

Because Vim (or its tiny build, vim-tiny) is reliably present on remote Linux machines, it remains the default tool for editing configuration files over SSH on servers, containers, and cloud instances where graphical editors are not an option.

Git and the Unix EDITOR convention

On many systems Vim is the fallback editor that git, crontab, visudo, and other EDITOR/VISUAL-respecting tools open for commit messages, interactive rebases, and config edits — often a user's first (involuntary) encounter with modal editing.

Vim emulation in modern IDEs

Vim's editing model is re-implemented nearly everywhere: the Vim extension is among the most-installed on the VS Code marketplace, JetBrains IDEs have IdeaVim, and Emacs has Evil mode — millions of developers use Vim's grammar without running Vim itself.

The Neovim ecosystem

Neovim, the 2014 fork, carries Vim's model into a Lua-configured, LSP-native platform, and distributions built on it (such as LazyVim) form one of the most active editor-plugin ecosystems in open source — all downstream of Vim's design and largely compatible with its runtime files.

Charityware for Uganda

Vim's license famously asks happy users to donate to help children in Uganda — for decades via Bram Moolenaar's ICCF Holland foundation and its Kibaale project, a charitable legacy the project has continued after his death.

Language Influence

Influenced By

vi ex Stevie

Influenced

Neovim Kakoune Helix

Running Today

Run examples using the official Docker image:

docker pull thinca/vim:latest

Example usage:

docker run --rm -it thinca/vim:latest
Last updated: