# Guerra degli editor

La guerra degli editor indica la rivalità tra gli editor di testo Emacs e Vi (e le sue successive incarnazioni Vim e gVim).
Si tratta di due editor entrambi molto versatili, i cui utenti hanno spesso condotto flame war su quale dei due fosse il migliore. Nella cultura informatica rappresenta uno dei vari contrasti che vedono divisi gli utenti e il nascere di flame, analogamente alla scelta tra sistemi operativi, linguaggi di programmazione, software di controllo versione o stile d'indentazione.

## Principali differenze

| | vi | Emacs |
| Input | vi memorizza le sequenze di tasti premuti, generando un albero decisionale che permette di identificare i comandi in maniera non ambigua per ogni singola pressione di tasto. I comandi Vim sono componibili. | I comandi Emacs sono combinazioni di tasti che usano dei tasti modificatori (da tenere premuti insieme agli altri tasti), e il comando viene eseguito dopo essere stato inserito completamente. Anche questa modalità forma un albero decisionale, ma non per ogni singola pressione di tasto come in vi. Un'interfaccia per albero dei comandi analoga a vi è stata implementata in un'estensione nel pacchetto undo-tree. |
| Impiego di risorse | vi è più leggero e veloce di Emacs, con tempi di caricamento più rapidi, ma ha minori possibilità di personalizzazione. Vim fornisce invece una personalizzazione molto più estesa di vi, paragonabile a Emacs. Vim 7 ha introdotto il meccanismo di autoload delle funzioni definite nei plugin, che non vengono caricate all'avvio ma solo la prima volta che l'utente le invoca, aumentando la velocità di avvio del programma. | Emacs esegue un gran numero di azioni all'avvio, che è tipicamente più lento di vi/Vim e richiede una maggiore quantità di RAM. Emacs 18 (pubblicato nel 1987) ha introdotto una modalità server che permette di far girare in background un'istanza alla quale possono connettersi più client Emacs, con un avvio più rapido degli stessi, che condividono buffer, kill ring, undo stack e altre funzionalità. |
| Scripting | Vim è estensibile e personalizzabile tramite un proprio linguaggio di programmazione, VimScript, e supporta anche l'estensione tramite altri linguaggi come Python, Ruby, Perl e Lua. | Emacs è estensibile tramite programmazione in Emacs Lisp. Essendo i comandi implementati come funzioni in Emacs Lisp, permette di implementare comandi DWIM ("Do What I Mean") in relazione allo stato dell'editor, riducendo il numero di combinazioni di tasti da premere. Ad esempio, un comando switch-or-split-window può cambiare la finestra di input se ne esiste almeno un'altra diversa da quella corrente, altrimenti può crearne una nuova. Lo scripting in Emacs Lisp consente di andare molto oltre le funzionalità di un editor di testo, creando una sorta di "OS dentro l'OS". Un'installazione base di Emacs comprende applicazioni come un file manager (dired), web browser (il proprio browser ewb.el, completamente integrato senza dipendenze esterne, e un'interfaccia per w3m), debugger integrato e numerosi altri strumenti di sviluppo, news reader, alcuni agenti di posta, due client IRC, un'implementazione di ELIZA e alcuni giochi. A partire dalla versione 24, Emacs include un gestore di pacchetti che semplifica la gestione dei componenti aggiuntivi. |
| Interfaccia utente | vi tradizionalmente aveva solo una interfaccia a riga di comando; alcuni cloni più moderni di vi, come gVim e MacVim, forniscono delle GUI, nelle quali è però carente il supporto per font con spaziatura proporzionale o che cambino dimensione nello stesso documento. | Anche Emacs è nato con una interfaccia esclusivamente a riga di comando, ma ha presto sviluppato una interfaccia testuale, eredità delle lisp machine. Emacs 18 ha aggiunto una gui per X11, divenuta predefinita con la versione 19. Le GUI attuali per Emacs hanno pieno supporto per i font con spaziatura proporzionale e di dimensione variabile, per l'ipertesto e per l'embedding di immagini. |
| Navigazione del testo | vi impiega modalità distinte per l'inserimento e la manipolazione del testo. | Emacs impiega combinazioni di tasti. Alcuni tasti o combinazioni di tasti possono essere usati come prefissi, dopo i quali Emacs attende l'input di altri tasti o combinazioni che completino il comando. |
| Tastiera | vi non usa il tasto Alt e usa in misura limitata il tasto Ctrl, con un insieme di tasti limitato principalmente a quelli alfanumerici e al tasto Esc. Questo è un'eredità delle tastiere per telescriventi, e ha anche l'effetto di rendere la maggior parte delle funzionalità di vi accessibili senza bisogno di movimenti strani delle dita per creare combinazioni di tasti complesse. | Emacs usa estensivamente i tasti modificatori Esc, Meta, Alt, Ctrl, ⇧ Maiusc e Super. È stato infatti sviluppato sulle Lisp Machine con tastiera space-cadet, nella quale il layout dei tasti modificatori era più ergonomico rispetto alle tastiere moderne. Sono stati creati alcuni pacchetti, come spacemacs e ergoemacs che sostituiscono le combinazioni complesse con altre più semplici da digitare. |
| Lingue | vi ha un supporto rudimentale per le lingue diverse dall'inglese. Vim supporta i caratteri Unicode e multibyte. | Emacs ha il completo supporto per i sistemi di scrittura compatibili con Unicode. |
| Undo/Redo | Oltre al classico stack di comandi undo/redo, Vim supporta anche un albero navigabile tramite la possibilità di creare branch, in modo che effettuando nuove operazioni dopo qualche annullamento non si perdono i comandi successivi nello storico. | In Emacs lo stesso annullamento viene considerato un comando, per cui per ripristinare un comando annullato bisogna annullare l'annullamento stesso. |
| Sistemi operativi | Pur essendo profondamente associato alla tradizione Unix, vi gira su qualsiasi sistema che abbia un'implementazione della libreria standard C, come la totalità dei sistemi Unix e Unix-like, Linux, BSD, AmigaOS, DOS, Windows, Mac, BeOS, OpenVMS, IRIX, AIX, HP-UX. È inoltre parte dello standard POSIX. Viene fornito insieme alla maggior parte dei sistemi Unix e Unix-like, ma anche in sistemi di ripristino o embedded. | Emacs supporta una varietà molto ampia di sistemi operativi, tra i quali quasi tutti i sistemi Unix-like (GNU/Linux, BSD, Solaris, AIX, IRIX, macOS etc.), MS-DOS, Microsoft Windows, AmigaOS e OpenVMS. Molti sistemi Unix forniscono Emacs preinstallato come editor di testo. |
| Emulazione dell'editor concorrente | In Vim è possibile emulare la modalità di input di Emacs con alcune estensioni, come Vimacs | Emacs ha alcuni pacchetti che consentono di emulare vi e Vim (usando Evil, Viper o Vimpulse). |

