Zum Inhalt springen

vim-Spickzettel

vim hat Modi: im Normalmodus sind Tasten Befehle, im Einfügemodus landen sie als Text in der Datei. Esc bringt dich immer zurück in den Normalmodus. Wenn du nicht weisst, wo du bist, drück Esc zweimal.

Taste Wechselt in Bemerkung
Esc Normalmodus Aus jedem anderen Modus
i a o … Einfügemodus Siehe unten, unten links steht -- INSERT --
v V Ctrl+V Visueller Modus Zeichen, Zeilen, Block markieren
: Kommandozeile Ex-Befehle, zum Beispiel :w
R Ersetzmodus Überschreibt Zeichen statt einzufügen

Ubuntu Server liefert nur vim-tiny. Wenn Pfeiltasten im Einfügemodus Buchstaben erzeugen oder Farben fehlen: sudo apt install vim.

Taste Bewegung
h j k l Links, runter, rauf, rechts (Pfeiltasten gehen auch)
w / b Zum nächsten / vorherigen Wortanfang
e Zum Wortende
0 / $ Zeilenanfang / Zeilenende
^ Erstes Zeichen der Zeile, das kein Leerzeichen ist
gg / G Dateianfang / Dateiende
42G oder :42 Zu Zeile 42
{ / } Absatz zurück / vor
% Zur passenden Klammer
Ctrl+F / Ctrl+B Seite vor / zurück
Ctrl+D / Ctrl+U Halbe Seite vor / zurück
H M L Oben, Mitte, unten im Fenster
fx / Fx Zum nächsten / vorherigen Zeichen x in der Zeile (; wiederholt)
Ctrl+O / Ctrl+I Zur letzten / nächsten Sprungposition
Taste Wirkung
i / a Vor / nach dem Cursor einfügen
I / A Am Zeilenanfang / Zeilenende einfügen
o / O Neue Zeile unterhalb / oberhalb öffnen
r Ein Zeichen ersetzen, bleibt im Normalmodus
R Überschreiben bis Esc
s Zeichen löschen und einfügen
S oder cc Zeile löschen und einfügen
cw Wort ab Cursor ersetzen
C Bis Zeilenende ersetzen
Ctrl+N (im Einfügemodus) Wort vervollständigen aus der Datei
Taste Wirkung
x / X Zeichen unter / vor dem Cursor löschen
dd Zeile löschen (landet im Register, p fügt sie wieder ein)
dw Wort löschen
d$ oder D Bis Zeilenende löschen
d0 Bis Zeilenanfang löschen
dG Bis Dateiende löschen
dgg Bis Dateianfang löschen
J Nächste Zeile anhängen (Zeilenumbruch entfernen)
:5,10d Zeilen 5 bis 10 löschen

Das Muster lautet immer Operator + Bewegung: d löscht, c ändert, y kopiert, danach kommt die Bewegung (w, $, G, } …). Doppelt gedrückt (dd, cc, yy) wirkt der Operator auf die ganze Zeile.

Taste Wirkung
yy Zeile kopieren (yank)
yw Wort kopieren
y$ Bis Zeilenende kopieren
p / P Nach / vor dem Cursor einfügen (Zeilen: darunter / darüber)
xp Zwei Zeichen vertauschen
ddp Zwei Zeilen vertauschen
"+y / "+p System-Zwischenablage (nur mit GUI und vim-gtk3)
Taste Wirkung
u Rückgängig
Ctrl+R Wiederherstellen
U Alle Änderungen der aktuellen Zeile rückgängig
. Letzte Änderung wiederholen (nicht Redo)
Befehl Wirkung
/muster Vorwärts suchen, Enter
?muster Rückwärts suchen
n / N Nächster / vorheriger Treffer
* / # Wort unter dem Cursor vorwärts / rückwärts suchen
:noh Hervorhebung ausschalten
:s/alt/neu/ Erstes Vorkommen in der aktuellen Zeile ersetzen
:s/alt/neu/g Alle Vorkommen in der Zeile
:%s/alt/neu/g Alle Vorkommen in der Datei
:%s/alt/neu/gc Mit Rückfrage (y ja, n nein, a alle, q abbrechen)
:5,20s/alt/neu/g Nur in Zeilen 5 bis 20
:%s/\s\+$// Leerzeichen am Zeilenende entfernen
:g/muster/d Alle Zeilen mit Muster löschen

