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.[1][2][3]

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.[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] 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[36][37] etc.), MS-DOS, Microsoft Windows,[38][39][40] AmigaOS e OpenVMS. Molti sistemi Unix forniscono Emacs preinstallato come editor di testo.[41]
Emulazione dell'editor concorrente 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. In The 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 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.[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

Richard Stallman è St IGNU−cius, un santo della Chiesa di Emacs

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

  1. ^ Just Let Me Code, su drdobbs.com. URL consultato il 25 ottobre 2015 (archiviato dall'url originale il 1º maggio 2015).
  2. ^ Why Coding Style Matters, su smashingmagazine.com. URL consultato il 25 ottobre 2015 (archiviato dall'url originale il 3 maggio 2015).
  3. ^ Never use hard tabs, su opensourcehacker.com.

    «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.»

  4. ^ Mike Kozlowski, Why Atom Can’t Replace Vim, su medium.com. URL consultato il 7 maggio 2014.
  5. ^ undo-tree-readme.txt (TXT), su elpa.gnu.org.
    «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!»
  6. ^ Nel 2013 i sorgenti di vim erano composti da 1731 kSLOC (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.
  7. ^ The GNU Emacs Open Source Project on Open Hub : Languages Page, su ohloh.net. URL consultato il 1º dicembre 2014 (archiviato dall'url originale l'8 novembre 2013).
  8. ^ The Vim Open Source Project on Open Hub : Languages Page, su ohloh.net. URL consultato il 1º dicembre 2014 (archiviato dall'url originale l'8 novembre 2013).
  9. ^ Vim documentation: eval, su vimdoc.sourceforge.net.
  10. ^ How to write a plugin, su vim.wikia.com.
  11. ^ Startup Summary, su gnu.org.
  12. ^ 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.»
  13. ^ GNU Emacs Manual: Emacs Server, su gnu.org.
  14. ^ Vim documentation: usr_41, su vimdoc.sourceforge.net.
  15. ^ Vim documentation: if_pyth, su vimdoc.sourceforge.net.
  16. ^ Vim documentation: if_ruby, su vimdoc.sourceforge.net.
  17. ^ Vim documentation: if_perl, su vimdoc.sourceforge.net.
  18. ^ Vim documentation: if_lua, su vimdoc.sourceforge.net.
  19. ^ Do What I Mean, su emacswiki.org.
  20. ^ Emacs Web Browser, su emacswiki.org.
  21. ^ Emacs w3m, su emacswiki.org.
  22. ^ ELPA, su emacswiki.org.
  23. ^ syntax.txt (TXT) [collegamento interrotto], su ftp.tuwien.ac.at.
    «All fonts used, except for Menu and Tooltip, should be of the same character size as the default font! Otherwise redrawing problems will occur.»
  24. ^ In Emacs, il termine "modi" viene usato in un contesto diverso, in riferimento a modalità di interazione a lungo termine rispetto a file o dataset.
  25. ^ EmacsWiki: Category Modes, su emacswiki.org. URL consultato il 1º dicembre 2014.
  26. ^ Vim documentation: map, su vimdoc.sourceforge.net.
  27. ^ spacemacs, su github.com.
  28. ^ Ergoemacs, su ergoemacs.org.
  29. ^ Vim documentation: multibyte, su vimdoc.sourceforge.net.
  30. ^ Vim documentation: mlang, su vimdoc.sourceforge.net.
  31. ^ International Chars, su gnu.org.
    (EN)

    «Internally, Emacs uses its own multibyte character encoding, which is a superset of the Unicode standard.»

    (IT)

    «Internamente Emacs usa una propria codifica dei caratteri multibyte, che è un sovrainsieme dello standard Unicode.»

  32. ^ Vim documentation: usr_32, su vimdoc.sourceforge.net.
  33. ^ EmacsWiki: Redo Mode, su emacswiki.org.
  34. ^ POSIX 1003.1 - man page for vi, su unix.com.
  35. ^ download: vim online, su vim.org.
  36. ^ Carbon Emacs Package, su homepage.mac.com. URL consultato il 27 settembre 2006 (archiviato dall'url originale il 14 marzo 2007).
  37. ^ Aquamacs is an easy-to-use, Mac-style Emacs for Mac OS X, su aquamacs.org. URL consultato il 27 settembre 2006.
  38. ^ Ramprasad B, GNU Emacs FAQ For Windows 95/98/ME/NT/XP and 2000, su gnu.org, 24 giugno 2005. URL consultato il 27 settembre 2006.
  39. ^ Lennart Borgman, EmacsW32 Home Page, su ourcomments.org, 2006. URL consultato il 27 settembre 2006 (archiviato dall'url originale il 6 marzo 2007).
  40. ^ GNU Emacs on Windows, su franz.com, Franz Inc., 2006. URL consultato il 27 settembre 2006.
  41. ^ MIT 2.S998 : Help - Emacs browse, su oceanai.mit.edu (archiviato dall'url originale il 30 ottobre 2015).
  42. ^ https://www.vim.org/scripts/script.php?script_id=300, su vim.org.
  43. ^ Evil - Home - Open wiki, su gitorious.org, 29 maggio 2014. URL consultato il 16 settembre 2014 (archiviato dall'url originale il 16 settembre 2014).
  44. ^ Viper Is a Package for Emacs Rebels, su gnu.org.
  45. ^ Vimpulse, su emacswiki.org.
  46. ^ The Right Size for an Editor, su catb.org. URL consultato il 1º dicembre 2014.
  47. ^ Larry Ullman, Modern JavaScript: Develop and Design, Peachpit Press, 2012, pp. 64-65, ISBN 978-0-13-290587-9.
    (EN)

    «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.»

  48. ^ Editor: vi or emacs?, su oreilly.com, 21 giugno 1999. URL consultato il 1º dicembre 2014 (archiviato dall'url originale il 1º aprile 2014).
  49. ^ Jarosław Rzeszótko, Stifflog: Stiff asks, great programmers answer, su stifflog.com. URL consultato il 1º dicembre 2014 (archiviato dall'url originale l'8 novembre 2006).
  50. ^ Ashlee Vance, Bill Joy's greatest gift to man – the vi editor, su theregister.co.uk, 11 settembre 2003. URL consultato il 3 giugno 2014 (archiviato il 3 giugno 2014).
  51. ^ Bill Joy, The Joy of Unix: Sun Microsystems Co-Founder Bill Joy Charts Where Linux and Free Software Fit Into His Company's Solar System., in Linux Magazine, intervista di Eugene Eric Kim, novembre 1999. URL consultato il 3 giugno 2014 (archiviato dall'url originale il 7 febbraio 2003).
  52. ^ a b The top 4 internet flame wars about free software, su freesoftwaremagazine.com (archiviato dall'url originale il 25 ottobre 2015).
  53. ^ The Oldest Rivalry in Computing, su slate.com.
    «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.»
  54. ^ Vim vs Emacs: Which Text Editor Do You Need?, su Udemy.
    «Vim and Emacs are the two most commonly used text editors on Linux»
  55. ^ Choosing an Editor, su catb.org.
    «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.»
  56. ^
  57. ^ Rules, Sins, Virtues, Gods and more of The Church of Emacs, su gnu.org. URL consultato il 1º dicembre 2014.
  58. ^ Saint IGNUcius - Richard Stallman, su stallman.org. URL consultato il 1º dicembre 2014.
  59. ^ "Using a free version of vi is not a sin but a penance." Cfr
  60. ^ The unabridged selective transcript of Richard M Stallman's talk at the ANU, su linuxhelp.blogspot.com. URL consultato il 1º dicembre 2014.
  61. ^ Saint IGNUcius - Richard Stallman, su stallman.org. URL consultato il 1º dicembre 2014.
  62. ^ the Cult of vi, su guckes.net.
  63. ^ satirical expansions of EMACS, su gnu.org. URL consultato il 1º dicembre 2014.
  64. ^ Eric S. Raymond, The art of Unix programming, Addison-Wesley Professional, 2004, p. 343, ISBN 978-0-13-142901-7. URL consultato il 17 dicembre 2011.
  65. ^ "a great operating system, lacking only a decent editor" From Vim to Emacs - part 2, su upsilon.cc.
  66. ^ Real Programmers Don't Use PASCAL, in Datamation, luglio 1983, pp. 263–265.
  67. ^ Vim and Emacs jokes on Twitter, su cmdlinetips.com.

Voci correlate

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica