Kommandozeilen-Modus¶
Im Kommando-Modus können sowohl Vim-Befehle als auch externe Systembefehle aufgerufen werden.
Ausgehend vom Normalmodus gelangt man mittels :
in den Kommandozeilen-Modus,
mittels Esc
wieder zurück.
Buffer einlesen¶
Eine neue Datei kann mit :e
geoffnet werden, wobei die bisherige Datei im
Hintergrund geladen bleibt.
:e dateiname |
eine Datei öffnen bzw. neu erstellen |
:e % |
die aktuelle Datei neu laden |
Der Inhalt einer anderen Datei kann mittels :r
hinter der momentanen
Cursor-Position eingefügt werden:
:r dateiname |
Inhalt einer Datei vor dem Cursor einfügen |
Buffer wechseln¶
Um Vim zu beenden oder einzelne Dateien bzw. Fenster zu schließen, gibt man folgendes ein:
:q |
Schließe den aktuellen Buffer schließen (und beende Vim, falls nur ein Fenster offen ist) |
:qa |
Schließe alle Buffer, beende Vim |
:q! |
Schließe den aktuellen Buffer, verwerfe ungespeicherte Änderungen |
:w |
Speichere Änderungen an der aktuellen Datei |
:wq |
Speichere die aktuelle Datei und schließe den Buffer |
:w Dateiname |
Speichere den aktuellen Buffer als Dateiname |
In Vim können mehrere Dateien auf einmal geoffnet sein. Im Umgang mit diesen sogenannten “Buffern” sind folgende Befehle hilfreich:
:ls |
Zeige eine Liste an geöffneten Dateien an | (identisch mit :buffers ) |
:bn |
Gehe zur nächsten offenen Datei | (buffer next) |
:bp |
Gehe zur vorherigen offenen Datei | (buffer previous) |
:bf |
Gehe zur ersten geöffneten Datei | (buffer first) |
:bl |
Gehe zur letzten geöffneten Datei | (buffer last) |
:b 1..99 |
Gehe zur Datei Nr. 1..99 der Bufferliste |
|
:bd |
Lösche die aktuelle Datei aus der Buffer-Liste | (buffer delete) |
Mittels :bufdo
kann man (einen oder mehrere mittels |
(“Pipe”)
verknüpfte) Befehl(e) auf alle geöffneten Dateien loslassen:
:bufdo Kommando |
Führe ein Kommando in allen geöffneten Buffern aus |
Das Gleiche kann man allerdings auch (meist sicherer) mittels einer Makro-Aufzeichnung erreichen.
Externe Befehle¶
Externe Programme können im Kommando-Modus integriert werden, indem dem
jeweiligen Aufruf ein !
vorangesetzt wird, wie zum Beispiel:
:ls |
Zeige eine Liste der geoffneten Buffer an (Vim-interne Funktion!) |
:!ls |
Gebe den Inhalt des Arbeitsverzeichnisses aus (gewöhnlicher Linux-Befehl) |
:.!sh |
Ersetze die momentane Zeile (. ) durch die Rückgabe der Shell |
Wird ein beliebiger Bereich vor dem Ausrufezeichen angegeben (z.B. %
für
die gesamte Datei oder .
für die aktuelle Zeile), so wird die Rückgabe des
aufgerufenen Befehls an entsprechender Stelle in die Datei geschrieben.
Für längere derartige Aufrufe können natürlich wiederum in der Konfigurationsdatei entsprechende Mappings vergeben werden. Danach genügt im Normal- oder Einfügemodus ein individuelles Tastenkürzel, und der dadurch definierte Prozess wird ausgeführt.
Ebenso ist es möglich, externe Kommandos nur auf einen bestimmten Bereich (z.B. im visuellen Modus) anzuwenden:
'<,'> !sort |
Sortiere den visuell markierten Bereich ('< bis '> ) |
'a,'b !grep Wort |
Lösche alle Zeilen zwischen den Markern a und b , die nicht
Wort enthalten |
:r !grep "Test" Datei |
Lese die Ausgabe von grep ein und füge sie nach der aktuellen Stelle
in die Datei ein |
Das externe Kommando muss also nicht an erster Stelle in der Kommandozeile erscheinen.
Text ersetzen¶
Gezieltes Ersetzen von Text erfolgt in Vim nach folgendem Schema:
:Bereich s/Suchbegriff/Ersetzung/Optionen
Als Optionen stehen dabei zur Verfügung:
c |
Frage bei jedem Treffer nach | (confirmation) |
g |
Beachte alle Vorkommen des Suchbegriffs (nicht nur den ersten Treffer in jeder Zeile) | (global) |
i |
Ignoriere Groß- / Kleinschreibung | (ignore case) |
Wird der Befehl auf einen visuell markierten Bereich angewandt, so werden
dessen Grenzen '<
, '>
als Bereich angenommen. Ansonsten kann jeder
beliebige Zeilenbereich, mit Komma getrennt, angegeben werden. Möchte man
Ersetzungen in der ganzen Datei vornehmen, so steht dafür %
als
Auswahlbereich zur Verfügung.
Beispiel:
:% s/alt/neu/g |
Ersetze alt durch neu in der ganzen Datei |
:1,20 s/alt/neu/g |
Ersetze alt durch neu in den ersten 20 Zeilen |
Kommt der Schrägstrich selbst im Suchbegriff vor, kann auch jedes andere
Zeichen zur Trennung von Suchbegriff, Ersetzungen und Optionen gewählt
werden. Das erste Zeichen nach dem s
wird dann als Trennzeichen
verwendet (z.B. :%s #/pfad/#irgendwas#
).
Reguläre Ausdrücke¶
Das Suchen und Ersetzen von Textstücken lässt sich durch so genannte reguläre Ausdrücke oft wesentlich erleichtern bzw. beschleunigen. Hierzu können spezielle Zeichen verwendet werden, die jeweils einem bestimmten Suchmuster entsprechen.
Werden die folgenden Zeichen in einem Such- oder Ersetzungsbefehl verwendet, so
werden sie als reguläre Ausdrücke interpretiert. Möchte man das jeweilige
Zeichen in seiner Grundbedeutung interpretiert haben, so muss ein \
(Backslash) davor platziert werden:
\ |
Sonderbedeutung des nächsten Zeichens aufheben (“\” entspricht einem Backslash) |
^ |
Zeilenanfang |
$ |
Zeilenende |
\r |
Zeilenende (carriage return) |
\t |
Tabulator |
. |
Ein beliebiges Zeichen |
* |
Multiplexer: Das vorhergehende Zeichen null mal oder beliebig oft |
[ ] |
Selektierer: Eines der Zeichen innerhalb der eckigen Klammern |
[^ ] |
Selektierer mit Negation: Ein Zeichen, das nicht in der eckigen Klammer vorkommt |
& |
Nur im Ersetzungsbereich: Textstelle, auf die das Suchmuster zutrifft. |
Ebenso gibt es Zeichen, die in einem Such- oder Ersetzungsbefehl als “normale”
Zeichen interpretiert werden, jedoch durch Voranstellen eines \
eine
Sonderbedeutung bekommen:
\< |
Wortanfang |
\> |
Wortende |
\( \) |
UND-Verknüpfung: Gruppierung mehrer Suchmuster zu einem Ausdruck |
\| |
ODER-Verknüpfung: Der links oder der rechts von \| stehende Ausdruck |
\_. |
Ein beliebigs Zeichen, auch Zeilenende-Zeichen (Suche über Zeilenumbrüche hinweg) |
\+ |
Multiplexer: Das vorhergehende Zeichen einmal oder beliebig oft. |
\? |
Multiplexer: Das vorhergehende Zeichen null oder ein mal. |