it-swarm.it

Quali sono i pro e i contro di Vim ed Emacs?

Come confronteresti questi editor? Quali sono i pro ed i contro di ognuno?

[nota] Non si intende rispondere a chi "odia e ama un altro" o chi non ha usato entrambi.

388
John Berryman

Uso entrambi, anche se se dovessi sceglierne uno, so quale sceglierei. Cercherò comunque di fare un confronto oggettivo su alcune questioni.

  • Disponibile ovunque? Se sei un amministratore di sistema professionale che lavora con i sistemi Unix o un utente esperto su dispositivi integrati (router, smartphone con Busybox, ... ), è necessario conoscere vi (non Vim), poiché è disponibile su tutti i sistemi Unix e la maggior parte dei sistemi simili a Unix, sia desktop che server o incorporato. Per un normale utente, questo argomento è irrilevante: Emacs è facilmente disponibile per ogni sistema operativo desktop/server e, poiché supporta l'editing remoto, è comunque sufficiente averlo sul computer desktop.

  • Gonfiore? Una volta Emacs rappresentava ironicamente "Otto Megabyte e scambia costantemente". In questo momento, sul mio computer, Google Chrome ha bisogno di almeno RAM per scheda come Emacs fa per 100 file aperti e non menzionerò nemmeno Firefox Nel 21 ° secolo, Emacs bloat è solo un mito.

    Feature bloat non è neanche un problema. Se non lo usi, non devi sapere che è lì. Le funzionalità di Emacs si tengono alla larga quando non le si utilizza e la documentazione è molto ben organizzata.

  • Tempo di avvio : i proponenti Vi (m) si lamentano del tempo di avvio di Emacs. Sì, Emacs si avvia lentamente, ma questo non è un grosso problema: si avvia Emacs una volta per sessione, quindi ci si connette al processo in esecuzione con emacsclient. Quindi l'avvio lento di Emacs è principalmente un mito.

    C'è un'eccezione, che è quando si accede a un computer remoto e si desidera modificare un file lì. L'avvio di un Emacs remoto è (generalmente) più lento rispetto all'avvio di un Vim remoto. In alcune situazioni puoi tenere un Emacs in esecuzione all'interno dello schermo. Puoi anche modificare i file remoti dall'interno di Emacs, ma interrompe il flusso se ti trovi in ​​una sessione ssh in un terminale. (Da XEmacs 21 o GNU Emacs 23, puoi aprire una finestra Emacs da un'istanza X in esecuzione all'interno di un terminale.)

    Girando le tabelle, ho osservato che Vim impiegava notevolmente più tempo a caricarsi di Emacs (vim -u /dev/null vs. emacs -q). Certamente questo era su una strana piattaforma (Cygwin).

  • Curva di apprendimento iniziale: Varia da persona a persona. grafico di Michael Mrozek mi ha fatto ridere. Scherzi a parte, concordo sul fatto che la curva di apprendimento di Vim inizia in modo ripido, più ripido di qualsiasi altro editor, sebbene ciò possa essere ridotto usando gvim.

    Da quando ho dissipato un paio di miti di Emacs, lasciami sfatare un mito vi: un editor modale non è difficile o doloroso da usare. Ci vuole un po 'di abitudine, ma dopo un po' sembra molto naturale. Se dovessi ridisegnare vi (m), terrei sicuramente le modalità.

  • Curva di apprendimento asintotico: Sia Vim che Emacs hanno molte funzionalità e continuerai a scoprirne di nuove dopo anni di utilizzo.

  • Produttività : questo è un argomento estremamente difficile. I sostenitori di vi (m) sostengono che puoi fare praticamente tutto senza uscire dalla fila di casa, e questo ti rende più efficiente quando ne hai più bisogno. I sostenitori di Emacs ribadiscono che Emacs ha molti comandi che non vengono usati frequentemente, quindi non giustificano un'associazione chiave, ma sono dannatamente convenienti quando ne hai bisogno ( riferimento xkcd obbligatorio ).
    La mia opinione personale è che Emacs alla fine vince a meno che tu non abbia una disabilità di battitura (e anche allora puoi configurare Emacs per richiedere solo sequenze di tasti e non combinazioni come Ctrl+ Lettera). I tasti della fila in casa sono belli, ma spesso non sono una vittoria perché devi cambiare modalità. Non credo che Vim possa fare qualcosa significativamente in modo più efficiente di Emacs, mentre il contrario è vero.

  • Personalizzabilità : entrambi gli editor sono programmabili e per entrambi esiste un ampio corpus di pacchetti disponibili. Tuttavia, Vim è un editor con un linguaggio macro; Emacs è un editor scritto in LISP con alcune primitive ad hoc. Emacs vince in modo spettacolare quando provi a fare qualcosa a cui gli autori non hanno pensato. Questo non succede tutti i giorni, ma si accumula nel corso degli anni.

  • Più che un editor : Vim è un editor. Emacs non è solo un editor: è anche un IDE, un file manager, un emulatore di terminale, un browser web, un client di posta, un client di notizie, ... Che si tratti di una cosa positiva o negativa è una questione di dibattito. Ma puoi usare Emacs come un semplice editor (vedi "gonfiore delle funzionalità" sopra).

  • Come IDE : Sia Vim che Emacs supportano molti linguaggi di programmazione e altri formati di testo. Oltre alle nozioni di base come la colorazione sintattica e il rientro automatico, entrambi hanno avanzato IDE caratteristiche come ricerche di riferimenti incrociati di codice e documentazione, inserimenti e refactoring assistiti, controllo di versione integrato e la possibilità di avviare un compilazione e passa al primo errore.

    Un dominio in cui Emacs è chiaramente migliore di Vim è l'interazione con asincrono sottoprocessi. Questo è quando inizi una lunga compilation e vuoi fare qualcos'altro all'interno della stessa istanza dell'editor mentre il compilatore sta agitando. O quando vuoi interagire con un Read-eval-print loop - Emacs brilla davvero in questo, Vim ha solo hack goffi da offrire. Tuttavia, un nuovo fork di vim, Neovim ha dimostrato di aver risolto questo problema e implementato altre varie correzioni di bug non implementate in stock vim.

