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:
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.