Sonderzeichen im Muster: . beliebiges Zeichen, ^ Zeilenanfang, $ Zeilenende, \< \> Wortgrenzen, * Wiederholung. / im Text als \/ schreiben oder ein anderes Trennzeichen nehmen: :%s#/alt/pfad#/neu/pfad#g.

Befehl Wirkung
:w Speichern
:w name.txt Unter anderem Namen speichern
:q Beenden (verweigert bei ungespeicherten Änderungen)
:q! Beenden ohne Speichern
:wq oder :x oder ZZ Speichern und beenden
:wqa Alle Fenster speichern und beenden
:e datei Andere Datei öffnen
:e! Datei neu laden, Änderungen verwerfen
:r datei Datei unterhalb des Cursors einfügen
:r !befehl Ausgabe eines Befehls einfügen, zum Beispiel :r !date
:!befehl Shell-Befehl ausführen, zum Beispiel :!shellcheck %
:w !sudo tee % Als root speichern, wenn du vim ohne sudo gestartet hast
:set nu / :set nonu Zeilennummern ein / aus
:set paste / :set nopaste Vor dem Einfügen aus der Zwischenablage, verhindert Auto-Einrückung
:set list Tabs und Zeilenenden sichtbar machen
:set ff=unix Windows-Zeilenenden (CRLF) in Unix-Zeilenenden umwandeln, dann :w
:help thema Eingebaute Hilfe, zum Beispiel :help :s

% steht in Ex-Befehlen für den aktuellen Dateinamen, als Bereich (:%s) für die ganze Datei.

Taste Wirkung
v Zeichenweise markieren
V Zeilenweise markieren
Ctrl+V Blockweise (Spalten) markieren
d y c Markierung löschen, kopieren, ersetzen
> / < Markierung einrücken / ausrücken
~ Gross-/Kleinschreibung umschalten
: Ex-Befehl auf die Markierung anwenden (:'<,'> erscheint automatisch)
I (Blockmodus) Text am Anfang jeder markierten Zeile einfügen, zum Beispiel # zum Auskommentieren
gv Letzte Markierung erneut auswählen

Fast jeder Befehl lässt sich mit einer Zahl vervielfachen:

Eingabe Wirkung
5j Fünf Zeilen nach unten
3w Drei Wörter vor
4dd Vier Zeilen löschen
2yy Zwei Zeilen kopieren
3p Dreimal einfügen
10x Zehn Zeichen löschen
5u Fünf Schritte rückgängig
3o Drei neue Zeilen mit gleichem Text (nach Esc)
Befehl Wirkung
vim a.sh b.sh Mehrere Dateien öffnen
:n / :N Nächste / vorherige Datei
:ls Geöffnete Buffer anzeigen
:b 2 Zu Buffer 2 wechseln
:sp datei Fenster waagrecht teilen
:vs datei Fenster senkrecht teilen
Ctrl+W dann w Zum nächsten Fenster
Ctrl+W dann h j k l Zum Fenster links, unten, oben, rechts
Ctrl+W dann q Fenster schliessen
Ctrl+W dann o Nur aktuelles Fenster behalten
:tabnew datei Datei in neuem Tab (gt wechselt)
vimdiff a.conf b.conf Zwei Dateien vergleichen

Die Datei ~/.vimrc wird beim Start gelesen. Dieses Minimum reicht für den Kurs:

~/.vimrc
syntax on " Syntax-Hervorhebung
set number " Zeilennummern
set ruler " Zeile und Spalte unten rechts
set showcmd " Tastenfolge unten rechts anzeigen
set hlsearch incsearch " Treffer hervorheben, schon beim Tippen suchen
set ignorecase smartcase " Suche ignoriert Grossschreibung, ausser du tippst Grossbuchstaben
set tabstop=4 shiftwidth=4 expandtab " 4 Leerzeichen statt Tab
set autoindent " Einrückung der vorherigen Zeile übernehmen
set scrolloff=5 " Beim Scrollen 5 Zeilen Rand lassen
set mouse= " Maus aus, damit Kopieren im Terminal normal funktioniert

Änderungen wirken ab dem nächsten Start oder nach :source ~/.vimrc. Für Root gilt eine eigene Datei (/root/.vimrc), sudo vim liest deine nicht. Besser sudoedit datei: das öffnet die Datei mit deinem Editor und deinen Einstellungen und kopiert sie beim Speichern zurück.