I ❤ Vim

Bildnachweis: http://www.xaprb.com/blog/2014/04/15/sublime-text-vim-go/%22/

Im März 2016 habe ich einen Talk mit den Titel "Vim, Tmux, Ftw" auf dem Bremer Webmontag vorgetragen. Der Talk handelte davon dass ich meinen Software Stack größtenteils in die Commandline verlagert habe. Ein großer Teil des Vortrages handelt von Vim, meinem Editor of Choice. Der folgende Artikel ist nun die Grundessenz meines Talks.

Vorab: Dieser Artikel ist kein Versuch andere Texteditoren zu diskreditieren, sondern eher eine Auflistung von Gründen warum ich so überzeugt von Vim bin. Editoren wie Sublime Text oder Atom haben alle ihre eigenen Vorteile und sind weit davon weg in irgendeiner Art minderwertig oder schlecht zu sein. Im Gegenteil, ich finde sie sogar sehr gut durchdacht und habe jahrelang mit dieser Software gearbeitet und will keinen Moment davon eintauschen.

Vor circa zwei Jahren wechselte ich von Sublime Text auf Vim. Eine Entscheidung die von vielen meiner Kollegen (wahrscheinlich bis heute) ungläubig belächelt wird. Warum sollte jemand die Vorteile einer IDE wie IntelliJ oder eines gut durchdachten Editors wie Sublime Text in den Wind schiessen und stattdessen einen Texteditor nutzen der seine Ursprünge in den Siebzigern hat?

Anfangs scheint ist nicht wirklich sehr logisch. Die in jedem "Vim for Beginners" erwähnte Lernkurve ist durchaus real. Insbesondere wenn man die gängigen Benutzungskonzepte moderner Software verinnerlicht hat (und damit meine ich schon low-level Sachen wie Speichern, Laden und Beenden).

Meine erste Woche mit Vim war voller Selbstzweifel und Fragen, denn ich war genau das Gegenteil von "Schnell & Produktiv". Aufgaben die ich vorher in kurzer Zeit erledigt zu haben schien, haben doppelt und dreifach so lang gebraucht. Ich fühlte mich als hätte ich nur einen Arm und könnte nur den Ringfinger nutzen. Und in dem hatte ich gerade einen Krampf. Nicht sehr optimal.

Vim isn't an editor designed to hold its users' hands. It is a tool, the use of which must be learned. — vim.org

Sobald die Grundlagen aber verstanden sind, merkt man schnell warum Vim bis heute immer noch so religiös abgefeiert wird so beliebt ist.

Modal Editing

Nun, Pascal Precht hat die Antwort im Jahr 2014 schon sehr gut zusammengefasst:

Developers are lazy and very clever at the same time. We're able to customize our environment to make it work in a way we want it to work. We spend a lot of time in thinking about how to automate repetitive tasks because we don't want to repeat ourself over and over again. We try to make things with as less effort as possible to get as much things as possible done. We don't want to waste time. We want to be productive.

Und genau dass ist der Punkt. Produktivität.

Ein Aspekt der Bedienung ist bis heute unübertroffen. Das modale Bearbeiten bzw. modal editing.

Vim besitzt mehrere Modi, jede mit ihren eigenen Zweck. Den Insert Modus sollte jeder kennen. Erreichbar mit i, dann Text eingeben. Fertig. Spannender ist der "Normal" Mode. Hier können mit wenigen Tastenanschlägen schnell eine Vielzahl von Operationen durchgeführt werden. Soll Text markiert werden, hat man den "Visual Mode". Anschliessend wechselt man in den "Command" Modus und speichert seine Datei.

Nun könnte man sich die Frage stellen inwiefern all diese Modi in irgendeiner Art und Weise hilfreich sind. Der typische Arbeitstag in der Entwicklung besteht nicht aus der Eingabe von Code - eher das Gegenteil, wahrscheinlich ist dies eher die am geringsten ausgeführte Tätigkeit. Die meiste Zeit besteht aus dem Bearbeiten von Code und Text 1. Und genau hier scheint Vim hervor: Sobald man einmal im Normal Mode ist und die grundlegenden Motions verstanden hat, will man nicht mehr zurück.

Motions

Als Vi in den 70er konzipiert wurde, war der Lear-Sieger ADM-3A weit verbreitet. Schaut man sich die Tastatur dieses (garnicht so unschönen) Computers an, sieht man dass die Pfeiltasten nicht vorhanden sind. Und so wurde hjkl geboren. Anfangs gewöhnungsbedürftig, später will man nicht mehr ohne.

