Bash vi-Modus

Ich arbeite ja viel in der Bash und nutze auch vim für die Textbearbeitung. Irgendwann kam mir die Idee, die Bash selbst mit vi-Befehlen zu steuern. Das ist tatsächlich möglich und spart eine Menge Zeit, wenn man die Tastenkombinationen erst einmal verinnerlicht hat.

Konfiguration

Bash kann mit vi-Befehlen gesteuert werden. Dazu muss lediglich entweder im Benutzerverzeichnis in die Datei .bashrc oder systemweit in die /etc/bash.bashrc eine Zeile eingetragen werden.

# Aktivieren des VI Modus -> Energie !
set -o vi

Konfiguration aktivieren

In der nächsten Session, zum Beispiel bei einem neuen Login, oder durch das Ausführen des Befehls source ~/.bashrc oder source /etc/bash.bashrc wird diese neue Einstellung aktiv.

Alternativ kann statt dem Befehl source auch der Befehl exec benutzt werden. Dieser ersetzt die aktuelle Shell mit einer komplett neuen Shell. Die alte Shell bleibt dann solange im Hintergrund, bis die neue Shell beendet wurde. Wie so eine Matrjoschka-Puppe.

vi-Modus aktivieren

Der vi-Modus wird aktiv, indem die ESC-Taste gedrückt wird. Und raus geht es wieder, indem i für Insert gedrückt wird. Oder es passiert automatisch, je nachdem welcher Befehl benutzt wurde, der dann automatisch in den INSERT- oder den APPEND-Modus wechselt. Also zurück in die alte Bash.

Das war schon alles. Aber hier noch zusätzlich ein paar nützliche Tastenkombinationen bei aktiviertem vi-Modus mit ESC als Bonus.

  • 0 oder ^^ springt an den Anfang der Zeile
  • $ springt an das Ende der Zeile
  • w springt zum nächsten Wort
  • b springt ein Wort zurück (back)
  • k geht einen Eintrag zurück in der Bash-History (analog die Pfeil-runter-Taste in der Bash)
  • l geht einen Eintrag vorwärts in der Bash-History (analog die Pfeil-hoch-Taste in der Bash)

Suche

  • f ZEICHEN sucht das nächste Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens)
  • F ZEICHEN sucht das vorherige Vorkommen von ZEICHEN (ohne Eingabe des Leerzeichens)
  • ; wiederholt die vorherige Suche, vorwärts oder eben auch rückwärts

Editieren

  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • I springt an den Anfang der Zeile und wechselt zum INSERT-Modus (und beendet den vi-Modus)
  • A springt an das Ende der Zeile und wechselt in den APPEND-Modus (und beendet den vi-Modus)
  • cc löscht die komplette Zeile und wechselt in den INSERT-Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT-Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT-Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT-Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT-Modus
  • ea springt zum Ende des aktuellen Wortes und wechselt in den APPEND-Modus
  • r ersetzt exakt nur das Zeichen über dem Cursor (bleibt im vi-Modus)
  • R wechselt in den Überschreibe-Modus
  • ~ schaltet die Gross- und Kleinschreibung des Zeichens über dem Cursor um
  • xp löscht das aktuelle Zeichen, rückt alle nachfolgenden Zeichen eines nach links und fügt das gelöschte Zeichen nach dem einen nachgerückten Zeichen wieder ein. Beispiel mit dem Cursor auf dem e wird aus heir wird hier

Löschen

  • dd oder D löscht die komplette Zeile
  • dw löscht ab der aktuellen Cursorposition bis zum Wortende
  • bdw springt an den Anfang des Wortes und löscht dann das ganze Wort
  • bd4w springt an den Anfang des Wortes und löscht dann 4 ganze Wörter (Leerzeichen zählen als Wörter)
  • x löscht das Zeichen unter dem Cursor
  • X löscht das Zeichen links vom Cursor
  • cc löscht die komplette Zeile und wechselt in den INSERT-Modus
  • C löscht den Rest der Zeile nach rechts und wechselt in den INSERT-Modus
  • cw löscht ab der aktuellen Cursorposition bis zum Wortende und wechselt in den INSERT-Modus
  • ciw löscht das Wort unter der aktuellen Cursorposition und wechselt in den INSERT-Modus
  • ci3w löscht ab dem aktuellen Wort (inklusive) drei Wörter ab der aktuellen Cursorposition und wechselt in den INSERT-Modus

Copy und Paste

  • y kopiert das aktuelle Wort unter dem Cursor
  • y3w kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • by3w springt an den Wortanfang und kopiert ab der aktuellen Cursorposition 3 Wörter (Leerzeichen werden als Wörter gezählt)
  • Y kopiert alles von der aktuellen Position bis zum Zeilenende
  • p fügt das zuvor Kopierte ab der aktuellen Cursorposition ein
  • P fügt das zuvor Kopierte vor der aktuellen Cursorposition ein

Quellen

Die Bash und vim sind als Open-Source-Software verfügbar.