Diese Seite soll eine schnelle Spickhilfe sein. Wer das erste Mal auf den vim trifft, sollte vorher den vimtutor1 starten, dort sind einige grundlegende Dinge meiner Meinung nach sehr schön erklärt.
Nachtrag: das wird wohl etwas größeres, vermutlich werde ich das Ganze aufteilen müssen.

Plugins

Vim läßt sich vielfältig durch plugins erweitern. Weiteres zu vim-plugins versteckt sich hier

Konfiguration

Meine Konfiguration mit einem Bildschirmfoto befindet sich hier

Die Modi

Die verschiedenen Modi des vim

i (insert), Eingabe vor dem aktuellen Zeichen.
a (append), Eingabe nach dem aktuellen Zeichen.
I (Insert), Eingabe am Anfang der aktuellen Zeile.
A (Append), Eingabe am Ende der aktuellen Zeile.
o neue Zeile und Eingabe nach der aktuellen Zeile.
O neue Zeile und Eingabe vor der aktuellen Zeile.
r Zeichen unter dem Cursor mit dem nächsten eingegeben Zeichen ersetzen (rX ersetzt das Zeichen unter dem Cursor mit X)
R wechselt in den Ersetzungsmodus
s wechselt in den Eingabemodus und entfernt oder ersetzt das Zeichen unter dem Cursor (sTEXT ersetzt das Zeichen mit TEXT)
S wechselt in den Eingabemodus und entfernt/ersetzt die ganze Zeile
cw wechselt in den Eingabemodus und entfernt/ersetzt das gesamte Wort ab und unter dem Cursor
v wechselt in den visuellen Modus
V wechselt in den visuellen Modus zum Arbeiten mit ganzen Zeilen
STRG-v Wechselt in den visuellen Modus zum Arbeiten mit Blöcken, also um z.B. einen Bereich mit drei Zeichen Breite und 5 Zeilen Höhe zu bearbeiten
ESC wechselt in den Normalmodus

Navigation, Cursor-Bewegungen

Bei h, l, j, k, w, e und b kann jeweils eine Zahl vorangestellt werden. Bei 5h bewegt sich der Cursor um 5 Zeichen nach links, bei 3b drei Wörter rückwärts.

h Bewegt Cursor ein Zeichen nach links
l Bewegt Cursor ein Zeichen nach rechts
j Bewegt Cursor eine Zeile nach unten
k Bewegt Cursor eine Zeile nach oben
w Bewegt Cursor ein Wort vorwärts auf das erste Zeichen
e Bewegt Cursor an das nächste Wortende
b Bewegt Cursor zum ersten Zeichen des vorhergehenden Wortes
$ Bewegt Cursor ans Zeilenende
2$ Bewegt den Cursor ans Zeilenende der nächsten Zeile
0 Bewegt Cursor an den Zeilenbeginn
ge Bewegt den Cursor zum letzten Zeichen des vorhergehenden Wortes
{ Bewegt den Cursor einen Absatz nach oben
} Bewegt den Cursor einen Absatz nach unten
gg Bewegt Cursor zur ersten Zeile
G Bewegt Cursor zur letzten Zeile
NG Bewegt Cursor zu Zeile N
:N (Kommandozeilenmodus) Wie NG
% Bewegt Cursor zu zugehörigen Zeichen unter dem Cursor. Beispielsweise kann so der Cursor von öffnender zu schließender Klammer (und umgekehrt) bewegt werden. Siehe auch :set matchpairs
fx Springt nach rechts zum nächsten Zeichen “x”
3fx Springt nach rechts zum dritten “x”
tx Springt nach rechts vor das nächste Zeichen “x”
Fx Springt nach links zum nächsten Zeichen “x”
Tx Springt nach links ein Zeichen vor Erreichen von “x”
30% Platziert den Cursor bei 30% des Dokuments (Zeilenanzahl)
H Springt auf die erste sichtbare Zeile
M Springt in die Mitte des sichtbaren Textes
L Spingt in die letzte Zeile des sichtbaren Textes
Xgt Gehe zu Tab X
XgT gehe X Tabs zurück
STRG-U Scrollt eine halbe Fensterseite nach oben
STRG-D Scrollt eine halbe Fensterseite nach unten
STRG-E Scrollt eine Zeile nach oben
STRG-Y Scrollt eine Zeile nach unten
STRG-F Scrollt eine Fensterseite minus zwei Zeilen nach unten
STRG-B Scrollt eine Fensterzeile minus zwei Zeilen nach oben
zz Zentriert die Anzeige auf die Zeile des Cursors