Pubblicherò quali ritengo siano i principali vantaggi di ciascuno:


Emacs ha molte più estensioni per consentirti di svolgere attività che sono solo vagamente correlate all'editor di testo, come la navigazione nel filesystem o la confusione con il controllo della versione, ed estensioni che non sono in alcun modo correlate all'editor di testo, come la lettura di feed RSS. Se vuoi un ambiente invece di un semplice editor di testo, Emacs sarà migliore di Vim. Penso anche che Emacs sia molto più facile da imparare, nonostante ciò che alcuni vorrebbero farti credere:

Editor learning curve comic

In particolare, penso che un utente Emacs alle prime armi sarà più veloce di un utente Vim alle prime armi


D'altra parte, Vim è innegabilmente più veloce. Sembra che questa sia una parte fondamentale dell'argomento, ma a mio avviso non vi è alcun contest; Mi considero un fluente utente di Emacs e non posso competere con le persone di coppia che conosco che hanno una pari conoscenza di Vim. Il problema è che il numero di persone che hanno una padronanza sufficiente di Vim per essere così veloce è incredibilmente piccolo (delle ~ 30 persone con cui parlo regolarmente che usano Vim, penso che solo una sia eccezionalmente brava). C'è un grande divario tra il guadagno di velocità possibile e il guadagno di velocità effettivo tu raggiungi; Gli utenti di Emacs saranno quasi veloci quanto il 99% degli utenti di Vim e (come ho detto nella sezione Emacs) probabilmente gli utenti di Emacs all'inizio saranno più veloci degli utenti di Vim

272
Michael Mrozek

C'è un vi disponibile su ogni sistema unix (o quasi), tuttavia non puoi dirlo su nessun altro editor. Questo è il motivo numero 1, imo, per imparare e familiarizzare con vi (notare 'vi' non 'vim'). Non ho mai visto Emacs disponibile in un'installazione predefinita.

Non sto dicendo di non usare Emacs o questo è l'unico motivo per usare Vim, ma quando vuoi essere in grado di usare sistemi Unix che non sono tuoi ... vi fa parte dell'universale linguaggio.