## Impiego

In passato sono nati molti editor di testo minimali ispirati a vi. Questo era giustificato dalla necessità di risparmiare più memoria possibile, che all'epoca era una risorsa molto limitata. In seguito alcuni cloni, come Vim, sono cresciuti di dimensioni puntando sull'aggiunta di funzionalità. Entrambi gli editor hanno incorporato molti vantaggi del rivale e anche alcuni svantaggi, ad esempio le versioni moderne di Vim sono dieci volte più pesanti di vi e sono più lente rispetto ad alcune vecchie versioni di Emacs. In The Art of Unix Programming, Eric S. Raymond sostiene che la leggerezza di Vim rispetto a Emacs è "un mito condiviso". Inoltre, con le grandi quantità di risorse disponibili sulle moderne macchine, sia Vim sia Emacs risultano estremamente leggeri rispetto alla maggior parte degli ambienti di sviluppo integrati.
Tim O'Reilly ha affermato nel 1999 che il suo libro Learning the vi and Vim Editors aveva venduto il doppio delle copie rispetto a quello su Emacs (osservando però che Emacs dispone anche di un suo manuale libero). Numerosi programmatori impiegano vi, Emacs o qualche loro derivato, ad esempio Linus Torvalds impiega MicroEMACS. Sempre nel 1999 Bill Joy, creatore di vi, disse che vi "era stato scritto per un mondo che non esiste più", e che Emacs era scritto per macchine più potenti e con display dalla risposta rapida ("[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.").
Oltre ai sostenitori di Emacs e vi, anche altri editor di testo come pico, il suo clone libero nano, ne e altri editor hanno una rappresentanza nella guerra degli editor, anche se non comparabile in dimensioni a quelle di vi o Emacs.
Sia Emacs sia vi sono tra i software più longevi di tutti i tempi, nonché i due editor di testo più usati in ambiente Unix e Linux. Molte distribuzioni di sistemi operativi GNU/Linux o BSD includono uno di essi o entrambi, spesso insieme ad altri editor di testo. Ad esempio, una installazione di macOS fornisce Emacs, ed, nano e Vim.

