Ich liebe den vi(m), insbesondere wenn ich in einem Repository arbeite. Es ist so leicht, schnell mal eben eine Datei per Konsole zu ändern, so einfach alle Trumps durch Biden zu ersetzen: :1,$ s/[Tt]rump/Biden/g
. Das hilft sogar bei Strato per ssh. Aber am Desktop habe auch ich bisher natürlich GUI basierte Editoren genutzt, Gedit z.B. Oder — seit einigen Monaten — Atom. Daher rutschten mir manchmal vi-Befehle wie xi
in meine Texte — weil ich vergessen hatte, dass ich einen Desktop-Editor benutzte. Das wird jetzt anders, Atom mit Vi(m)-Plugin sei Dank:
Das Plugin atom-vim-mode-plus — zu installieren mit dem Shell-Kommando apm install vim-mode-plus
— erlaubt uns, die vi(m)-Befehle im Atom zu nutzen!
Zu erst ein kleiner Vorbehalt …
Hat man das Package vim-mode-plus in Atom installiert, kann man nicht mehr direkt mit dem Tippen loslegen. Man muss vorher ein wenig mit den vi-modes vertraut werden: Lädt man eine Datei oder legt, eine neu an startet Atom im visual-mode. Das ist ein vi(m)-Modus, der Kommandos akzeptiert und auf den angezeigten Text anwendet. i
ist einer dieser Befehle. Er stößt den Wechsel in den insert-mode an und erlaubt uns, Text einzugeben. Um dann Befehle auf den gerade eingegebenen Text anzuwenden, müssen wir allerdings per esc
in den visual mode zurückkehren.
… dann einige beruhigende Worte …
Atom bietet von sich aus schon Optionen, seinen Text zu bearbeiten: Man kann Passagen selektieren, ausschneiden, kopieren und wieder einfügen, ganze Zeilen verschieben, Wörter in Großbuchstaben verwandeln u.Ä.m. All diese Möglichkeiten können auch mit installiertem vim-mode-plus genutzt werden, und zwar unabhängig davon, ob man im visual mode or in the insert mode arbeitet. Selbst das Atom eigene ‘Suchen-und-Ersetzen’ funktioniert wie erwartet. Das vim-mode-plus-Plugin erweitert also die Möglichkeiten unseres Editors ’nur’, es verändert sie nicht — außer dass man eben bei der Eingabe von Text den aktuellen Arbeitsmodus im Hinterkopf haben muss.
… und schließlich eine Liste neuer Möglichkeiten:
Der Nachteil der reinen Atom-Fähigkeiten ist, dass man die Maus benutzen muss. Das bremst. vi(m) bietet dagegen den Vorteil, alles über die Tastatur machen zu können. Das erhöht die Arbeitsgeschwindigkeit — selbst wenn man nur mit einem 3‑Fingersystem tippt. Hier ein paar zentrale Eigenschaften vom vi(m), die jetzt auch im Atom nutzbar sind:
Den Cursor platzieren:
Die vertrauten Pfeiltasten funktionieren wie erwartet, im visual-mode und im insert-mode). Die anderen Kommandos wirken dagegen nur im visual-mode:
- Mit den vim-‘Pfeilersatztasten’
h
,j
,k
,l
kann man den Cursor ebenso nach links, nach unten, nach oben und nach rechts bewegen. Legt man den Zeigefinger auf einer QWERTZ-Tastatur aufs h und die restlichen drei daneben, merkt man, wie organisch das funktioniert. Wenn man allerdings mit den Pfeiltasten so vertraut ist wie ich, wird man diese Option trotzdem eher selten benutzen.
Nützlicher sind da schon die Tasten
w
:= ein Wort vorwärtsb
:= ein Wort zurücke
:= zum Ende des Wortes, auf dem der Cursor steht(
:= zum Anfang des nächsten Satzes)
:= zum Anfang des aktuellen Satzes
Je größer die Distanz ist, die so ein Sprungbefehl zurücklegt, um so stärker die Arbeitsersparnis: Wenn man lange Zeilen mit weichem ‘Word-Wrapping’ als Quasi-Paragraphen verwendet, um dem Nutzer die Zeilen in einer zur gewählten Fensterbreite passenden Länge anzeigen zu lassen — wie es heutzutage oft bei md-Dateien oder in Mails geschieht — dann wird man es begrüßen, nicht mittels der Pfeiltasten Buchstabe für Buchstabe in einer Zeile vor oder zurück navigieren zu müssen. Die folgenden Tasten biete andere große Sprünge:
0
:= zurück zum Zeilenanfang$
:= vorwärts zum ZeilenendeH
:= zurück zur ersten im Fenster sichtbaren ZeileM
:= in die Zeile in der Mitte des FensterL
:= vorwärts in die letzte sichtbare Zeile
Text einfügen und ändern
i
:= unter dem Cursor Text einfügena
:= nach dem Cursor Text einfügenr
:= das Zeichen unter dem Cursor ersetzencw
:= das Wort unter dem Cursor ersetzencc
:= die Zeile unter dem Cursor ersetzenR
:= der Reihe nach alle Zeichen unter dem Cursor ersetzen bis man mitesc
wieder in den visual-mode wechselt
Mit den Kommandos i, a, cw, and cc geht ein Wechsel in den insert-mode einher.
Text löschen
x
:= löscht das Zeichen unter dem Cursordw
:= löscht das Wort unter dem Cursordd
:= löscht die Zeile unter dem CursorD
:= löscht den Rest der Zeile vom Cursor bis zu ihrem Ende
Der Vorteile der Befehle dw und dd ist, dass sie die gelöschten Teile in einen Puffer kopieren, von wo aus sie mittels p oder P auch an anderer Stelle wieder eingefügt werden können.
Kopieren und Einfügen
yw
:= kopiert das Wort unter dem Cursor in den Pufferyy
:= kopiert die Zeile unter dem Cursor in den Pufferp
:= fügt den Puffer nach dem Cursor einP
:= fügt den Puffer vor dem Cursor ein
Rückgängig machen
u
:= die letzte(n) Veränderung(en) rückgängig machenU
:= die Zeile unter dem Cursor wieder herstellen
Suchen
/ XYZ
:= nach dem String XYZ suchen
Regex basierte Ersetzungen
Der vi(m) bietet zusätzlichen einen executing-mode. Drückt man die Taste :
und gibt eine Zeilennummer samt Befehl ein, dann wird dieser Befehl auf den Text an der angegebenen Stelle angewendet. So würde z.B. der Befehl : 1,$ s/[Tt]rump/Biden/g
alle Vorkommen von Trump oder trump durch Biden ersetzen (s), und zwar von der ersten (1) bis zur letzten Zeile ($).
Solche Ersetzungen ausführen zu können, ist oft hilfreich. Unglücklicherweise kann vim-mode-plus selbst mit dieser Art von Kommandos nichts anfangen. Und sein Autor hat Vorbehalte, den ex-mode zu implementieren. Stattdessen empfiehlt er, zusätzlich das Plugin / Package ex-mode per apm install ex-mode
zu installieren.
Und tatsächlich funktioniert das bestens.
Fazit:
Die Plugins vim-mode-plus und ex-mode in Atom zu installieren, bietet uns wirklich die Möglichkeit, die Fähigkeiten eines graphischen Editors wie Atom und die vi(m)-Eigenschaften kombiniert zu nutzen. Mit anderen Worten: ein Traum ist wahr geworden.
Und in welchem größere Zusammenhang …
… steht dieser Text? Nun, mein Leben ist eingebettet in freie Software, Natur und Musik. Manchmal finde ich da abseitigere Wege und Tools, die es trotzdem wert sind, geteilt zu werden. Und sei es nur mit meinem vergesslichen zukünftigen ‘ich’. Dem ich gerne immer wieder einmal ein Strato über die Shell ans Herz lege. Oder passend erweiterte Editoren. Oder uralte Vorarbeiten. Manchmal möchte ich dieses ‘ich’ aber auch nur an Haltungen, Standpunkte und Einstellungen erinnern. Damit ich nicht hinter mich zurückfalle. Denn gesagt ist gesagt. Darum geht es auch in hier.
Im Übrigen: Männer sind mitgemeint.