83
xenoterracide

Penso che siano entrambi fantastici. Penso che uno dei due possa fare qualsiasi cosa tu possa immaginare, ed entrambi sono così personalizzabili, che quando finisci di personalizzarli, entrambi sono esattamente esattamente ciò che vuoi che siano, niente di più o di meno.

Emacs mi distingue per essere un po 'più vicino (anche se non soddisfa ancora) agli standard ISO/IEC di usabilità e coerenza per le interfacce utente, e quindi non gioca così tanti trucchi con i tuoi "istinti" su quel vim. La durata degli istinti che hai sviluppato lavorando con altri programmi non funzionerà contro di te.

Vim è un modello completamente diverso, e per molti versi è superiore da solo in quanto si basa molto meno sulle sequenze Cntrl/Alt e invece solo sulle sue modalità, permettendoti di mantenere i tuoi hard sulla riga iniziale e digitando Più veloce. Ma vim è praticamente unico e, a meno che non si installi un software di accompagnamento molto insolito (ad es. Vimperator, Jumanji/Zathura, ecc.), Gli istinti che si sviluppa lavorando con vim non passeranno ad altri programmi e viceversa. Detto questo, ho optato per Vim me stesso. Devi accontentarti di uno prima o poi, nel bene o nel male, dal momento che è difficile padroneggiare entrambi.

24
frabjous

Uso entrambi su base regolare. Vedo Emacs come un editor "live in", mentre utilizzo Vim per compiti rapidi e unici. A livello superficiale, Emacs è molto più gonfio di Vim, e quindi non è molto conveniente "accendere" come Vim, ma trovo anche che le filosofie dell'interfaccia utente dall'una all'altra supportino questo paradigma. Emacs è molto più costruito per tenerti dentro, rendendo le cose belle e comode in modo da non dover andartene, mentre Vim è molto più "Unixy" e si considera parte di una maggiore cintura degli attrezzi.

Molte persone fuggono da Emacs a causa della sua forte dipendenza da bucky bit , ma questa è una ragione piuttosto sciocca per me. Il vero potere che Emacs ha su Vim è la personalizzazione, e con il potere di Viper ecc., Questo non è davvero un problema. Certamente Vim-Script offre il proprio livello di personalizzazione e se, per esempio, il tuo linguaggio di programmazione preferito non fosse dotato di un evidenziatore di sintassi appropriato, potresti sicuramente crearne uno, ma Emacs è in definitiva una macchina LISP self-hosting, e in alla fine puoi fare molto, molto più armeggiare con esso. Semplicemente non esistono strumenti come gnus o org-mode in Vim, solo per citarne alcuni. In breve, Emacs non è solo un editor, è praticamente un maledetto sistema operativo.

Per manipolare il testo, direi che sono esattamente alla pari.

21
Eli Frey

Metterò il mio valore di $ 0,02 in quanto ho trascorso parecchi anni usando emacs e XEmacs e poi sono passato a vim. Per essere onesti, avevo effettivamente usato vi un po 'tra il 1990 e il 1992, quindi avevo familiarità con la sua interfaccia utente.

Emacs

  • Emacs è stato descritto come un sistema LISP che è appena stato usato per scrivere un editor, e c'è un granello di verità in questo. È possibile implementare praticamente tutto ciò che si desidera in elisp se si desidera prendere il proprio tempo per comprendere l'ambiente. Non posso dire di averlo mai saputo così bene, ma ho fatto cose occasionali. Emacs e Xemacs non sono totalmente compatibili a questo livello, quindi gli script di terze parti possono essere eseguiti su uno ma non sull'altro.

  • È stato osservato che RMS e alcuni altri eminenti hacker Emacs hanno dovuto ritirarsi dalla programmazione a causa di problemi con OOS, dove Bill Joy, Bram Moolenaar e vari altri luminari vi sono ancora a questo. Emacs è duro sulle tue dita mignolo.

  • Emacs è un sistema molto più cattolico di vi, ed è visto come un esempio canonico di inviluppo software . Insieme a Netscape, questo è uno dei jwz's contributi per dimostrare questa legge.

