Intro

Schon im ersten Semester wurde uns in Betriebssysteme I ans Herz gelegt einen "vernünftigen" Editor zu lernen. Damals habe ich kurz den vimtutor durchgearbeitet, gelernt wie man sich mittels "hjkl" bewegt und dachte jetzt bin ich vim User. Schon nach kurzer Zeit habe ich jedoch, außer zu editieren von config Dateien, etwas anderes benutzt. Zum Programmieren eine IDE wie Eclipse oder den QtCreator zum Schreiben von Latex Dokus eine Tex-Umgebung wie TexStudio oder ähnliches. Erst jetzt wo ich mich mehr und mehr mit HTML/CSS Geschichten befasse und auch immer öffter ohne Graphische Benutzeroberfläche unterwegs bin, vermisste ich einen "normalen" Edtior der etwas mehr kann als nur Buchstaben eingeben und einfache Copy & Paste Befehle. Mittlerweile bin ich äußerst zufriedener vim Nutzer und verwende vim Befehle nicht nur innerhalb von vim, sondern auch im Browser, in der IDE oder um Latex zu schreiben.
Die Wege vim "richtig" zu lernen sind vielfältig doch ich möchte im folgenden meine persönlchen Erfahrungen zum vermutlich besten Editor der Welt schildern.
can't quit vim

0. ESC Taste

vim lebt von seinen Modi und dem schnellen Wechsel der Modi. Damit dies überhaupt möglich ist muss meiner Meinung nach die ESC Taste umbelegt werden.
Ich persönlich habe die ESC Taste mit der CAPS-Lock Taste getauscht, da ich diese äußerst selten benötige und sie leicht zugänglich ist. Nach der Umbelegung nutze ich sie auch in anderen Anwendugen viel intensiver, z.B. um aufpoppende Dialoge zu schließen. Wie das Umbelegen durchgeführt werden kann findet sich in zahlreichen Anleitungen.[1]

1. Practical vim

Den mit Abstand größten Erkenntnissgewinn brachte mir das Buch "Practical vim" von Drew Neil. Denn hier wird, im Gegensatz zu anderen vim Büchern wie "vim gepackt", nicht nur aufgelistet was vim für Funktionen bietet, sondern auch wie die genannten Funktionen sinnvoll angewendet werden können. Die meisten hier aufgeührten Tipps können in dem Buch nachgelesen werden.

2. Bewegung

Jeder der weiß was vim ist hat davon gehört, dass man sich in vim normalerweise nicht mit den Pfeiltasten, sondern mit "hjkl" bewegt. Schön und gut, nach einer Weile gewöhnt man sich sogar dran. Aber was bringt das für Vorteile? Die Antwort ist: keine oder besser gesagt fast keine denn obwohl die Tasten, wenn man ein 10-Finger-Schreibsystem beherrscht, besser erreichbar sind als die Pfeiltasten ist die Steigerung der Effizienz eher gering.
Um die Vorteile von vim wirklich zu nutzen sollte man direkt auf die Bewegungen die auf Wörtern basieren umsteigen. Zum Beispiel w um den Cursor ein Wort vorwärts zu bewegen, e um an das Ende eines Wortes zu springen und b um an den Beginn eines Wortes zu gelangen. Wo ich gerade bei Wörtern bin: es ist wirklich äußerst hilfreich zu wissen wo der Unterschied zwischen einem wort und einem WORT ist. Selbst in den Zahlreichen Youtube Tutorials zu vim sehe ich oft selbsternannte "vim Profis" per "hjkl" ewig hin- und herwandern.
Weiterhin ist der f bzw. der F Befehl, der direkt ersten Fund des eingegebenen Zeiches springt, äußerst nützlich. Statt wie will auf der l Taste rumzuhämmern, kann man mit f_ schnell und elegant zum Unterstrich in folgendem Satz springen, wenn sich der Cursor derzeit am Anfang des Satzes befindet.

Dies █st ein wirklich langer Satz, bei dem in der
Mitte ein Unter_strich durch einen Bindestrich ersetzt werden soll.

Das klappt natürlich nur bei Zeichen die nicht zu oft vorkommen, ein fe führt in den seltensten Fällen zum Erfolg.

3. Suche

