|

Atom and vi(m): a dream comes true

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. 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. Aber jetzt ist ein Traum wahr geworden:

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ärts
  • b := ein Wort zurück
  • e := 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 Zeilenende
  • H := zurück zur ersten im Fenster sichtbaren Zeile
  • M := in die Zeile in der Mitte des Fenster
  • L := vorwärts in die letzte sichtbare Zeile

Text einfügen und ändern

  • i := unter dem Cursor Text einfügen
  • a := nach dem Cursor Text einfügen
  • r := das Zeichen unter dem Cursor ersetzen
  • cw := das Wort unter dem Cursor ersetzen
  • cc := die Zeile unter dem Cursor ersetzen
  • R := der Reihe nach alle Zeichen unter dem Cursor ersetzen bis man mit esc 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 Cursor
  • dw := löscht das Wort unter dem Cursor
  • dd := löscht die Zeile unter dem Cursor
  • D := 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 Puffer
  • yy := kopiert die Zeile unter dem Cursor in den Puffer
  • p := fügt den Puffer nach dem Cursor ein
  • P := fügt den Puffer vor dem Cursor ein

Rückgängig machen

  • u := die letzte(n) Veränderung(en) rückgängig machen
  • U := 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.

1 annotation for “Atom and vi(m): a dream comes true”

  1. Robert says:

    Atom und vi-mode, sehr spannend. Bin immer noch im Terminal unterwegs, wenn moeglich. Habe jetzt den VSCode entdeckt fuer TypeScript. Da werde ich doch mal schauen, ob der auch einen vi-mode hat. Danke fuer die Inspiration.

Leave a Reply

Your email address will not be published. Required fields are marked *

74 − = 66