Kommandos

Hier sind einige nützliche und nicht unbedingt geläufige Kommandos aufgeführt, die insbesondere für Programmierer interessant sein könnten.

Suchen

*
Suche innerhalb der aktuellen Datei nach dem Wort unter dem Cursor.
n   weitersuchen vorwärts
N   weitersuchen rückwärts
:grep
Suche über mehrere Dateien hinweg.
Z.B.: „:grep foo path/*.c path/*.h“ durchsucht alle Dateien mit Index .c oder .h im Verzeichnis „path“ nach dem Wort foo.
Navigation: (wie bei :make)
:cnext Cursor an nächste Fundstelle
:cprevious Cursor an vorherige Fundstelle
:clist listet alle Fundstellen auf
:copen öffnet Auswahlliste
Fehlt die Pfadangabe „path“, wird im aktuellen Verzeichnis gesucht.
[i
Zeigt die erste Zeile, in der das Wort unter dem Cursor vorkommt. Dabei werden auch die in die aktuelle Datei importierten Include-Dateien durchsucht.
[I
Zeigt alle Zeilen, in denen das Wort unter dem Cursor vorkommt. Dabei werden auch die in die aktuelle Datei importierten Include-Dateien durchsucht.
[d
Zeigt erste Makro-Definition für das Makro unter dem Cursor. Dabei werden auch die in die aktuelle Datei importierten Include-Dateien durchsucht.
[D

 Zeigt alle Makro-Definitionen für das Makro unter dem Cursor. Dabei werden auch die in die aktuelle Datei importierten Include-Dateien durchsucht.

Suchen und Ersetzen

:args {files}
:argdo s//
Suchen und Ersetzen in allen durch {files} definierten Dateien.
Beispiel:
:args *.[ch]
:argdo %s/TODO/DONE_NOW/ge | update
Ersetzt ohne Rückfrage in allen *.c und *.h Dateien TODO durch DONE_NOW und speichert die geänderten Dateien.
Verwendet man als Flags /gec statt /ge erfolgt vor jedem Ersetzen eine Rückfrage. Wird | update weggelassen, werden die geänderten Dateien nicht gespeichert.
:buffdo s//
Suchen und Ersetzen in allen Puffern.
:windo s//
Suchen und Ersetzen in allen Fenstern.

 Gehe zu

%
Bewege den Cursor an
  • korrespondierende Klammer (, {, [, ], }, )
  • Gegenstück zum C-Kommentar (/* bzw. */)
  • Gegenstück zu #if, #ifdef, #else, #elif oder #endif
