Vim (Miscellaneous Commands) [German]

Diese Seite enthält eine Aufstellung nützlicher Befehle für den vi/vim.
Der Befehl vimtutor führt einen sanft in die Bedienung des Vim ein.

= Modi des vim =

Meistbenutzte Modi des vim:

Normal-/Befehlsmodus

  • Anfangszustand des vim: Von ihm aus erreicht man alle anderen Modi.
  • Durch 2 x ESC von überall erreichbar.

Einfügemodus

  • Vom Normalmodus aus durch Eingabe des Zeichens i (insert).
  • Zum Normalmodus hin durch Drücken von ESC oder CTRL+C
  • Fast jedes eingegebene Zeichen wird in die Datei geschrieben (bis auf bspw. ESC)

Kommandozeilenmodus

  • Vom Normalmodus aus durch Eingabe von : (Doppelpunkt)
  • Zum Normalmodus hin durch Drücken von ESC.

Visueller Modus

Vom Normalmodus aus durch Eingabe von

  • v (normales Markieren),
  • V (zeilenweise markieren) oder
  • CTRL+V (blockweise).

= Basisbefehle =

Durch wiederholtes Drücken von ESC erreicht man immer wieder den Anfangs-/Befehlsmodus.

Bewegungsbefehle

Bewegen kann man den Cursor über die Pfeiltasten oder über hjkl, was etwas schneller, aber auch gewöhnungsbedürftig ist, da man in der Zehnfingerstellung verbleiben kann.

Den Zeilenanfang erreicht man mit ^ oder der Null 0, das Zeilenende mit $.

Die aktuelle Zeilenummer erhält man mit CTRL+G.
Den Dokumentenanfang erreicht man mit gg, das Dokumentenende mit G.
An eine beliebige Zeile, sagen wir 1023, kann man sich durch den folgende Befehl bewegen:

Das nächste Wort erreicht man mittels w (word), das vorige Wort mit b(back), zum Wortende” des aktuellen Wortes kommt man mittels e

Jedem dieser Bewegungsbefehle kann man einen Faktor voranstellen, der angibt, wie häufig die Operation ausgeführt werden soll: Bei der Eingabe von 3w bewegt man sich 3 Wörter vorwärts.

Einfügen

Ausgangspunkt ist der Normalmodus. Die folgenden Befehle wechseln in den Einfügemodus:

  • Befehl i (insert): Einfügen vor dem markierten Zeichen
  • Befehl a (append): Einfügen nach dem markierten Zeichen
  • Befehl O: Einfügen einer leeren Zeile vor der aktuellen Zeile
  • Befehl o: Einfügen einer leeren Zeile nach der aktuellen Zeile

Kopieren

Ausgangspunkt ist der Normalmodus.

  • Befehl yy (yank): Kopieren der aktuellen Zeile (danach mit p einfügen)

Löschen

Das Löschkommando setzt sich aus dem Löschoperator d und einer Bewegungsrichtung zusammen; man kann alle oben erwähnten Bewegungsbefehle (^,$,e,w,2w,b,3b,…) nutzen.

  • Befehl dw (delete word):
    • * innerhalb eines Wortes: aktuelles Wort löschen
    • * innerhalb von Leerzeichen: alle Leerzeichen bis zum nächsten Wort löschen
  • Befehl d$ (delete bis $) löscht alles bis zum Ende der Zeile (inkl. aktuelles Zeichen)

Etwas anders verhält es sich mit dem Löschoperator für ganze Zeilen: Um eine Zeile zu löschen, tippt man

Genau wie zuvor bei den Bewegungsrichtungen gibt es auch hier die Möglichkeit, eine Wiederholungszahl anzugeben.
Um bspw. 3 Zeilen (die aktuelle und die beiden folgenden) zu löschen, wählt man:

Ersetzen

Aus dem Normalmodus heraus kann man mit dem Befehl r (Replace) ganz bequem einzelne Zeichen ersetzen.
Möchte man das aktuell markierte Zeichen durch ein q ersetzen, dann tippt man:

Man kann auch größere Bereiche mit dem Befehl c (Change) ersetzen, dabei gelten die oben genannten Bewegungsrichtungen (0,$,e,b,…).
Nach dem Befehl ist man im Einfügemodus und gibt den Ersatztext ein.

Undo, Redo und Repeat

  • Mittels u (Undo) macht man den letzten Befehl rückgängig.
  • Mittels U (Undo) wird die aktuelle Zeile wiederhergestellt.
  • Der Befehl CTRL+R (Redo) wird der zuletzt mittels u zurückgenommenen Befehl wieder ausgeführt.