Una cosa unica che ho fatto una volta con xemacs è stata farla funzionare su una macchina e aprire una sessione x su un xterminal (in realtà un vecchio Sun 3/60 riproposto) in una stanza diversa contro lo stesso buffer sulla stessa istanza in esecuzione.

Pro: Estensibile, più potente di qualsiasi altro editor conosciuto dall'uomo, integrazione matura con praticamente tutti i principali strumenti di programmazione del software libero.

Contro: Ergonomia discutibile, elisp non è facile da imparare.

Vim

Disclamer - Sono passato dall'uso di emacs a vim circa 10 anni fa e uso abitualmente vim su sistemi basati su Windows e Unix/Linux.

  • Vi e i suoi discendenti hanno un'ottima funzionalità di macro della tastiera per automatizzare le attività di modifica. La funzione di scripting in vim non è sofisticata come elisp, ma puoi costruirla con il supporto per Python, Tcl, Perl e forse altri sistemi. Di tanto in tanto ho scritto script (al di fuori dei file .vimrc) per vim.

  • Vim ha un'impronta più piccola di emacs, ma al giorno d'oggi non è un gran problema.

  • La documentazione di Vim e l'aiuto in linea sono abbastanza buoni. Emacs ha una buona documentazione online, ma non credo sia completa come quella di VIM.

  • Vim eredita la bizzarra interfaccia utente modale di vi, ma ora ha la capacità di comportarsi in modo molto simile a un editor modless, poiché puoi navigare nella modalità di inserimento. Su Windows può comportarsi in modo simile a un'applicazione Windows.

Pro: Buona funzionalità per la macro della tastiera, estensibilità e script accettabili, ma non buoni come emacs. Gli editor Vim o vi sono standard nella maggior parte se non in tutte le distribuzioni linux unix o generiche. Ergonomia probabilmente migliore.

Contro: L'interfaccia utente modale è strana per le persone abituate alle interfacce utente di Windows. Meno problemi con vim in questi giorni.

Normalmente uso Vim, ma sono entrambi ottimi editor.

Imparare a usare vi è stato brutto, ma ci sono riuscito e ho imparato a piacermi. I miei momenti più frustranti sono stati quando la chiave di blocco maiuscole era attiva. Potresti provare con gVim, ma uno dei maggiori vantaggi di vi ed Emacs è la capacità di fare cose ordinate mantenendo le mani sulla tastiera, e gVim probabilmente ti farà continuare a usare il mouse. (Imparare a giocare a giochi roguelike allo stesso tempo mi ha dato pratica con i tasti di spostamento del cursore, ma a volte mi ha fatto provare a muovermi diagonalmente nei documenti.)

Emacs è probabilmente più accessibile. È modale e non ti rovinerai premendo il tasto BLOC MAIUSC. L'idea di controllare l'editor digitando lettere con il tasto di controllo premuto non dovrebbe essere troppo estranea ai moderni utenti esperti, sebbene le chiavi effettive per fare le cose sembreranno selvagge e arbitrarie per il tipico utente di Windows/Mac OS X. Ancora una volta, le versioni che ti consentono di usare il mouse ti fanno pochi favori a lungo termine.

Entrambi richiedono un certo livello di esperienza per utilizzare in modo efficace. A differenza, diciamo, Blocco note, non puoi semplicemente sederti e modificare.

