Christian's Vim Page For Programmers Vim - I love it

Nützliches

Kommandos down

Hier einige nützliche und nicht unbedingt geläufige Kommandos, die insbesondere für Programmierer interessant sind.

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.
:bufdo 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} 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} 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-Home Setze Cursor an Dateianfang.
ctrl-End Setze Cursor an Dateiende.
gd Setze Cursor an die lokale Deklaration der Varialbe unter dem Cursor (Suche nur innerhalb der Funktion).
gD Setze Cursor an die globale Deklaration der Varialbe unter dem Cursor.
[ctrl-i Setzt Cursor in die Zeile, in der das Wort unter dem Cursor zum ersten mal vorkommt. Dabei werden auch die in die aktuelle Datei importierten Include-Dateien durchsucht.
[ctrl-d Setzt Cursor in die Zeile, in der das Makro unter dem Cursor zum ersten mal definiert wird. Dabei werden auch die in die aktuelle Datei importierten Include-Dateien durchsucht.
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
 
 
Vervollständigung
ctrl-n

Im Textmodus(!): Durchsucht vorwärts diverse Dateien nach Worten, die mit dem Schlüsselwort beginnen, das vor dem Cursor steht. Das Schlüsselwort wird entsprechend ergänzt. Liegen mehrere Treffer vor, können diese mit weiteren ctrl-n durchgeschaltet werden.

Gibt es z.B. in einem Programmierprojekt die Funktionen ThisIsAFunction() und ThisIsAFunctionToo() so führt die Eingabe von
  Thisctrl-n 
zu
  ThisIsAFunction 
und die nochmalige Eingabe von ctrl-n zu
  ThisIsAFunctionToo 

'complete' legt fest, welche Dateien nach Schlüsselwörtern durchsucht werden. Mehr Informationen siehe unter :help complete.
ctrl-p Im Textmodus(!): wie ctrl-n, Suche erfolgt aber rückwärts.
 
 
Einfügen
ctrl-v, I, //, ESC Bereich auskommentieren (C++): mit ctrl-v den auszukommentierenden Bereich markieren, dann I drücken und die Kommentarzeichen // eingeben und abschließend ESC drücken.
 
 
Dateien
gf Öffne Datei, dessen Name unter dem Cursor steht (insbesondere für Include-Dateien interessant). 'path' bestimmt, in welchen Verzeichnissen gesucht wird.
 
 
Hilfe
K Öffne Man-Page zu dem Wort unter dem Cursor.
Tipps + Tricks up

Hier ein paar Tipps+Tricks in ungeordneter Reihenfolge.

  • HTML

    Vim bietet bekanntlich die :make Funktion an, mit der ein Projekt übersetzt werden kann. Anschließend kann ggf. die Fehlerliste durchsucht werden; der Cursor springt dabei an die Stelle im Source-Code, für die der Compiler einen Fehler oder eine Warnung generiert hat.

    Für HTML-Dateien gibt es zwar keinen Compiler, aber sogenannte Validatoren (müßten eigentlich Verifikatoren heißen - naja, tun sie aber nun mal nicht). Diese Validatoren überprüfen, ob eine HTML-Datei den Spezifikationen zu HTML entspricht. Wenn nicht, werden entsprechende Meldungen ausgegeben.

    Ein solcher Validator ist tidy, und genau den unterstützt auch Vim.

    Geben sie ein
    :compiler tidy
    und anschließend
    :make (oder <F5> drücken)

    Die HTML-Datei, die in dem Puffer steht, aus dem heraus Sie :make aufgerufen haben, wird von tidy geprüft. Werden Fehler gefunden, kann die Fehlerliste mit :cnext und :cprevious durchgesteppt werden.

    tidy muß natürlich auf dem System installiert sein. Hier gehts zur tidy Homepage.
  • Jump to tag

    Zu dem Tag unter dem Cursor springt man laut Doku zu Vim mittels ctrl-]. Das stimmt für Linux, unter Win32 geht das aber leider aus Gründen, denen ich bisher nicht nachgegangen bin, nicht. Unter Win32 muß man stattdessen ctrl-+ verwenden.