- The VI Pages Latest Change: Thu Jan 01 01:00:00
__   __ ___
\ \ / /|_ _|
 \ V /  | |
  \_/  |___|
and many more!
HOME -- | Answers | Availability | Books | Bugs | Clones | Definition | Docs | History | Press | Quotes -- Clones: HomePages -- More than Text: Buttons | Pictures -- This+That: Folklore | Merchandise -- Meta Pages: Credits | Mirrors | News | Todo -- Special Pages: | Intro | Signatures | Substitution Guide | Unix Distributions | War (Holy)

Vi Pages - Definition - vi, Vi, VI

As there are quite some clones of Vi about many users do not realize which version they are using, although the command :version should show them. However, this requires a definition about when to use "vi", "Vi", or "VI" in your texts - especially on the Usenet in the newsgroup comp.editors and others.

Vi is a Text Editor

What is Vi? Well, in short - Vi is an "editor", ie a program that allows to "edit" (making changes to) files. These files usually are files containing "text" (ASCII 000-127). Hence VI is referred to as a "text editor", even though you can also edit "binary files" (which include characters with the highest bit set, ie characters ASCII 128-255).

Vi Clones

Vi has been a standard editor on Unix systems for many years now. Now there are several programs which incorporate the command structure of this editor and which all add features that you probably have wanted with Vi all along; these are the "clones".


There is also a definiton by the "POSIX standard", but many programs which claim to be "vi" are "clones" which more or less do standard Vi (whatever that is). Usually vi clones come with lots of (non-compatible) add-ons, but which usually are an improvement.

As ex/vi is part of the POSIX 1003.2 specification for shell utilities, you can say they are "standard" in more that just a colloquial sense.

Jargon File Definition

And then there is the "Jargon File on vi": vi: /V-I/, *not* /vi/ and *never* /siks/ n. [from `Visual Interface'] A screen editor crufted together by Bill Joy for an early {BSD} release. Became the de facto standard UNIX editor and a nearly undisputed hacker favorite outside of MIT until the rise of {EMACS} after about 1984. Tends to frustrate new users no end, as it will neither take commands while expecting input text nor vice versa, and the default setup provides no indication of which mode the editor is in (one correspondent accordingly reports that he has often heard the editor's name pronounced /vi:l/). Nevertheless it is still widely used (about half the respondents in a 1991 Usenet poll preferred it), and even EMACS fans often resort to it as a mail editor and for small editing jobs (mainly because it starts up faster than the bulkier versions of EMACS). See {holy wars}.

Development History

In article in the Linux Magazine, November 1999 Bill Joy says that vi evolved from the editor "ed", then via "em" to "ex" and "you've got to remember that I was trying to make it usable over a 300 baud modem. That's also the reason you have all these funny commands. [...] So the editor was optimized so that you could edit and feel productive when it was painting slower than you could think."

Bill Joy then added the code that changed the editor "ex" to "vi". (You can still switch from vi to ex with the command "Q", and back again with command "vi". Try it!)


Due to the non-compatibility of the various vi clones I will try to maintain the following terminology throughout these pages and also when posting info to newsgroups, especially "comp.editors":

vi            the program "vi" on your current system (might be nvi or vim)
Vi            the "standard vi" (whatever that is ;-)
VI            any vi or clone thereof aka "all versions of vi"

vim           the program "vim" on your current system
Vim           Vi IMproved - a truly great vi clone with many improvements
VIM           any version of Vim

Vim-5.8       Vim - user      release
Vim-6.0w      Vim - developer release - ALPHA version
Vim-6.1.153   Vim - developer release - BETA  version with patch number

Sven Guckes <> HOME Mirrors: AU | CA | ZA add mirror?