Kommandozeilen-Modus¶
Im Kommandozeilen-Modus können sowohl Vim-Anweisungen als auch externe Systemanweisungen aufgerufen werden.
Ausgehend vom Normalmodus gelangt man mittels :
in den Kommandozeilen-Modus,
mittels Esc
wieder zurück.
Buffer einlesen¶
Eine neue Datei kann mit :edit
(oder kurz :e
) als neuer Buffer geöffnet
werden, wobei die bisherige Datei als eigener Buffer im Hintergrund geladen
bleibt.
:e dateiname |
eine Datei öffnen bzw. neu erstellen |
:e % |
die aktuelle Datei (% ) neu laden |
Das Zeichen %
hat im Kommandozeilen-Modus eine eigene Bedeutung: Es steht
für den Namen der aktuell geöffneten Datei. Die Ausgabe von %
lässt sich
unter anderem folgendermaßen ändern:
% |
Aktueller Dateiname |
%:~ |
Aktueller Dateiname (relativ zum Home-Verzeichnis) |
%:p |
Aktueller Dateiname (absoluter Pfad) |
%:p:h |
Aktuelles Verzeichnis (“Head” des absoluten Pfads) |
%:p:h:h |
Übergeordnetes Verzeichnis (“Head” des aktuellen Verzeichnisses) |
%:p:r |
Aktueller Dateiname ohne Endung (absoluter Pfad) |
%:e |
Endung der aktuellen Datei |
Eine vollständige Beschreibung kann mittels :h filename-modifiers
aufgerufen werden.
Der Inhalt einer anderen Datei kann mittels :read
(oder kurz :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 |
:wqa |
Speichere alle geöffneten Dateien und beende Vim |
:w Dateiname |
Speichere den aktuellen Buffer als Dateiname |
Auch die Schreib-Anweisung kann nur auf einen bestimmten Textbereich angewendet
werden. Beispielsweise kann man mit :1,25w dateiname
die ersten 25
Zeilen der Datei in den angegebenen Dateinamen schreiben, oder man kann einen
Text visuell markieren und dabei :w
eingeben; in der Kommandozeile wird
dabei automatisch '<,'>w
angezeigt, wobei '<,'>
den visuell markierten
Bereich bezeichnet.
In Vim können mehrere Dateien auf einmal geöffnet sein. Im Umgang mit diesen Buffern sind folgende Anweisungen 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# |
Gehe zur zuletzt verwendeten Buffer | |
: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 eine (oder mehrere mittels |
(“Pipe”)
verknüpfte) Anweisung(en) auf alle geöffneten Dateien anwenden:
:bufdo Anweisung |
Führe eine Anweisung in allen geöffneten Buffern aus |
Das Gleiche kann man allerdings auch (meist sicherer) mittels einer Makro-Aufzeichnung erreichen.
Aufrufe von externen Programmen¶
Externe Programme können im Kommandozeilen-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öhnliche Linux-Anweisung) |
:.!sh |
Ersetze die momentane Zeile (. ) durch die Rückgabe der Shell |
Wird ein beliebiger Bereich vor dem Ausrufezeichen angegeben (z.B. %
für die
aktuelle Datei oder .
für die aktuelle Zeile), so wird die Rückgabe der
aufgerufenen Anweisung an entsprechender Stelle in die Datei geschrieben.
Die Ausgabe eines externen Programms kann wiederum mittels :r
unmittelbar
hinter der aktuellen Cursorposition eingelesen werden. Um beispielsweise die
Ausgabe von !ls
in den Buffer aufzunehmen, kann man folgendes eingeben:
:r !ls
Im Normalmodus kann auch !!
anstelle von :!
eingegeben werden, um
externe Programme aufzurufen.
Externe Programme können unter anderem eingesetzt werden, um die aktuelle Datei
zu compilieren. Um beispielsweise eine aktuell geöffnete LaTeX-Datei in ein
.pdf
-Dokument umzuwandeln, kann man folgendes eingeben:
:!pdflatex %
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 Programme 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 Programm 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 eine dieser Anweisungen 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#
).
Bisweilen ist es auch hilfreich, “seltsame” Zeichen in einer Textdatei zu
ersetzen, beispielsweise wenn Text aus einer .pdf
-Datei mittels
pdftotext
in eine Textdatei extrahiert wird. Die zu löschenden Zeichen
können dann visuell markiert und mittels y
in die Vim-interne Zwischenablage
kopiert werden. In der Kommandozeile kann der so kopierte Inhalt dann mittels
<c-r> *
wieder eingefügt werden.
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 einer Such- oder Ersetzungsanweisung 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 einer Such- oder Ersetzungsanweisung 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. |
Teile eines regulären Ausdrucks, die beim Suchen mittels \(
und \)
gruppiert werden, können im neuen Ausdruck mittels \1
, \2
, \3
usw.
wieder aufgegriffen werden, wobei beispielsweise \1
den ersten gruppierten
Ausdruck bezeichnet. Die Textstelle, die beim Suchen auf den gesamten
regulären Ausdruck zutrifft, kann beim Ersetzen mittels \0
referenziert
werden.