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.[4]
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.[5]
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.[6][7][8] 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.[9][10]
Emacs esegue un gran numero di azioni all'avvio,[11] che è tipicamente più lento di vi/Vim e richiede una maggiore quantità di RAM. Emacs 18 (pubblicato nel 1987) ha introdotto una modalità server[12] 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à.[13]
Scripting
Vim è estensibile e personalizzabile tramite un proprio linguaggio di programmazione, VimScript,[14] e supporta anche l'estensione tramite altri linguaggi come Python,[15]Ruby,[16]Perl[17] e Lua.[18]
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.[19]
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,[20] e un'interfaccia per w3m),[21]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.[22]
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.[23]
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.[24][25] 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.[26] 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[27] e ergoemacs[28] 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.[29][30]
Emacs ha il completo supporto per i sistemi di scrittura compatibili con Unicode.[31]
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.[32]
In Emacs lo stesso annullamento viene considerato un comando, per cui per ripristinare un comando annullato bisogna annullare l'annullamento stesso.[33]
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.[34][35]
In Vim è possibile emulare la modalità di input di Emacs con alcune estensioni, come Vimacs[42]
Emacs ha alcuni pacchetti che consentono di emulare vi e Vim (usando Evil,[43]Viper[44] o Vimpulse[45]).
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. InThe Art of Unix Programming, Eric S. Raymond sostiene che la leggerezza di Vim rispetto a Emacs è "un mito condiviso".[46] 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.[47]
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).[48] Numerosi programmatori impiegano vi, Emacs o qualche loro derivato, ad esempio Linus Torvalds impiega MicroEMACS.[49] 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.").[50][51]
Oltre ai sostenitori di Emacs e vi, anche altri editor di testo come pico, il suo clone liberonano, ne e altri editor hanno una rappresentanza nella guerra degli editor, anche se non comparabile in dimensioni a quelle di vi o Emacs.[52]
Sia Emacs sia vi sono tra i software più longevi di tutti i tempi,[53] nonché i due editor di testo più usati in ambiente Unix e Linux.[54][55] 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.[56]
Umorismo
La "Chiesa di Emacs",[57] è una religione parodistica fondata da Richard Stallman.[58] 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").[59][60] 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.[61] I sostenitori di vi hanno creato in contrapposizione il "Culto di vi",[62] che viene visto dai seguaci della Chiesa di Emacs come un tentativo di scimmiottare le loro credenze.[52]
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),[63]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.[64]
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".[65]
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.[66]
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.[67]
Note
^Just Let Me Code, su drdobbs.com. URL consultato il 25 ottobre 2015 (archiviato dall'url originale il 1º maggio 2015).
^Why Coding Style Matters, su smashingmagazine.com. URL consultato il 25 ottobre 2015 (archiviato dall'url originale il 3 maggio 2015).
«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. 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!»
^Nel 2013 i sorgenti di vim erano composti da 1731kSLOC (1142 in C + 506 in vimScript + 83 di makefile), mentre quelli di GNU Emacs da 1623 (299 in C + 1270 in Emacs Lisp + 54 in makefile). Oltre alle funzionalità built-in, entrambi gli editor hanno a disposizione una grande quantità di pacchetti, rispettivamente in VimScript e in Emacs Lisp: i dati si riferiscono solo al codice della release ufficiale.
^NEWS.18, su searchcode.com. URL consultato il 12 ottobre 2020 (archiviato dall'url originale il 30 luglio 2020).
«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.»
«Text editors require fewer hardware resources to run – disk space, memory, and processor activity, meaning they are better choices if you have an older computer. In fact, the most basic text editors, such as vi and emacs have no graphical interface.»
(IT)
«Gli editor di testo richiedono meno risorse hardware – spazio su disco, memoria e attività del processore, quindi sono una scelta migliore per chi ha un computer datato. Di fatto, gli editor di testo più basilari come vi e emacs non hanno un'interfaccia grafica.»
^Editor: vi or emacs?, su oreilly.com, 21 giugno 1999. URL consultato il 1º dicembre 2014 (archiviato dall'url originale il 1º aprile 2014).
«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.»
«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.»