Entrambi sono configurabili, anche se per i miei soldi scrivere estensioni nello stesso LISP in cui è scritto l'editor rende l'esperienza più fluida. (Emacs, come normalmente distribuito, non è in realtà un editor. È un ambiente LISP su misura per l'elaborazione del testo, con molti software pre-scritti, incluso un editor. Da qui la battuta "Emacs rende una Shell decente, ma potrebbe usare un editor migliore. ")

Di solito uso Vim perché, dopo un lungo allenamento, mi sembra più facile. Ciò può essere dovuto ai vantaggi del sistema di modalità, in cui sono disponibili immensi numeri di comandi usando un dito vicino alle file di casa, o "sindrome di baby duck", che si applica molto agli editor: una volta che ne apprendi uno buono, generalmente ti attieni ad esso.

Non ti sbaglierai nemmeno usando.

15
David Thornley

Mi capita di pensare che il commento "vim is modal" sopra non sia corretto. Vim ha dei comandi. Puoi fare "11aOra è il momento di tutti gli uomini buoni .." e finire con 11 nuove identiche righe di testo nel tuo file. Questo è un comando, non una modalità. Ma in realtà c'è una differenza di base nei comandi Vim rispetto ai comandi Emacs. Non sono del tutto sicuro di poterlo descrivere, ma Eric Fischer ha incorporato l'editing di linea in stile Emacs in un driver TTY 10+ anni fa e ha pubblicato un articolo a riguardo:

http://www.usenix.org/event/usenix99/full_papers/fischer/fischer.pdf

Ha scoperto che la modifica delle linee in stile Emacs era sostanzialmente diversa da quella in stile vi.

Quindi Emacs ha il vantaggio che molte altre cose (bash, gnuplot, zsh, ksh alcune altre a cui non riesco a pensare dalla parte superiore della mia testa) finiscono per implementare la modifica delle linee in stile Emacs.

Devo notare che uso personalmente Vim per tutto il tempo. Sono solo un utente Emacs molto occasionale.

9
Bruce Ediger

Poiché non è stato esplicitamente dichiarato, aggiungerò che non esiste un ambiente di programmazione migliore (LISP in una scatola, SLIME, ecc.) Di una distribuzione Emacs leggermente modificata. Tutte le mie esigenze di programmazione (99%) sono gestite da Vim, ma per tutte quelle librerie e routine LISP che scrivo, devo avviare Emacs per ottenere risultati produttivi.

9
Shamster

Il motivo principale per cui non uso vi/vim è che è modale. Il motivo principale per cui utilizzo vi è che è disponibile quasi ovunque.

Uso Vim/gVim.

Usavo Emacs, ma ho scoperto che gVim funziona generalmente più velocemente su macchine più lente, inoltre, a causa del suo requisito POSIX, vi è disponibile quasi ovunque.

Quando uso Vim o gVim, uso molto il mouse, credo che il supporto sia ottimo.

Ho iniziato a usare Emacs, perché era più facile da usare per un utente alle prime armi. Ho trovato che l'uso di nano è piuttosto soggetto a errori per qualche motivo, e ad un certo punto mi sono reso conto che mi sento molto più a mio agio con l'uso di vi.

In questo momento, è un miscuglio. Uso anche Eclipse e gedit abbastanza spesso. Vim, tuttavia, è ancora il mio editor preferito e più usato.

8
polemon

Uso sia gVim che Emacs abbastanza bene per essere produttivo, anche se non sono esperto in nessuno dei due. Una cosa che posso dire con certezza è che Vim e gVim funzionano più velocemente sul mio laptop Windows 7 (che devo usare al lavoro). Emacs, nella finestra di Windows, ha la strana abitudine di "mettere in pausa" per un minuto e di non rispondere, anche se continua ad accettare l'input da tastiera, prima di sputare tutto ciò che si è accumulato nel buffer della tastiera in un Rush. Ciò non accade in Mac OS o Linux. Tuttavia, mi ritrovo a usare Vim o gVim la maggior parte delle volte su tutte le piattaforme, quindi non devo fermarmi a pensare a quale editor sto usando e adattare. Detto questo, in un ambiente puramente * nix, probabilmente starei con Emacs perché trovo il montaggio non modale leggermente più naturale.

In conclusione: secondo me entrambi gli editor sono abbastanza potenti da gestire qualsiasi esigenza di modifica del testo. La scelta dovrebbe basarsi su considerazioni pratiche (come specifiche di implementazione della piattaforma) e stile di lavoro.

7
Wing Flanagan

La differenza principale tra Emacs e Vim è ergonomica. C'è la sindrome del tunnel carpale, CTS, come sai. Emacs è molto "pericoloso" se hai CTS e provoca CTS. Vim - no, puoi leggere questa differenza in molti posti. Ad esempio, in Vim puoi modificare il testo solo con un dito. In Emacs - non puoi :)

3
Paul