m{a-z}
‚{a-z}
Setze Markierung an die aktuelle Cursorposition. Mit `{a-z} kann diese Markierung wieder angesprungen werden. Die Markierung ist nur innerhalb der aktuellen Datei gültig.
m{A-Z0-9}
‚{A-Z0-9}
Setze Markierung an die aktuelle Cursorposition. Mit `{A-Z0-9} kann diese Markierung wieder angesprungen werden. Die Markierung ist im Gegensatz zu den {a-z} Markierungen global gültig und kann somit auch von einer anderen Datei aus angesprungen werden.
ctrl-o
ctrl-i
ctrl-o setzt den Cursor an den vorherigen Eintrag in der Jump-Liste, ctrl-i an den nachfolgenden. Nähere Info unter :help jump-motions
I
Gehe zum ersten Zeichen in der Zeile und wechsle in den Insert mode.
A
Gehe zum letzten Zeichen in der Zeile und wechsle in den Insert mode.
ctrl-F
Scrolle eine Seite runter.
ctrl-B
Scrolle eine Seite hoch.
H
Setzen Cursor an den Seitenanfang.
L
Setze Cursor an das Seitenende.
M
Setze Cursor in die Seitenmitte.
zz
Platziere Cursor und Fenster in der Seitenmitte.
zt
Platziere Cursor und Fenster am Seitenanfang.
zb
Platziere Cursor und Fenster am Seitenende.
ctrl-E
Fenster zusammen mit Cursor nach oben scrollen.
ctrl-Y
Fenster zusammen mit Cursor nach unten scrollen.
^
Setze Cursor an das erste Zeichen der Zeile.
0
Setze Cursor an die erste Spalte der Zeile.
$
Setze Cursor an das letzte Zeichen der Zeile.
w / W
Gehe ein wWord vorwäarts, setze Cursor an Wortanfang.
e / E
Gehe ein wWord vorwärts, setze Cursor an Wortende.
b / B
Gehe ein wWord rückwärts, setze Cursor an Wortanfang.
ge / gE
Gehe ein wWord rückwärts, setze Cursor an Wortende.
f / F{char}
Gehe bis zum nächsten/vorherigen {char} in der Zeile, in der der Cursor steht. Setzt man dem Kommando beispielsweise ein Delete-Kommando voran, ergibt sich ein „lösche von aktueller Cursor-Position bis einschließlich Zeichen {char}„. Change und Yank-Kommando sind ebenfalls in Kombination mit f/F sinnvoll.
Beispiele:
df{char}    Lösche von Cursorposition bis einschließlich {char].
yf{char}    Yank von Cursorposition bis einschließlich {char].
2df{char}    Lösche von Cursorposition bis einschließlich dem zweiten  {char].
t / T{char}
Wie f/F, aber Cursor steht ein Zeichen vor/nach {char}.
:
Wiederhole letztes t, T, f, F in Vorwärtsrichtung.
,
Wiederhole letztes t, T, f, F in Rückwärtsrichtung.
+, –
Bewege den Cursor rauf/runter, er wird in der Zeile am ersten nicht-Leerzeichen platziert.
]]
Gehe zum nächsten ‚{‚-Zeichen in der ersten Spalte (= nächste C-Funktion).
[[
Gehe zum vorherigen ‚{‚-Zeichen in der ersten Spalte (= vorherige C-Funktion) .
‚[ / `[
Setze den Cursor an den Anfang der letzten Visual-Selection oder Änderung.
‚] / `]
Setze den Cursor an das Ende der letzten Visual-Selection oder Änderung.
gp / gP
Paste und setze Cursor ans Ende.
‚.
Setze den Cursor an den Anfang der Zeile, in der die letzte Änderung im aktuellen Puffer erfolgt ist.
`.
Wie ‚. aber springt an die genaue Position innerhalb der Zeile.
gf
Öffne die Datei, dessen Name unter dem Cursor steht (insbesondere für Include-Dateien interessant). ‚path‘ bestimmt, in welchen Verzeichnissen gesucht wird.

Ändern

=
Indent selection, shiftwidth bestimmt Einrücktiefe.
d’a
Lösche von der aktuellen Zeile bis zu der Zeile, in der sich Marke a befindet.
d`a
Lösche von der aktuellen Cursorposition bis zur Position von Marke a.

Einfügen

ctrl-v, I, {chars}, ESC
Diese Kommandosequenz fügt in den selektierten Zeilen an der ersten selektierten Spalte die getippten Zeichen {chars} ein. Um z.B. einen Code-Bereich auszukommentieren, kann die Sequenz ctrl-v, I, //, ESC verwendet werden. Das genau Vorgehen wäre: Mit ctrl-v die Zeilen und die Spalte auswählen, in denen die Zeichen // eingefügt werden sollen. Dann I drücken, dann die beiden Zeichen // und dann ESC. Vim fügt dann // in den selektierten Bereich ein.

Falten

zM
Alle Folds einklappen.
zR
Alle Folds öffnen.

Auswahl von Textobjekten

Vim kennt Textobjekte wie „Wort“, „Satz“, „Absatz“, „()-Block“, „{}-Block“, „<>-Block“, Tag-Block, String, usw. usw…
Details dazu sind unter :help text-objects beschrieben.
Diese Textobjekte können mittels Kommandos ausgewählt werden.
Dabei kann mit einem vorangestellten a oder i angegeben werden, ob das Objekt mit der Objektbegrenzung (Whitespaces, Klammern usw.) ausgewählt werden soll (a wie „a“n object) oder nur der innere Teil, ohne die Begrenzung (i wie inner).
Bearbeiten kann man die Textobjekte, wenn der Auswahl noch ein Kommando wie Delete (d), Change (c), Visual (v) oder Yank (y) vorangestellt wird.

 

daw, caw, vaw, yaw
diw, ciw, viw, yiw
Delete, change, visually select bzw yank das Wort unter dem Cursor. Textobjekt ist „word“, also eine Abfolge von Buchstaben, Ziffern und der Underscore, die durch Whitespaces begrenzt sind.
daW, caW, vaW, yaW
diW, ciW, viW, yiW
Delete, change, visually select bzw yank das Wort unter dem Cursor. Textobjekt ist „WORD“, also eine Abfolge von beliebigen Zeichen, die durch Whitespaces begrenzt sind.
da(, ca(, va(, ya(
di(, ci(, vi(, yi(
Delete, change, visually select bzw yank den ()-Block, in dem sich der Cursor befindet. Mit diesen Kommandos kann z.B. der (…)-Block eines ifs oder einer for-Schleife bearbeitet werden.
da{, ca{, va{, ya{
di{, ci{, vi{, yi{
Delete, change, visually select bzw yank den {}-Block, in dem sich der Cursor befindet. Mit diesen Kommandos kann z.B. der {…}-Block eines ifs, einer for-Schleife oder einer Funktion bearbeitet werden.
da“, ca“, va“, ya“
di“, ci“, vi“, yi“
Delete, change, visually select bzw yank den String, in dem sich der Cursor befindet.
da<, ca<, va<, ya<
di<, ci<, vi<, yi< 
Delete, change, visually select bzw yank den <>-Block, in dem sich der Cursor befindet. Mit diesen Kommandos kann z.B. der Inhalt eines Start- oder Ende-Tags einer HTML/XML-Datei bearbeitet werden.
dat, cat, vat, yat
dit, cit, vit, yit
Delete, change, visually select bzw yank den Tag, in dem sich der Cursor befindet. Ein Tag ist ein <a>....</a>.

Sonstiges

<c-r>=
Rechnen mit dem Expression-Register. Dazu <ctrl-r>= in der Kommandozeile drücken. Beispiel: <ctrl-r> = drücken, dann eine Formel eingeben, z.B. 4*3.2+3<cr>
Als Ergebnis erscheint 15.6 im Text. Komplexere Funktionen sind möglich (cos()…).
Um eine Hex-Zahl auszugeben: printf("%04X", 100)<cr> ergibt 0064