Kopieren, ausschneiden und einfügen

Kopieren und einfügen

Kopieren im visuellen Modus: Zuerst den Cursor am Anfang des zu kopierenden Textes platzieren, dann mit v in den visuellen Modus wechseln. Den Text markieren und mit y kopieren. An die gewünschte Stelle navigieren und mit p einfügen.

y die markierte Stelle kopieren

Kopieren im Normalmodus:

yw kopiert das nächste Wort ab aktueller Stelle
y} kopiert ab aktueller Position bis zum Ende des Absatzes
p an aktueller Stelle einfügen
:r Dateiname Datei “Dateiname” an aktueller Cursorposition einfügen

Löschen

Löschen im Normalmodus. Bei dem Voranstellen einer Zahl x wird die Aktion x-mal durchgeführt, also 5x löscht 5 Zeichen

x Löscht das Zeichen unter dem Cursor
4x Löscht 4 mal das Zeichen unter dem Cursor, also das Zeichen unter dem Cursor sowie die nächsten 3 Zeichen
dl Löscht das Zeichen unter dem Cursor (x ist ein Shortcut für dl)
dw Löscht das Wort unter dem Cursor
d4w Löscht ab dem Cursor die nächsten vier Wörter
de Löscht ab dem Cursor bis zum nächsten Wortende
d2e Löscht ab dem Cursor bis zum übernächsten Wortende
d$ Löscht ab dem Cursor bis zum Zeilenende
D Löscht wie d$ bis zum Zeilende
dj Löscht die aktuelle Zeile
d4j Löscht vier Zeilen
J Löscht den Zeilenumbruch der aktuellen Zeile
dd Löscht die gesamte Zeile
4dd Löscht die aktuelle und die drei nachfolgenden Zeilen
dh Löscht das Zeichen links des Cursors
dt= Löscht alles bis zum nächsten Vorkommen von =
X Löscht ebenfalls das Zeichen links des Cursors
:1,.d ENTER Löscht alle Zeilen vom Textanfang bis zur aktuellen Zeile
:.,$d ENTER Löscht alle Zeilen ab der aktuellen Zeile bis zum Zeilenende

Rückgängig machen und Wiederholen

u Macht die letzte Aktion rückgängig
U Macht die letzten Änderungen der aktuellen Zeile rückgängig
STRG-R Macht den letzten Undo rückgängig

Suchen