Heutige Rechner können innerhalb von Millisekunden selbst große Dateien durchsuchen. Warum diesen Vorteil nicht nutzen. Ich habe durch das Austesten einer fremden .vimrc^n bemerkt, dass für die Suche eine neue Tastenbelegung (in diesem Fall die Leertaste) vergeben wurde und begann prompt intensiver Gebrauch davon zu machen. Da viele Operatoren mit der Suche interagieren macht sich das äußerst Positiv bemerkbar. Auch im Browser (in dem ich mittlerweile das vimperator[1:1] Plugin nutze) führt mich eine Suche innerhalb einer Seite meist wesentlich schneller zum Ziel, als lässtiges auf und ab scrollen.
Eine der besten Erkenntnisse war der gn Befehl, mit dem man auf einem Suchergebniss operieren kann [1:2]. Viel zu oft habe ich manuell ein "Search & Replace" durchgeführt, weil eben nicht alle vorkommen ersetzt werden sollten, sondern nur ein paar bestimmte. Mittlerweile nutze ich eine Suche, dann cgn um das Wort zu ändern und anschließend . um die Ersetzung zu wiederholen. Soll ein vorkommen nicht ersetzt werden springe ich einfach mit n zum nächsten und kann wieder den Punktbefehl . verwenden.

4. Do it the vim way

In meiner vim Euphorie kam es oft vor das ich oft versucht habe coole Features aus anderen Editoren mittels Plugins in vim nachzuahmen. Zum Beispiel gibt es auch für vim ein multiple-cursors Plugin, was die aus Emacs und Sublime Text bekannte Funktion Text an mehreren Stellen gleichzeitig zu editieren ermöglicht. Mittlerweile habe ich festgestellt, das ich das Plugin nie nutze. Der einfache Grund dafür ist, das der "vim Weg" meist wesentlich einfacher und komfortabler ist. Warum sollte man beispielsweise Text an mehreren Stellen gleichzeitig editieren wollen?
Um Text (beim Programmieren insbesondere Variablen) umzubenennen:
Hier hilft ein klassisches Suchen & Ersetzen mit dem :s Befehl weiter wenn alle vorkommen geändert werden sollen. Mittels c Flag fragt vim bei jedem Vorkommen nach ob es ersetzt werden soll oder nicht.
Wenn es viele Ausnahmen der Ersetzung gibt, ist das oben beschriebene cgn Vorgehen hilfreich.

Text soll an mehreren Stellen eingefügt werden?
Dann hilft ein visueller Block mittels C-v gefolgt von I einzufügender Text + ESC weiter.
Dies ist nur eines von vielen Beispielen wie in vim bestimmte Probleme erledigt werden können. Viele weitere Probleme können mittels Punktbefehl . oder unter Nutzung von Makros gelöst werden, wobei es hier zu beachten gilt, dass die Bewegungen innerhalb der Makros korrekt eingegeben werden.

5. Speak the vim dialect

Bereits im vimtutor wird dazu geraten die Befehle und Tastenkombinationen nicht auswendig zu lernen, sondern sie mehrfach anzuwenden und dadurch im Kopf zu behalten. Leichter fällt es jedoch wenn man sich gedanklich vorspricht, was man denn gerade tun möchte. Ein einfaches Beispiel ist der Befehl ciw den man als change inner word ausprechen kann. Das mag am Anfang komisch erscheinen, doch erstaunlicherweise hilft es. Hat man einmal diesen Dialekt verinnerlicht, ist klar, was man eingeben muss um z.B. den gesamten Inhalt eines HTML-Tags zu ändern: cit change inner tag. Dabei muss man sich nur einprägen, dass es i innere und a äußere Textobjekte gibt (das a kann man sich auch mit arround merken). Wenn man des englischen etwas mächtig ist bekommt man auch schnell daB delete arround Brackets hin (wobei B für geschweifte Klammern steht). Weitere Eselsbrücken sind t für till wie z.B. vt. sämtlichen Text bis zum nächsten Punkt markiert (visual to .).

6. Erweiterbarkeit

Auch wenn ich oben vom zu intensiven Plugin Gebrauch aberaten habe, wäre vim nicht vim, wenn es nicht so enorm erweiterbar und konfigurierbar wäre. Ich verzichte an dieser Stelle an eine Auflistung der besten Plugins, da solche Listen tausendfach im Netz rumschwirren, möchte aber erwähnen, dass eine Suche nach "gewünschtes Feature vim Plugin" in 99% der Fälle erfolgreich ist. Grundsätzlich sind die von Drew Neil vorgestellten Plugins einen Blick wert und auch tPope hat in Sachen Plugins einiges zu bieten. Einfache Faustregel: Nicht übertreiben :)

Fußnoten

  1. http://vimcasts.org/episodes/operating-on-search-matches-using-gn/ ↩︎ ↩︎ ↩︎