The Emacs vs vi debate was one of the original "holy wars" conducted on Usenet groups, with many flame wars fought between those insisting that their editor of choice is the paragon of editing perfection, and insulting the other, since at least 1985. Related battles have been fought over operating systems, programming languages, version control systems, and even source code indent style. Notably, unlike other wars (ie, UNIX vs ITS vs VMS, C vs Pascal vs Fortran), the editor war has yet to be resolved with a clear winner, and the hacker community remains split roughly 50/50.
Differences between vi and Emacs
The most important differences between vi and Emacs are presented in the following table:
|Keystroke execution||vi retains each permutation of typed keys. This creates a path in the decision tree which unambiguously identifies any command.||Emacs commands are key combinations for which modifier keys are held down while other keys are pressed; a command gets executed once completely typed. This still forms a decision tree of commands, but not one of individual keystrokes. A vim-inspired Emacs package (undo-tree) provides a user interface to the tree.|
|Memory usage and customizability||vi is a smaller and faster program, but with less capacity for customization. The vim version of vi has evolved to provide significantly more functionality and customization than vi, making it comparable to Emacs[notes 1]. vi start-up time is near instantaneous for small text files, while vim is almost as fast.||Emacs executes many actions on startup, many of which may execute arbitrary user code. This makes Emacs take longer to start up (even compared to vim) and require more memory. However, it is highly customizable and includes a large number of features, as it is essentially an execution environment for a Lisp program designed for text-editing. Emacs 18 (released in 1987) introduced a server mode designed to run continuously in the background. Various instances of Emacs can then be started in client mode, attaching to this server and sharing state. Emacsclient startup time is practically instantaneous as all it does is provoke the existing Emacs process to redraw the display.|
|User environment||vi was originally exclusively used inside of a text-mode console, offering no graphical user interface (GUI). Most modern vi derivatives, e.g. MacVim and gVim, include GUIs. However, support for proportionally spaced fonts remains absent. Also lacking is support for different sized fonts in the same document.||Emacs, while also initially designed for use on a console, grew a TUI fairly early on due to its Lisp machine heritage. X11 GUI support was added in Emacs 18, and made the default in version 19. Current Emacs GUIs include full support for proportionate spacing and font-size variation. Emacs also supports embedded images and hypertext.|
|Function/navigation interface||vi uses distinct editing modes. Under "insert mode", keys insert characters into the document. Under "normal mode" (also known as "command mode"), bare keypresses execute vi commands.||Emacs uses metakey chords.[notes 2] Keys or key chords can be defined as prefix keys, which put Emacs into a mode where it waits for additional key presses that constitute a key binding. Key bindings can be mode-specific, further customizing the interaction style. Emacs provides a command line accessed by M-x that can be configured to autocomplete in various ways. Emacs also provides a defalias macro, allowing alternate names for commands.|
|Keyboard||vi uses no <Alt> key and seldom uses the <Ctrl> key. vi's keyset is mainly restricted to the alphanumeric keys, and the escape key. This is an enduring relic of its teletype heritage, but has the effect of making most of vi's functionality accessible without frequent awkward finger reaches.||The expansion of one of Emacs' backronyms is Escape, Meta, Alt, Control, Shift, which neatly summarizes most of the modifier keys it uses, only leaving out Super. Emacs was developed on Lisp Machines with Space-cadet keyboards that were more ergonomic with respect to modifiers than modern layouts. There are multiple emacs packages, such as spacemacs or ergoemacs that replace these key combinations with ones easier to type, or customization can be done ad hoc by the user.|
|Language and script support||vi has rudimentary support for languages other than English. Vim is partially multilingual, with support for European, Arabic, Hebrew, and Far East Asian language support only. Notably, Indic language and script support is absent.||Emacs has full support for all Unicode-compatible writing systems and allows multiple scripts to be freely intermixed.|
Benefits of Emacs
- Emacs has a non-modal interface
- One of the most ported computer programs. It runs in text mode and under graphical user interfaces on a wide variety of operating systems, including most Unix-like systems (Linux, the various BSDs, Solaris, AIX, IRIX, OS X etc.), MS-DOS, Microsoft Windows, AmigaOS, and OpenVMS. Unix systems, both free and proprietary, frequently provide Emacs bundled with the operating system.
- Emacs server architecture allows multiple clients to attach to the same Emacs instance and share the buffer list, kill ring, undo history and other state.
- Pervasive online help system with keybindings, functions and commands documented on the fly.
- Extensible and customizable Lisp programming language variant (Emacs Lisp), with features that include:
- Ability to emulate vi and vim (using Evil, Viper or Vimpulse).
- A powerful and extensible file manager (dired), integrated debugger, and a large set of development and other tools.
- Having every command be an Emacs Lisp function enables commands to DWIM (Do What I Mean) by programmatically responding to past actions and document state. For example, a
switch-or-split-windowcommand could switch to another window if one exists, or create one if needed. This cuts down on the number of keystrokes and commands a user must remember.
- "An OS inside an OS". Emacs Lisp enables Emacs to be programmed far beyond editing features. Even a base install contains several dozen applications, including two web browsers, news readers, several mail agents, four IRC clients, a version of ELIZA, and a variety of games. All of these applications are available anywhere Emacs runs, with the same user interface and functionality. Starting with version 24, Emacs includes a package manager, making it easy to install additional applications including alternate web browsers, EMMS (Emacs Multimedia System), and more. Also available are numerous packages for programming, including some targeted at specific language/library combinations or coding styles.
Benefits of vi-like editors
- Edit commands are composable
- Vi has a modal interface (which Emacs can emulate)
- Historically, vi loads faster than Emacs.
- While deeply associated with UNIX tradition, it runs on all systems that can implement the standard C library, including UNIX, Linux, AmigaOS, DOS, Windows, Mac, BeOS, OpenVMS, IRIX, AIX, HP-UX, BSD and POSIX-compliant systems.
- Extensible and customizable through VimScript or APIs for interpreted languages such as Python, Ruby, Perl, and Lua
- Ubiquitous. Essentially all Unix and Unix-like systems come with vi (or a variant) built-in. Vi (and ex, but not vim) is specified in the POSIX standard.
- System rescue environments, embedded systems (notably those with busybox) and other constrained environments often include vi, but not emacs.
The Church of Emacs, formed by Emacs and the GNU Project's creator Richard Stallman, is a parody religion. While it refers to vi as the "editor of the beast" (vi-vi-vi being 6-6-6 in Roman numerals), it does not oppose the use of vi; rather, it calls proprietary software anathema. ("Using a free version of vi is not a sin but a penance.") The Church of Emacs has its own newsgroup, alt.religion.emacs, that has posts purporting to support this belief system.
Supporters of vi have created an opposing Cult of vi, argued by the more hardline Emacs users to be an attempt to "ape their betters".
Regarding vi's modal nature (a point of extreme frustration for new users) some Emacs users joke that vi has two modes – "beep repeatedly" and "break everything". vi users enjoy joking that Emacs's key-sequences induce carpal tunnel syndrome, or mentioning one of many satirical expansions of the acronym EMACS, such as "Escape Meta Alt Control Shift" (a jab at Emacs's reliance on modifier keys). or "Eight Megabytes And Constantly Swapping" (in a time when that was a great amount of memory) or "EMACS Makes Any Computer Slow" (a recursive acronym like those Stallman uses) or "Eventually Munches All Computer Storage", in reference to Emacs's high system resource requirements. GNU EMACS has been expanded to "Generally Not Used, Except by Middle-Aged Computer Scientists" referencing its most ardent fans, and its declining usage among younger programmers compared to more graphically-oriented editors such as TextMate or Sublime Text. The Emacs distribution includes the full list.
As a poke at Emacs' creeping featurism, vi advocates have been known to describe Emacs as "a great operating system, lacking only a decent editor". Emacs advocates have been known to respond that the editor is actually very good, but the operating system could use improvement (referring to Emacs' famous lack of concurrency.)
A game among UNIX users, either to test the depth of an Emacs user's understanding of the editor or to poke fun at the complexity of Emacs, involved predicting what would happen if a user held down a modifier key (such as Control or Alt) and typed their own name. A similar "game" was reportedly played among users of the old TECO editor, in which lay the roots of Emacs.
Due to the unintuitive character sequence to exit vi (":qa!"), hackers joke that there is a proposed method of creating a pseudorandom character sequence by having a user unfamiliar with vi seated in front of an open editor and asking them to exit the program.
In the past, many small editors modeled after or derived from vi flourished. This was due to the importance of conserving memory with the comparatively minuscule amount available at the time. As computers have become more powerful, many vi clones, Vim in particular, have grown in size and code complexity. These vi variants of today, as with the old lightweight Emacs variants, tend to have many of the perceived benefits and drawbacks of the opposing side. For example, Vim without any extensions requires about ten times the disk space required by vi, and recent versions of Vim can have more extensions and run slower than Emacs. In The Art of Unix Programming, Eric S. Raymond called Vim's supposed light weight when compared with Emacs "a shared myth." Moreover, with the large amounts of RAM in modern computers, both Emacs and vi are lightweight compared to large integrated development environments such as Eclipse, which tend to draw derision from Emacs and vi users alike.
Tim O'Reilly said, in 1999, that O'Reilly Media's tutorial on vi sells twice as many copies as that on Emacs (but noted that Emacs came with a free manual). Many programmers use either Emacs and vi or their various offshoots, including Linus Torvalds who uses MicroEMACS. Also in 1999, vi creator Bill Joy said that vi was "written for a world that doesn't exist anymore" and stated that Emacs was written on much more capable machines with faster displays so they could have "funny commands with the screen shimmering and all that, and meanwhile, I'm sitting at home in sort of World War II surplus housing at Berkeley with a modem and a terminal that can just barely get the cursor off the bottom line."
In addition to Emacs and vi workalikes, pico and its free and open source clone nano and other text editors such as ne often have their own third-party advocates in the editor wars, though not to the extent of Emacs and vi.
As of 2014, both Emacs and vi can lay claim to being among the longest-lived application programs of all time, as well as being the two most commonly used text editors on Linux and Unix. Many operating systems, especially Linux and BSD derivatives, bundle multiple text editors with the operating system to cater to user demand. For example, a default installation of OS X contains Emacs, ed, nano, TextEdit, and Vim.
- As of 2013, vim has 1731 kLOC of code (1142 in C + 506 stock distro vimScript + 83 makefile-related), whereas GNU Emacs has 1623 (just 299 in C + 1270 stock distro Emacs Lisp + 54 makefile-related). There are many optional Emacs Lisp (and Vimscript) packages available; the numbers here refer to only code which is actually included in the main download of the respective editor.
- Emacs also has something called "modes"; however, in Emacs these generally refer to long-term interaction states that apply for entire time one works with a given file or dataset, and do not imply a modal interface per se.
- Holy War (Hacker Jargon)
- EMACS vs. vi: The endless geek 'holy war'
- "Just Let Me Code".
- "Why Coding Style Matters".
- "Never use hard tabs".
Reasons not to use hard tabs
• Due to legacy, different text editors treat hard tabs different. UNIX text editors prefer hard tab is 8 spaces, Windows text editors and IDEs (Eclipse) prefer that a hard tab is 4 spaces.
• The hard tab length agreement between different text editors cannot be reached
• The hard tab length agreement between people cannot be reached
• Thus, hard tabs may break source code readability and editability if there is more than a single person editing the file. They will open the file in an editor with different tab settings, edit it and next time you open the file it is ruined and all indentations are wrong.
• This is even worse on white space sensitive languages (Python, CoffeeScript) as this might actually cause syntax errors or programming logic errors
However, you can avoid this problem in the first place if you do indentation using soft tabs (spaces) instead.
Even if you were the single person in the world editing the text file, even you might switch the text editor in some point and accidentally shoot yourself in the leg.
The only downside to this more advanced yet simpler undo system is that it was inspired by Vim. But, after all, most successful religions steal the best ideas from their competitors!
- "The GNU Emacs Open Source Project on Open Hub : Languages Page". Ohloh.net. Retrieved 1 December 2014.
- "The Vim Open Source Project on Open Hub : Languages Page". Ohloh.net. Retrieved 1 December 2014.
- "Startup Summary".
Programs such as mailers that invoke "the editor" as an inferior to edit some text can now be told to use an existing Emacs process instead of creating a new editor.
All fonts used, except for Menu and Tooltip, should be of the same character size as the default font! Otherwise redrawing problems will occur.
- "EmacsWiki: Category Modes". Emacswiki.org. Retrieved 1 December 2014.
- "International Chars".
Internally, Emacs uses its own multibyte character encoding, which is a superset of the Unicode standard. This internal encoding allows characters from almost every known script to be intermixed in a single buffer or string. Emacs translates between the multibyte character encoding and various other coding systems when reading and writing files, and when exchanging data with subprocesses.
- "Carbon Emacs Package". Retrieved 2006-09-27.
- "Aquamacs is an easy-to-use, Mac-style Emacs for Mac OS X". Retrieved 2006-09-27.
- B, Ramprasad (2005-06-24). "GNU Emacs FAQ For Windows 95/98/ME/NT/XP and 2000". Retrieved 2006-09-27.
- Borgman, Lennart (2006). "EmacsW32 Home Page". Retrieved 2006-09-27.
- "GNU Emacs on Windows". Franz Inc. 2006. Retrieved 2006-09-27.
- "Evil - Home - Open wiki". gitorious.org. May 29, 2014. Archived from the original on September 16, 2014. Retrieved September 16, 2014.
- Kozlowski, Mike. "Why Atom Can't Replace Vim". Retrieved 7 May 2014.
- "Ed, man! !man ed". Gnu.org. Retrieved 1 December 2014.
- "Rules, Sins, Virtues, Gods and more of The Church of Emacs". Gnu.org. Retrieved 1 December 2014.
- "Saint IGNUcius - Richard Stallman". Stallman.org. Retrieved 1 December 2014.
- "The unabridged selective transcript of Richard M Stallman's talk at the ANU". Linuxhelp.blogspot.com. Retrieved 1 December 2014.
- "Saint IGNUcius - Richard Stallman". Stallman.org. Retrieved 1 December 2014.
- vi (Hacker Jargon)
- "satirical expansions of EMACS". Gnu.org. Retrieved 1 December 2014.
- Eric S. Raymond (2004). The art of Unix programming. Addison-Wesley Professional. p. 343. ISBN 978-0-13-142901-7. Retrieved 17 December 2011.
- "Real Programmers Don't Use PASCAL". Datamation: 263–265. July 1983.
- "The Right Size for an Editor". Catb.org. Retrieved 1 December 2014.
- "Editor: vi or emacs?". Oreilly.com. 21 June 1999. Retrieved 1 December 2014.
- Jarosław Rzeszótko. "Stifflog: Stiff asks, great programmers answer". Stifflog.com. Archived from the original on 8 November 2006. Retrieved 1 December 2014.
- Vance, Ashlee (September 11, 2003). "Bill Joy's greatest gift to man – the vi editor". theregister.co.uk. Archived from the original on June 3, 2014. Retrieved June 3, 2014.
- Joy, Bill (November 1999). "The Joy of Unix: Sun Microsystems Co-Founder Bill Joy Charts Where Linux and Free Software Fit Into His Company's Solar System.". Linux Magazine (Interview). Interview with Eugene Eric Kim. Archived from the original on February 7, 2003. Retrieved June 3, 2014.
- "The Oldest Rivalry in Computing".
two rival programs can stake a claim to being among the longest-lived applications of all time. Both programs are about to enter their fifth decades. Both programs are text editors, for inputting and editing code, data files, raw HTML Web pages, and anything else. And they are mortal enemies.
- "Choosing an Editor".
these two editors express sharply contrasting design philosophies, but both are extremely popular and command great loyalty from identifiable core user populations. Surveys of Unix programmers consistently indicate about a 50/50 split between them, with all other editors barely registering.
- Results of an experiment comparing Vi and Emacs
- Comparing keystrokes per task
- Humor around Vi, Emacs and their comparisons
- Results of the Sucks-Rules-O-Meter for Vi and Emacs from comments made on the Web
- In the Church of Emacs "using a free version of vi is not a sin, it's a penance."
- Emacs offers Vi functionality, from the Emacs wiki
- Emacs Vs Vi, from WikiWikiWeb
- The Right Size for an Editor discussing vi and Emacs in relatively modern terms