Beim Suchen haben die Zeichen .*][^%/\?~$ spezielle Bedeutungen. Soll nach diesen gesucht werden oder sind sie im Suchbegriff enthalten, muss ihnen ein \ vorangestellt werden.

/SUCH Sucht vorwärts nach der Zeichenkette “SUCH” (findet somit SUCH, SUCHE, MEINESUCHE etc.)
/SUCH> Sucht vorwärts nach der Zeichenkette “SUCH”, auf die ein Leerzeichen oder ein Tabulatur folgt
/<SUCH> Sucht exakt nach der Zeichenkette “SUCH”, davor oder danach muß sich ein Leerzeichen oder ein Tabulator befinden
?SUCH Sucht rückwärts nach der Zeichenkette “SUCH” (findet somit SUCH, SUCHE, MEINESUCHE etc.)
n Springt zum nächsten Treffer
3n Springt drei Treffer weiter
N Springt zum vorigen Treffer
3N Springt drei Treffer vor
* Fügt das Wort unter dem Cursor als Suchbegriff ein und sucht exakt nach diesem Begriff
/t.r Findet alle Zeichenketten, die mit t beginnen, dann ein beliebiges Zeichen enthalten und danach ein r haben. Zum Beispiel wird damit alles mit ter, tar, tor gefunden. Soll nach einem Punkt “.” gesucht werden, muß \. verwendet werden

Ersetzen

c2wbe Löscht die nächsten zwei Wörter und setzt an dieser Stelle “be” ein. Jetzt befindet man sich im Einfüge-Modus, der mit ESC beendet wird
cc Es wird die gesamte Zeile ersetzt
S Es wird die gesamte Zeile ersetzt
cl Ändert ein Zeichen
s Ändert ebenfalls ein Zeichen
c$ Ersetzt alles vom Cursor bis zum Ende der Zeile
C Ersetzt ebenfalls alles vom Cursor bis zum Ende der Zeile
rX Ersetzt das Zeichen unter dem Cursor mit X
5rX Ersetzt das Zeichen unter dem Cursor sowie die nächsten vier Zeichen mit X
rENTER Ersetzt das Zeichen unter dem Cursor mit einem Zeilenumbruch

 

Achtung: wenn ignorecase gesetzt ist, wird bei den nächsten beiden Befehlen nicht zwischen Groß- und Kleinschreibung unterschieden!

%s/X/Y/ Einmalige Ersetzung von Suchstring X durch Ersetzungsstring Y
%s/X/Y/g Vollständige Ersetzung aller Vorkommen von Suchstring X durch Ersetzungsstring Y

Tauschen

xp vertausche Zeichen mit rechtem Nachbarn
ddp vertausche aktuelle Zeile mit ihrem Nachfolger
~ Groß- in Kleinbuchstaben bzw. umgekehrt wandeln

Speichern und beenden

:q Beendet vim ohne zu speichern und nur, wenn nichts an der Datei verändert wurde
:q! Beendet vim ohne zu speichern, auch wenn an der Datei etwas verändert wurde
:w schreibt die Änderungen in die Datei
:wq schreibt die Änderungen in die Datei und beendet vim

Buffer

:buffer Dateiname Zwischen den Buffers (geöffnete Dateien) umschalten
:next Zum nächsten Buffer wechseln
:prev Zum vorherigen Buffer wechseln
:n 1 Datei vorwärts
:N 1 Datei rückwärts
:3N 3 Dateien vorwärts
:4N 4 Dateien rückwärts
:rew an den Anfang (rewind)
:last ans Ende
:files Datei-Liste anzeigen

Tabs

:tabnew öffnet einen neuen Tab
:tabe öffnet einen neuen Tab
:tabe “Datei” “Datei” zum Bearbeiten in neuem Tab öffnen
:tabn zum nächsten Tab wechseln
:tabn X wechselt zum Tab X
:tabN wechselt zum vorigen Tab
:tabp zum vorigen Tab wechseln
:tabc Tab schliessen
:tabfir Gehe zum ersten Tab
:tabr Gehe zum ersten Tab
:tabl gehe zum letzten Tab
:tabm verschiebe Tab an eine andere Position
:tabo Schliesse alle Tabs ausser dem aktuellen Tab
:tabs Listet alle Tabs und ihren Inhalt
:tabf Finde Datei in ‘path’ und bearbeite sie in einem neuen Tab
Xgt Gehe zu Tab X
XgT gehe X Tabs zurück

Sonderzeichen einsetzen

Wie bekomme ich Sonderzeichen in einen Text? Jedesmal eine Zeichentabelle suchen, das Zeichen suchen, kopieren und in vim einfügen macht nur begrenzt Spaß.
Es geht anders:

STRG-v u [ZAHL]
z.B. STRG-v u2126 ergibt Ω

evtl. geht auch STRG-UMSCHALT-u [ZAHL]

Hilfe

:help Ruft die allgemeine Hilfe auf
:help BEFEHL Ruft die Hilfe für BEFEHL auf
ZZ Schließt das Hilfe-Fenster

Aus der Praxis

An mehreren Zeilen ein Kommentarzeichen voranstellen

Beim Einrichten von fetchmail für einen neuen Mailserver wollte ich sicherheitshalber alle Zeilen auskommentieren um zu vermeiden, daß ich einige Mails ins digitale Nirvana verabschiede. Nur: wie mache ich das elegant und schnell? Vor jede Zeile sollte eine Raute gefolgt von einem Leerzeichen eingefügt werden. Jede Zeile einzeln durchzugehen ist doch ein wenig nervig und ist nicht gerade elegant. Die Lösung:

Den Cursor in diesem Fall mit gg am ersten Zeilenanfang des Dokuments platzieren, STRG-v drücken, mit 11j das erste Zeichen der nächsten 11 Zeilen markieren, I drücken, # und Leertaste drücken und dann ESC
Kurz: ggSTRG-v11jI# ESC

Nützliche Links

http://vim.wikia.com/wiki/Entering_special_characters


1 Im Terminal Konsole oder bei Windows in der Eingabezeile einfach vimtutor eingeben und loslegen