## Umorismo

La "Chiesa di Emacs", è una religione parodistica fondata da Richard Stallman. Pur riferendosi a vi come "l'editor della bestia" (essendo vi-vi-vi uguale al numero della bestia in numeri romani), non si oppone al suo uso, ma invoca l'anatema del software proprietario ("usare una versione libera di vi non è un peccato ma una penitenza"). La Chiesa di Emacs ha il suo newsgroup alt.religion.emacs, nei quali post si discute il sistema di credenze. Stallman è St IGNU−cius, un santo della Chiesa di Emacs. I sostenitori di vi hanno creato in contrapposizione il "Culto di vi", che viene visto dai seguaci della Chiesa di Emacs come un tentativo di scimmiottare le loro credenze.
A proposito della modalità di input modale di vi, gli utenti di Emacs ironizzano sostenendo che ci sono due modalità – "beep repeatedly" (allarme che suona ripetutamente) e "break everything" (rompi tutto). Gli utenti vi ironizzano sul fatto che l'uso di Emacs, con le sue combinazioni di tasti, provochi la sindrome del tunnel carpale. L'acronimo EMACS è stato ironicamente espanso in Escape Meta Alt Control Shift (per via del notevole uso di tasti modificatori), Eight Megabytes And Constantly Swapping ("otto megabyte e passando in swap costantemente", in riferimento alla sua richiesta di risorse, all'epoca in cui otto megabyte erano una quantità considerevole di memoria), EMACS Makes Any Computer Slow ("Emacs rende ogni computer lento", che è un acronimo ricorsivo, genere frequentemente usato da Stallman) o Eventually Munches All Computer Storage ("alla fine consuma tutto lo spazio di archiviazione del computer", sempre in riferimento al consumo di risorse da parte del programma). GNU EMACS è stato espanso in Generally Not Used, Except by Middle-Aged Computer Scientists ("solitamente inutilizzato, eccetto da informatici di mezza età"), in riferimento ai suoi principali utenti e sostenitori, mentre gli informatici più giovani preferiscono in genere gli ambienti di sviluppo integrati o gli editor di testo con un'interfaccia inerentemente grafica, come Atom, TextMate o Sublime Text. Emacs fornisce una lista di espansioni parodistiche dell'acronimo.
In riferimento al feature creep di Emacs, gli utenti vi lo descrivono ironicamente come "un ottimo sistema operativo, cui manca solo un editor di testo decente".
Un gioco diffuso tra gli utenti Emacs su Unix, per testare la conoscenza dell'editor o per ironizzare sulla sua complessità, consiste nel predire cosa succede se si tiene premuto un tasto modificatore e si digita il proprio nome. Un gioco simile era già praticato tra gli utenti di TECO, un predecessore di Emacs.
Gli utenti Emacs ironizzano sul modo non intuitivo di terminare vi (che richiede di digitare :q↵ in normal mode), affermando che per ottenere un buon generatore di stringhe casuali basta mettere un novizio davanti a vi in esecuzione su un terminale e chiedergli di terminare il programma, mentre in un'altra barzelletta un utente dice di usare vi da anni, in quanto non ha ancora trovato il modo di terminare l'applicazione.