Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Vim is not simply a keyboard-controlled version of a conventional editor. Its normal mode treats editing as a composable command language: you combine an operation, a count, a motion or text object, and then repeat the result. That design can make repetitive changes remarkably efficient, but it also creates a steep learning curve. Elliot Williams’s August 8, 2016 Hackaday article makes a case for understanding that model rather than treating Vim as a contest entry in the old vi-versus-Emacs debate.

What Williams means by calling Vim a language

In a conventional editor, typing and editing usually happen through the same interaction style. Vim separates them into modes:

  • Insert mode is for entering text. You type characters, words and lines much as you would elsewhere.
  • Normal mode is for editing. Keystrokes move the cursor, delete or change text, search, paste, record macros and invoke other operations.

Williams describes the distinction this way: “Vi is something else. It’s a programming language for editing text that’s disguised as an editor.” The point is not that every keystroke is mysterious; it is that normal-mode commands can be combined according to a consistent grammar.

Verbs, modifiers and objects

A change command such as c is an operation. A count changes how many times it applies, and a motion or text object specifies the text it should affect. For example:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • caw means “change a word,” including the surrounding word boundary selected by the aw text object.
  • ci) means “change inside parentheses,” leaving the parentheses themselves in place.
  • c5w means “change the next five words.”

After the command completes, Vim enters Insert mode so you can type the replacement. Press Esc to return to Normal mode and issue another editing command.

Why modes can help with repetitive edits

Williams’s argument is that typing new prose is mostly just typing, while editing often consists of repeated, structured actions. A modal editor reserves Normal mode for those actions instead of requiring a separate shortcut for every variation.

The dot command

Pressing . repeats the last complete editing action. A practical sequence is:

  1. Use a search such as /oldName to find the first occurrence.
  2. Perform one transformation, for example a change or deletion.
  3. Press n to move to the next match.
  4. Press . to apply the same transformation there.

The search movement and the edit remain separate: the search finds the next location, while . replays the edit. This is useful when the same change appears many times but still needs a human check at each match.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Counts, motions and text objects

Counts let one command scale without creating a new shortcut. Motions can move by characters, words, sentences or structural locations; text objects describe units such as a word, quoted string or parenthesized region. Once learned, the same editing verb can operate on each of those targets.

Command-line mode for document-wide operations

Vim’s command-line mode begins with : and is suited to operations that address a file or a range rather than the current cursor position.

Rank #3

Confirmed substitution

:%s/one/two/gc searches the entire file (%) and substitutes two for one. The g flag handles multiple matches on a line, and c asks for confirmation before each replacement. Confirmation is important when the same text can appear in different contexts.

Save and quit

:wq writes the file and quits. Keeping this command in command-line mode reinforces the division between editing text and controlling the document or session.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Shell and file insertion commands

  • :r reads a file into the current buffer.
  • :! runs a shell command.
  • :r! runs a shell command and inserts its output at the cursor.

These commands connect the buffer to ordinary command-line tools without requiring a separate copy-and-paste workflow.

Registers and macros: storing text and actions

Registers

Registers are named storage locations. Deleted or yanked text can be placed in a register and pasted later; registers can also hold recorded command sequences. This gives Vim more deliberate storage than a single undifferentiated clipboard.

Recording and replaying a macro

  1. Press q followed by a register name, such as qq, to start recording into register q.
  2. Perform the Normal-mode commands you want to automate.
  3. Press q again to stop recording.
  4. Press @q to replay the macro. Repeat it with @@ for the most recently executed macro.

Macros are powerful because they capture a sequence, not merely one replacement. They are best used after testing the sequence on a small number of lines; an incorrectly targeted macro can repeat the wrong action quickly.

A compact tour of useful commands

Command Purpose
I Enter Insert mode at the beginning of the line.
A Enter Insert mode at the end of the line.
u Undo the most recent change.
CTRL-r Redo an undone change.
/pattern Search forward for a pattern.
f{character} Move to the next occurrence of a character on the line.
gg=G Reindent the entire file using Vim’s indentation rules.
g; Jump to an earlier change location.
CTRL-] Follow a tag or help link under the cursor.
CTRL-t Return through the tag stack after following a tag.
CTRL-n and CTRL-p Move through insert-mode completion suggestions.

These commands are building blocks, not a list to memorize in one sitting. Their value increases when combined with motions, counts, registers and ..

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How to learn Vim without drowning in commands

  1. Start the built-in tutorial. From Vim, run :help tutor. It provides a guided introduction inside the editor.
  2. Learn the mode transition first. Practice entering Insert mode, pressing Esc, moving in Normal mode and undoing with u.
  3. Add a small command grammar. Learn one or two operators such as d (delete) and c (change), then pair them with familiar motions and text objects.
  4. Practice repetition deliberately. Use search, make one change, move to the next match and use .. Later, record a short macro.
  5. Keep a recovery habit. Use u and CTRL-r, and test substitutions with the confirmation flag before accepting every match.
  6. Delay a large plugin setup. Williams recommends learning the core editor before installing a large collection of extensions. The historical article mentions shell integration, vi-style Bash Readline mode, browser extensions and Vim-style browsers; those examples date from 2016 and should not be read as a guarantee of current availability.

Williams characterizes mastery as continuing practice rather than a course that can simply be completed. His personal account—five years of Vim use at six to eight hours a day in 2016—is autobiographical, not a measurement of typical users.

Is Vim really better than Emacs?

There is no controlled benchmark or current product comparison in Williams’s article, so “better” depends on the work and the user. The useful distinction is the interaction model:

Axis Vim’s approach What the article establishes about alternatives
Interaction Modal: Insert mode types; Normal mode edits. Emacs is presented only as the contrasting, mostly non-modal tradition; no detailed current comparison is supplied.
Command composition Operators combine with counts, motions and text objects. No equivalent feature-by-feature analysis is provided.
Repetitive edits ., searches, registers and macros target repeated transformations. No benchmark establishes that Vim is faster for every workflow.
Discoverability High initial memorization cost; the mode distinction is unfamiliar to many beginners. The article does not score discoverability for Emacs or other editors.
Extensibility Plugins and integrations can extend the model. The article does not compare current plugin ecosystems.
Learning curve Steep at first, with benefits that grow through practice. No population study or completion-time statistic is supplied.

Choose Vim when composing small commands and repeating precise transformations fits your work and you are willing to practice. Choose another editor when immediate discoverability, a mostly non-modal workflow or a different extension model matters more. The evidence here supports a design explanation, not a universal winner.

What the 2016 article can—and cannot—prove

Elliot Williams’s Hackaday article was published on August 8, 2016. It is an opinionated tutorial and defense of Vim, not a current benchmark, user survey or independent study. Its strongest lesson remains conceptual: Vim separates typing from editing and gives Normal mode a composable grammar. Whether that grammar improves your work depends on the kinds of changes you make and the practice you are prepared to invest.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.