Vim vs. Emacs: Wie man darüber nachdenkt - und seinen Editor auswählt

Wenn ich nach einem Artikel zum Schreiben suche, schaue ich bei Google nach, was da draußen ist. In diesem Fall habe ich eine Google-Suche nach "vim vs. emacs" und "emacs vs. vim" durchgeführt, einschließlich auf dieser Website, und nicht gefunden, was ich wollte: eine Anleitung, die ausschließlich die beiden Editoren behandelt, die sich daran orientieren würden eine neue Person und helfen ihnen, zwischen ihnen zu wählen. Andere Materialien im Internet decken hervorragend die Geschichte, den Hintergrund, die Überlieferungen usw. der beiden Herausgeber ab. Gleiches gilt für die Tastenkombination und die Early-Learning-Kurve. Ich werde das hier nicht behandeln. Stattdessen werde ich untersuchen, warum Sie sich für einen anderen entscheiden könnten.

Ich würde nicht sagen, dass ich einen Hund in diesem Kampf habe, aber ich habe vor Jahren mit Emacs angefangen, als ich ein Manuskript redigiert habe, zu vim gewechselt und das mehrere Jahre lang täglich aufgegriffen und schließlich wieder zu Emacs gewechselt. Vim hinterließ einen so übergroßen Eindruck auf mich, dass ich meine frühere Emacs-Phase tatsächlich vergessen hatte und zurückkommen musste, um diesen Absatz zu korrigieren, um Ihnen ein Gefühl dafür zu geben, wie häufig ich ihn verwendet habe. Beachten Sie, dass vim für "vi verbessert" steht und grundsätzlich für vi ersetzt werden kann, und zwar in allen Situationen, in denen es darauf ankommt (z. B. bei Google-Suchen, in denen vi vs.

Wenn Ihnen die Leute sagen, dass verschiedene Produkte in der gleichen Sache gleich gut sind, haben Sie keinen anderen Mechanismus zur Auswahl, als den „Bauchgefühl“ oder ein sehr raues Vertrauen in eine Person über die andere. Auf die Gefahr hin, dass die Fähigkeiten beider Editoren falsch dargestellt werden, wähle ich Seiten aus und gebe Ihnen eine Meinung darüber, wann Sie vim und wann Sie Emacs verwenden sollten. Beachten Sie, dass Sie einen Workflow erstellen können, der fast die gleiche Funktionalität aus VIM herausholt, die Sie aus Emacs herausholen können, und umgekehrt. Wenn Sie sich jedoch an einem fortgeschrittenen Ort befinden, an dem nur der eine oder andere Ihre Anforderungen erfüllen kann, haben Sie Ihre Antwort. In den meisten Anwendungsfällen überlappen sie sich in ihrer Funktionalität.

Um Ihnen zu erklären, wie ich meinen Editor benutze, schreibe ich ungefähr die Hälfte des Tages E-Mails und die andere Hälfte Code-Snippets und Skripte in Ruby, Python, JavaScript oder Lisp. Ich sende meine Antworten über GET und POST an eine API - auch über Emacs. Das wird meine Perspektive beeinflussen, da ich Ihnen nicht die Meinung zum besten Editor für Situationen oder Sprachen gebe, die für mich nicht zutreffen. Nachdem das gesagt ist, geht es zur Sache.

Vim

Zunächst benutze ich Vim anders als Emacs. Ich öffne vim fast jedes Mal in einem Terminal, wenn ich eine Datei bearbeiten möchte, da sie schnell geladen und schnell verwendet werden kann. Wie andere angemerkt haben, wirkt es wie ein Spiel. Sobald Sie die Tastenanschläge gelernt haben, können Sie mit ein paar Fingertipps auf der Tastatur durch Ihre Datei gleiten.

Wie schwer ist es zu lernen? Nicht allzu schwer, wie es aussieht (zum Beispiel Spanisch, Physik der Highschool oder Dark Souls). Es hat eine scharfe Lernkurve, wenn Sie bei Null anfangen, aber zum Glück ist der Großteil dieser Kurve in den ersten Stunden voll.

Ein im Internet gefundenes Bild (die Zuordnung ist mir leider nicht bekannt). Beachten Sie, was das vi / vim-Bild sagt - es ist am schwierigsten, ganz am Anfang hochzufahren und reibungslos hinter dieser Wand zu segeln.

Öffnen Sie eine vim-Spickzettelgrafik in einem separaten Fenster, halten Sie einen Tag durch, und Sie müssen nicht zurückblicken. Mit Editor-Tastenkombinationen erhöhen sich Ihre Retention und Geschwindigkeit in den ersten Wochen dramatisch.

Was vim bietet, ist meiner Meinung nach eine elegante Lösung, die wunderbar funktioniert, wenn Sie sich die Zeit nehmen, sie sofort zu erlernen. Wenn vim ein Spiel war, könnte es etwas sein, das von Meister-Game-Designer Shigeru Miyamoto gemacht wurde. Er ist wirklich gut in dem, was er tut. Seine Vorstellungen darüber, wie die Standardeinstellungen aussehen sollten, wie Ihre Ziele aussehen könnten und wie Sie durch Ihre Aktionen geführt werden, sind im Allgemeinen hervorragend. Sie werden im Allgemeinen viel lernen, wenn Sie sich erlauben, von ihm zu lernen. Wirst du ein besseres Spiel entwickeln als die ursprüngliche Legende von Zelda? Selbst wenn Sie dies tun, können Sie immer noch aus seiner Beherrschung des Mediums lernen.

Ein anderer Vergleich könnte ein Kochmesser sein: etwas „Einfaches“, aber elegantes und perfekt für seinen Zweck geeignetes. Vim vermittelt Ihnen dieses Gefühl, so wie es ein Redakteur kann. Insbesondere die Tastaturbelegungen stellen eine sehr gute Balance zwischen gesundem, gut verteiltem, logisch zu merkendem und leicht zugänglichem Druck auf einer durchschnittlichen QWERTZ-Tastatur dar. Denken Sie jedoch daran, dass ein Editor mehr ist als die Tastaturbelegungen.

Auch in Zeiten von AWS und virtualisierten Linux-Maschinen ist vim allgegenwärtig. Wenn Sie eine neue AWS-Instanz starten, ist vim dort. Wenn Sie Probleme mit den Protokollen anderer Personen beheben müssen und Zugriff auf deren Computer haben, ist vim dort. Sie können in Rekordzeit ein- und aussteigen, und es eignet sich hervorragend, um einen Charakter aus Tausenden herauszulasern, Änderungen oder Bearbeitungen vorzunehmen und das Zippen zu beenden. Chirurgische Präzision ist sehr wichtig.

Aber das ist nicht alles. Sie müssen vim nicht in der voreingestellten Standardeinstellung verwenden (obwohl das solide ist - Emacs hat einen berühmten 'vim-imitierenden' Modus, der als böser Modus bezeichnet wird, während niemand danach verlangt, das Kompliment mit dem 'emacs-Modus' in vim zurückzuzahlen). . Es gibt viele Entwickler, die vim als IDE verwenden, und es gibt eine Syntaxhilfe für alle Sprachen. Es hat Plugins und Plugin-Management-Systeme - das ganze Caboodle; andere ressourcen erklären dies besser, aber der punkt ist, dass sie vim massiv mit plugins und ihren eigenen konfigurationsdateien anpassen können. Wenn Sie vim kennen, wird es mit ziemlicher Sicherheit eine gute Gelegenheit für Sie geben, es zu nutzen.

Es ist schwierig, zwischen zwei Funktionssätzen, die genau so gut wie Emacs und vim sind, eine eindeutige und schnelle Unterscheidung zu treffen, aber ich werde diese subjektive Beobachtung machen. Denken Sie an meinen früheren Vergleich mit dem Kochmesser zurück. Am Ende benutzt der Koch das Messer nur als Werkzeug - ein großartiges Werkzeug, ja, und ein sehr sorgfältig ausgewähltes, aber dennoch ein Werkzeug, das der eigentlichen Arbeit, auf die sie sich konzentriert, nachgeordnet ist. In diesem VIM-Vergleich manifestiert sich dies oft als VIM-Benutzer, die VIM so gut verstehen, wie sie es müssen, aber letztendlich VIM als Mittel zum Zweck und nicht als Selbstzweck betrachten.

Bild eines Chefs bei Chez Panisse

Emacs andererseits ...

Da mir dies nicht klar war, als ich anfing, Emacs zu verwenden, sollte ich es hier erläutern: Sie verwenden keine vim, wie Sie Emacs verwenden. Wenn ich vim im Terminal benutzte, öffnete ich es Dutzende, wenn nicht sogar Hunderte Male am Tag. Es ist wohl besser, Dateien in vim in Registerkarten oder Fenstern zu öffnen, aber es war so schnell, dass ich nie das Bedürfnis hatte, und ich mochte das Schließen des Öffnens und Schließens, da es keinen Overhead gab. (Dies ist ein Grund, warum es so gut mit tmux oder virtuellen Konsolen- / Terminal-Multiplexsystemen funktioniert.) Emacs wird mit einer merklichen Verzögerung von 2 bis 3 Sekunden geladen. Wenn Sie es also mit vim vergleichen, indem Sie es so verwenden, als ob es vim wäre, und es 10 Mal in einer Stunde in Ihr Terminal laden, werden Sie sich fragen, warum irgendjemand diese Leistung akzeptieren würde schlagen.

Die Antwort lautet: Sie tun es nicht. Du machst es falsch. In emacs öffnen Sie Ihren Editor zu Beginn Ihres Arbeitstages nur einmal. Anschließend können Sie das Terminal in Emacs im Shell- oder im Eshell-Modus öffnen. Beachten Sie den Umschalter: Anstatt vim in Ihrem Terminal auszuführen, führen Sie jetzt Ihre Shell in Emacs aus. Oder gröber: Auf dem Terminal werden vim und andere Dinge ausgeführt, während auf dem Emacs Terminal und andere Dinge ausgeführt werden. Wie dieser Ansatz impliziert, werden im Laufe der Zeit immer mehr Dinge in Emacs konsolidiert. Der Trend geht dahin, dass Emacs-Power-User in Emacs „wohnen“ und nur noch Besorgungen und fehlerhafte Aufgaben im Freien erledigen (z. B. überprüfen, wie etwas im Chrome-Browser dargestellt wird).

Aber ist Emacs nicht ein Redakteur? In einem Interview mit dem großen Sacha Chua wurde Emacs einmal als virtuelle Lisp-Maschine beschrieben, und ich denke, das ist ein sehr hilfreicher Rahmen dafür.

Persönlich halte ich Emacs für den logischen nächsten Schritt für Leute, die sagen: "Ich liebe die Befehlszeile" oder "Ich verbringe so viel Zeit wie möglich auf der Befehlszeile." Emacs ist da, um Ihre Befehlszeilenpräferenz zu aktivieren - und zu übernehmen es auf die nächste Ebene. Jetzt haben Sie uneingeschränkte Kontrolle über Tastaturanpassungen und können darüber hinaus Ihre Umgebung direkt mit Lisp-Anpassungen programmieren (obwohl es eine Menge hilfreicher Vereinfachungszauber gibt, die fast jeder verwendet; Sie müssen keinen Compiler erstellen) von Grund auf neu, um dies zu verwirklichen (oder etwas ähnlich Übermenschliches).

Mit Emacs erhalten Sie diese große, unbeschriftete braune Schachtel. Im Inneren ist die Schachtel vollgepackt mit Werkzeugen, die eng in ihrem Platz verstaut sind. Viele der Tools wirken sehr funktional und nicht besonders inspiriert, aber sie erledigen ihre Aufgabe, und es ist die kollektive Kraft dieser Tools zusammen, die das Genie des Herausgebers ausmacht. Die Metallstange für sich? Langweilig. Aber wenn Sie das in einer Maschine mit Anbaugeräten zum Bohren von Löchern, Verlegen von Kabeln und Ausheben von Kernen verwenden, können Sie mit Emacs dorthin gelangen.

Wenn Emacs ein Spiel wäre, wäre es so etwas wie Minecraft, außer dass es wahrscheinlich rauer und modfokussierter wäre. Es ist eine offene Welt. Das eröffnet eine Menge Möglichkeiten, enormen Raum für Kreativität und Pionierarbeit - aber auch eine Menge Raum für nicht sehr produktives Herumwandern und Nichtstun. Wenn Sie das Kochmesser nicht interessiert, werden Sie es ablegen und etwas tun, das nicht kocht. Wenn Sie jedoch zögern, bietet der Emacs die Versuchung, unendlich viele (unnötige) Anpassungsmöglichkeiten zu nutzen.

In der Praxis ist es jedoch oftmals sehr schwierig, den Unterschied zwischen unnötiger Überoptimierung und einer Art und Weise zu erkennen, die sich später auszahlt.

Was wäre, wenn die Felswand links ein weiteres Loch hätte?

Mit Emacs konnte ich Emacs Lisp, eine Skriptsprache (ein Backup für das, was ich mit meinen Lisp-Kenntnissen nicht machen konnte), und eine API zu einem zusammenhängenden Ganzen zusammenfügen, das mir das Strukturieren und Überlegen erleichtert meine Arbeit. Es machte es auch einfacher, Probleme anhand meiner eigenen Kriterien zu trennen und zu eskalieren. Ich war in der Lage, etwas zu strukturieren, das oft wie ein formloses Durcheinander wirkte, und eine ganz andere Präsentation zu erstellen, als ich es über eine Benutzeroberfläche eines Drittanbieters akzeptieren musste.

Emacs hat dies nicht in einzigartiger Weise möglich gemacht, aber es hat viel dazu beigetragen, dass es ein natürlicher, inkrementeller Prozess wurde. Auf der anderen Seite muss ich zugeben, dass bei Emacs die Gefahr eines Bikesheddings und sinnloser Nabelschau besteht, die ich einfach nicht als angemessenes Risiko für Vim wahrnehme.

Zum Schluss noch ein kleines Problem: Da Emacs versucht, so viel in eine begrenzte Tastatur zu stecken, sind die Tasten näher beieinander und ich finde es etwas stressiger an den Fingern. Es gibt nur ein Limit für die Anzahl der Tastenkombinationen, die Sie auf kleinem Raum speichern können, und mit Emacs kommen Sie dem sehr nahe.

Schlussfolgerungen

In meinem Fall fühlte es sich so an, als hätte ich vim so hart gedrängt, als ob es Sinn gemacht hätte, meinen skurrilen Anwendungsfall anzuwenden, und um zur nächsten Ebene zu gelangen, müsste ich lernen, den Editor selbst zu programmieren. Das bedeutete VimScript oder Emacs Lisp, und das war aus den oben beschriebenen Gründen eine einfache Antwort. Ich hatte auch das Gefühl, dass Emacs ein Status-y-Furnier hat, das ich genauso gut von innen lernen könnte, die Oberseite des Lichtschwertvergleichs, um mein eigenes Urteil darüber zu fällen (endgültiges Fazit: ehh).

Aber als ich bei Emacs einstieg, stellte ich fest, dass die im Editor enthaltene Shell hilfreich ist, und ich habe auch gehört, dass andere Leute dies als ihre Lieblingsfunktion zitieren. Da der Zugriff mit einem Tastendruck so einfach ist und Sie sich mit Emacs-Bindungen darin bewegen können, kann ich mich viel schneller und bequemer fortbewegen als zuvor. Es war beispielsweise hilfreich, eine JSON-Anfrage an eine API zu richten (egal wie lange), einen Bildlauf durchzuführen, eine Datenzeile zu kopieren und diese dann in eine Datei zu springen und einzufügen.

Auf dem Papier klingt das Äquivalent in vim nicht viel schwieriger: Leiten Sie die JSON-Ausgabe in eine Datei um. öffne die Datei; Kopieren Sie die Zeile, öffnen Sie eine andere Datei und fügen Sie sie ein - wahrscheinlich in beiden Fällen in der Größenordnung von Sekunden. In der Praxis fühlt sich diese Erfahrung in Emacs jedoch weicher und etwas natürlicher an. Sie werden nie auf dieses Problem gestoßen, wenn Sie denken, dass Sie die Ausgabe nicht in weniger umleiten müssen, und können jetzt nicht sehen, was Sie wollten, weil der Bildlauf zu weit nach oben und weg ist (in diesem Fall: Ausgabe umleiten auf eine Datei…). Es ist keine große Sache, aber es fühlt sich so an, als würde Emacs die Räder meines Terminals schmieren und es ein wenig komfortabler machen.

Leider kann ich trotz ständiger Übung nur so viele widersprüchliche Tastenkombinationen gleichzeitig in meinem Kopf halten und kann feststellen, dass ich mit Vim merklich unbeholfener werde 3. Monat des Emacs-Wechsels, gerade jetzt). Aber wenn sich meine Ziele ändern, kehre ich gerne zurück. Ich neige dazu, den einen oder anderen Modus zu verwenden und andere Editor-Emulationsmodi (böser Modus) zu überspringen, weil sie subtile Konflikte hervorrufen, die mich abschrecken.