Dies ist nicht zu verwechseln mit einer Wiederholung des zuletzt durchgeführten Befehls: . (Punkt, Repeat).

Zwischenablage

Der Löschbefehl wirkt wie ein Ausschneiden in einem normalen Texteditor:
Die gelöschten Zeichen werden zwischengespeichert und man kann sie einfügen mittels p (Paste oder Put), dabei wird der Inhalt der Zwischenablage stets nach der aktuellen Cursorposition eingefügt, was bei ganzen Zeilen (dd,2dd,…) dazu führt, dass die neue Zeile unter der aktuellen eingefügt wird.

= Ansicht =

Zeilennummern anzeigen/verbergen

Im Befehlsmodus kann man mittels

Zeilennummern anzeigen lassen und diese mit

wieder verbergen.

Die aktuelle Zeilennummer erhält man am unteren Bildschirmrand mit Ctrl+G.

Ansicht der aktuellen Datei aktualisieren (Refresh)

Aktuelle Datei neu laden:

Mehrere Dateien öffnen (Tabs)

Neue Datei öffnen:

Zum vorherigen Tab springen:

Zum nächsten Tab springen:

Datei des aktuellen Tabs schließen:

Alle Tabs schließen:

= Anwendungsfälle =

Man Page eines Befehls öffnen

Die zu einem Befehl gehörige Man Page kann man öffnen, indem man den Cursor im Namen des Befehls platziert und den Befehl K startet.
Verlassen kann man die Man Page wie gewohnt mit q.

Eine referenzierte Datei öffnen

Wenn man im Vim entwickelt, möchte man manchmal eine Datei öffnen, die bspw. bei C/C++ mit einem #include eingebunden wird.
Im Vim ist dies sehr einfach:
Man bewegt sich mit dem Cursor auf den Namen der referenzierten Datei und startet den Befehl (go file):

Leere Zeilen entfernen

Der Befehl :g/[regex]/[cmd] nimmt einen regulären Ausdruck [regex] (hier ^$^ ist der Zeilenanfang, $ das Zeilenende) und wendet das zuletzt stehende Kommando [cmd] (hier d) auf alle zutreffenden Zeilen an.

Suchen ohne Ersetzen

Im Befehlsmodus: Suche (case insensitive) nächstes Vorkommen von type:

Nächsten Treffer anzeigen: n drücken; vorherigen Treffer anzeigen N drücken.

Case Sensitive Search

Die Suche im vim ist standardmäßig case insensitive.
Um die Suche case sensitive zu machen, muss die Sequenz \C in die Suchanfrage aufgenommen werden:

…findet also nur den Term Type, nicht aber type, TYpe etc.

Suchen und Ersetzen

Alle Vorkommnisse (g) von foo innerhalb einer Zeile durch bar ersetzen:

Alle Vorkommnisse (g) von foo innerhalb einer Datei durch bar ersetzen:

Weitere/alternative Optionen zu g:

  • c (confirm) bestätige jede Ersetzung
  • i (ignore case) Groß-/Kleinschreibung ignorieren (d.h. im Beispiel würden auch Foo, fOo, etc. durch bar ersetzt)
  • kein g nur in der aktuellen Zeile ersetzen

Blockweise einkommentieren

Quelle: [http://notfaq.wordpress.com/2006/07/28/vim-comment-blocks-of-code/]

  • Erste Spalte des zu kommentierenden Textblocks markieren (Ctrl+v, kann mittels Ctrl+v auch wieder verlassen werden)
  • In den Einfügemodus wechseln mit I (großes i).
  • Zeilenkommentarzeichen eingeben (bspw. # bei der BASH oder // bei C)
  • ESC, um den Einfügemodus zu verlassen
  • (Manchmal erscheinen die Zeichen erst, wenn man eine weitere Taste drückt)

Blockweise auskommentieren

Haben alle Zeilen dengleichen Anfang (bspw. ###), dann kann man wie in vorigem Abschnitt vorgehen:

  • Die zu löschenden Kommentarzeichen als Textblock markieren (Ctrl+v, kann mittels Ctrl+v auch wieder verlassen werden)
  • Löschen mittels x.
  • Der Editor kehrt automatisch in den Anfangsmodus zurück.

Leave a Reply

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

Please type the characters of this captcha image in the input box

Please type the characters of this captcha image in the input box