Hier ist das Problem. Wir haben eine Datei, aber keine Maus. Wie navigiert man durch die Datei - und dass ohne immer und immer wieder auf eine Richtungstaste zu hämmern?

Die Antwort sind Cursor Motions (:h cursor-motions). Drückt man im Normal Mode die w Taste, springt der Cursor zum Anfang des nächsten Wortes. Drückt man e springt man zum Endes des Wortes. Will man sechs Wörter weiter kann man wwwwww drücken. Oder aber, und dass ist sicherlich die bessere Wahl, man drückt 6w. Jede Cursorbewegung laesst sich kombinieren oder mit Zahlen multiplizieren.

Gängige Cursor Motions für In-File Navigation sind:

  • h j k l : Pfeiltasten
  • gg G: Anfang / Endes des Dokuments
  • H M L: Oben / Mitte / Unten relative zum aktuellen Bildschirmausschnitts
  • 0 _ $: Sprung zum Anfang der Zeile / Ersten nicht-leeres Zeichen / Ende der Zeile
  • w, e: Erster / Letzter Buchstabe des nächsten Wortes
  • b: Erster Buchstabe des vorherigen Wortes
  • f{n}: Nächster Buchstabe {n}

Dies gilt auch für Textoperationen wie z.B. Kopieren (y, yank) oder Löschen (d, delete). Und auch diese lassen sich mit den Cursor Motions zusammensetzen. Das ermöglicht ziemlich cooles: Eine literale Textverarbeitung.

  • Möchte man den Inhalt zwischen zwei eckigen Klammern ändern, drückt man ci[. Übersetzt: change in [.
  • Sollen die Klammern gleich mitgeändert werden, drückt man ca[ bzw. change around [.
  • Alles bis zum Ende der Zeile kopieren? Einfach y$ drücken.
  • Die nächsten drei Wörter in Grossbuchstaben umwandeln? gU3e!
  • Und falls sich wer fragt was d2fn macht, die Antwort lautet: Lösche alle Wörter bis zum zweiten Mal der Buchstabe n kommt.

Oder um Harry Roberts aus seinen Artikel "Vim for people who think thinks like vim are weird and hard" zu zitieren:

This method of thinking about how you want to manipulate your text, and then Just Doing It™, gives rise to the phrase editing at the speed of thought. No matter how complex your operation might seem, think it, and you can do it.
[..]
Anyone who is familiar with the Single Responsibility Principle will already see the huge, huge benefit this brings. Instead of rigid commands that only do one big, specific thing, we can piece together the bits we want as we want them. Subway operates on the Single Responsibility Principle in order to serve very customisable food via the same core ingredients.

Ok, jetzt kommt normalerweise der Einwurf: "Ok, cool - aber wie zum Teufel kann man sich das alles merken?" . Die Antwort ist ganz einfach: Muscle Memory - und dass ist jetzt nicht der Name einer fancy Vim App, sondern das Verinnerlichen der Befehle. Bis es so selbstverständlich ist wie Ctrl / CMD + S zu drücken 2.
Niemand denkt sich: Ich muss speichern, dann muss ich CTRL + S drücken. Und jetzt ist es gespeichert. Das Vorhaben zu speichern löst bereits in unseren Händen einen Automatismus aus und die Hände gehen schon von selbst zu den entsprechenden Tasten. Und das ist Muscle Memory.

Eine große Hilfe um die Grundlagen zu lernen bringt Vim mit. Und zwar der Vimtutor. Dieser lässt sich im Terminal duch den Befehl vimtutor starten und zeigt schrittweise die Grundlagen. Und auch wenn man Vim schon einige Zeit nutzt, es ist nie verkehrt einfach mal alle paar Monate den Vimtutor zu öffnen und sich ein paar Befehle wieder ins Gedächtnis zu rufen. Und wer es etwas spielerischer mag, versucht Vim Adventures.

Erweiterbarkeit und Konfiguration

Ein weiterer großer Pluspunkt für Vim ist eindeutig die Flexibilität und Anpassbarkeit. Ziemlich jeder Aspekt lässt sich in Vim konfigurieren. Wirft man einen Blick auf meine .vimrc sieht man, dass ich diesen Aspekt auch stark nutze. Sitze ich an einem mir fremden Rechner oder arbeite auf einen Remote Server, kann ich mit sehr hoher Wahrscheinlichkeit davon ausgehen dass Vim bereits installiert ist. Ich kann nun meine dotfiles laden und direkt so arbeiten wie ich es gewöhnt bin.

Ich schaue mir sehr oft die .vimrc Konfigurationen von anderen Vim Nutzern an, kopiere mir was mir gefällt und teile auch meine Konfiguration. Und ich denke dass ich selbst in 10 Jahren noch neue praktische Snippets und Shortcuts finden werde, auf die ich nie gekommen wäre. Und dass ist auch die Essenz der Vim Community - gegenseitiges Helfen und Inspirieren.

Einsteigertipps

Sollte dieser Artikel jemanden angesprochen haben, habe ich noch ein paar Tips:

  • Zehn-Finger-Tastschreiben. Oder ein ähnliches System. Eure Finger sollten schon wissen an welcher Stelle sich welche Taste befindet.
  • Nutzt den vimtutor, er hilft ein Grundverständnis aufzubauen. Startet ihn am besten anfangs in wiederkehrenden Zeiträumen. Ihr bereut es nicht und das Muscle Memory wird es euch danken!
  • Die gängige Empfehlung, die ich so unterschreiben kann: Startet mit einer leeren .vimrc Datei. Lernt die Grundlagen und erweitert Vim so wie ihr es benötigt. Und das wichtigste: Teilt eure Konfiguration!
  • Sobald man relativ Vim-sicher ist, sollte man sich Plugins anschauen. Installiert euch einen Plugin Manager wie z.B. vim-plug. Eine ganz neue Welt von Syntax Highlighting, Snippets, Color Schemes und Tools wird euch erwarten.
  • Und falls ihr mit eurem Leben noch nicht zu sehr ausgelastet seid, ...
  • ... probiert doch mal das US Tastaturlayout. Dies hilft nicht nur in Vim, denn fast alle Shortcuts in gängigen Programmen basieren auf diesem Layout. Schonmal gefragt warum CTRL + Z so schlecht zu erreichen ist? Weil es eigentlich auf Y liegen soll. Und falls du Programmierer bist, Zeichen wie [, ], { und } sind viel besser zu erreichen.
  • Schaut euch Nick Nisi's Vortrag an. Ich teil mit ihm sehr viele Standpunkte und hab mir auch ein paar Ideen für meinen Talk ausgeliehen

  • Besorgt euch ein Cheatsheet und druckt es aus. Lernt es zu lieben.
  • Das Subreddit r/vim ist ein guter Anlaufpunkt für Inspiration und Tips
  • Drew Neil hat auf Vimcasts Webseite viele Videotutorials zu inzwischen wohl ziemlich jeden Aspekt von Vim.
  • Und wenn wir schon bei Drew Neil sind - sein Buch "Practical Vim" ist eine wahre Goldgrube an Tips

Zum Schluss

Wie ich anfangs schrieb geht es mir nicht darum andere Editoren und IDE's madig zu machen. Denn egal ob man Vim, Sublime Text, IntelliJ oder Eclipse benutzt, dass eigentlich wichtige was ich gelernt habe ist - lernt euren Editor. Es sind Werkzeuge und wenn man Werkzeuge richtig nutzt, steigt die eigene Produktivität. Shortcuts, Konfigurationen und Plugins gibt es heutzutage in fast jeden modernen Editor 3.
Schärft gelegentlich eure Tools, denn dass ist was ihr tagtäglich benutzt.

Und ich habe noch nicht einmal über Plugins geredet. Aber das wird wohl ein Thema für ein anderes Mal sein.

:wq

  1. Ich schrieb nie ein Buch, denke aber dass ein typischer Autor hier nicht viel anders arbeitet

  2. Dass passiert schneller als man denkt. Schon bald wünscht man sich dass jeder Editor so funktioniert. Ich hatte bereits nach kurzer Zeit Probleme einen anderen Editor als Vim zu nutzen - an vielen Stellen finden sich dann Vim Spuren wie ein :wq oder hhhhkyp. Um so mehr freue ich mich über Vim Keybindings wie in Atom oder auf Webseiten wie Codepen, auch wenn diese bei weitem nicht mit dem Original mithalten können. Aber dass ist ein Thema für ein anderes Mal.

  3. Wenn nicht, solltet ihr euch doch vielleicht überlegen euch mal nach einer Alternative umzusehen