Ich möchte eine schlechte Zweiteilung vermeiden, die ich implizit gesehen habe, wo vim die Kelle für dumme Arbeiter und Emacs das Lichtschwert von genialen Ingenieuren ist. Zunächst einmal: nein. Zweitens, wenn das in meiner Präsentation wahr erscheint, habe ich Emacs stärker angepasst als ich es vim getan habe. Sie können die Verwendung von vim einfacher anpassen als es der durchschnittliche Emacs-Benutzer tut. Letztendlich hörte ich damit auf, weil ich dachte, es wäre besser, in diese Zeit das Erlernen von Lisp (in seinem Emacs-Dialekt) zu investieren als VimScript (das nirgendwo außerhalb von Vim verwendet wird und auf dem Markt keine Währung hat) ). Da es einfacher war, von Emacs Lisp zu Clojure zu springen, als von VimScript zu irgendetwas anderem, entschied das.

Ich hoffe, dass dies für den Leser einen nützlichen Kontext für das Denken und einige Tipps bietet, wie Sie mit Ihrem Editor im Laufe der Zeit wachsen können. Fazit: Ich mag vim lieber, wenn es nicht konfiguriert ist, für schnelle, schnelle Änderungen und dafür, dass ich auf einer geraden Linie zu einem vordefinierten Ziel gehe. Ich mag Emacs mehr wegen des halb produktiven, halb spaßigen, halb vermasselten Potentials seiner Modi und der Lisp-fähigen Möglichkeiten, die im Laufe einer Karriere mehr Aufwärtspotential haben. Persönlich möchte ich auch, dass die Community von beiden größer wird, und ich persönlich möchte, dass weitere Emacs-Lisp-Artikel auftauchen. Ich hoffe, dass dieser Artikel seinen Teil dazu beiträgt.

Letzter Haftungsausschluss und humorvolle Anekdote: Vor einiger Zeit habe ich mit einem Typen zusammengearbeitet, der als Emacs-Typ bezeichnet wurde, während ich der Vim-Typ war. Er würde mich ansprechen, wenn ich endlich Emacs lernen würde, und ich würde sagen - Immer noch auf der Bucket List. Ich wechselte den Arbeitsplatz und nahm ihn in einer Übergangsphase wieder auf. Vor nicht allzu langer Zeit traf ich ihn beim Mittagessen und wir mussten unser lang erwartetes Emacs-Gespräch führen.

Hier war meine große Enthüllung: Ich sagte, die Killer-Features seien Emacs Lisp-Funktionen und die Shell, und erwartete, dass er sofort zustimmen würde, dass dies auch seine Gewinner waren. Stattdessen sagte er: „Oh, ich benutze diese niemals.“ Er meinte es so; Sie waren Nullen in seinem eigentlichen Verwendungsbuch. Für ihn waren es Makros, für die ich persönlich wenig Verwendung gefunden hatte. Also weißt du es nie; Am Ende ist es eine sehr persönliche Entscheidung. Probieren Sie beide aus und gehen Sie zu Ihrem Favoriten.