Global

  • :h[elp] Stichwort - Hilfe zum Schlüsselwort öffnen
  • :sav[eas] Datei - Speichern unter
  • :clo[se] - Ansicht schließen
  • :ter[minal] - Ein Terminal Fenster öffnen
  • K - Handbuchseite für das Wort unter dem Cursor öffnen
Tip Führe vimtutor in einem Terminal aus um die ersten Vim Befehle zu lernen.

Cursor-Bewegungen

  • h - Cursor ein Zeichen nach links bewegen
  • j - Cursor eine Zeile nach unten bewegen
  • k - Cursor eine Zeile nach oben bewegen
  • l - Cursor ein Zeichen nach rechts bewegen
  • gj - move cursor down (multi-line text)
  • gk - move cursor up (multi-line text)
  • H - Zum Anfang des Bildschirms springen
  • M - Zur Mitte des Bildschirms springen
  • L - Zum Ende des Bildschirms springen
  • w - Springe vorwärts zum Wortanfang
  • W - Springe vorwärts zum Wortanfang (Wort kann Interpunktion enthalten)
  • e - Springe vorwärts zum Wortende
  • E - Springe vorwärts zum Wortende (Wort kann Interpunktion enthalten)
  • b - Springe rückwärts zum Wortanfang
  • B - Springe rückwärts zum Wortanfang (Wort kann Interpunktion enthalten)
  • ge - Springe rückwärts zum Wortende
  • gE - Springe rückwärts zum Wortende (Wort kann Interpunktion enthalten)
  • % - Zum entsprechenden Zeichen springen. (Unterstützt werden: '()', '{}', '[]' - mehr dazu mittels :h_matchpairs in vim)
  • 0 - Springe zum Zeilenanfang
  • ^ - Springe zum ersten Zeichen der Zeile
  • $ - Springe zum Zeilenende
  • g_ - Springe zum letzten Nicht-Leerzeichen der Linie
  • gg - Springe zum Anfang des Dokuments
  • G - Springe zum Ende des Dokuments
  • 5gg or 5G - Springe zu Zeile 5
  • gd - move to local declaration
  • gD - move to global declaration
  • fx - Springe zum nächsten 'x' auf der Linie
  • tx - Springe vor das nächste 'x' auf der Linie
  • Fx - Springe zum vorherigen 'x' auf der Linie
  • Tx - Springe hinter das vorherige 'x' auf der Linie
  • ; - Wiederhole die letzte Bewegung mittels f, t, F oder T
  • , - Wiederhole die letzte Bewegung mittels f, t, F oder T in entgegengesetzer Richtung
  • } - Springe zum nächsten Paragraphen (oder Funktion/Block)
  • { - Springe zum vorherigen Paragraphen (oder Funktion/Block)
  • zz - Zentriere den Cursor
  • zt - position cursor on top of the screen
  • zb - position cursor on bottom of the screen
  • Ctrl + e - Bewege den Bildschirm eine Zeile runter (ohne den Cursor zu verschieben)
  • Ctrl + y - Bewege den Bildschirm eine Zeile hoch (ohne den Cursor zu verschieben)
  • Ctrl + b - Springe eine Bildschirmseite zurück
  • Ctrl + f - Springe eine Bildschirmseite weiter
  • Ctrl + d - Springe eine halbe Bildschirmseite weiter
  • Ctrl + u - Springe eine halbe Bildschirmseite zurück
Tip Um eine Cursor-Bewegung zu wiederholen, ist diese mit einer Zahl zu prefixen. Beispiel: 4j bewegt den Cursor 4 Zeilen nach unten.

Eingabe-Modus - Text einfügen/anfügen

  • i - Einfügen vor dem Cursor
  • I - Einfügen am Zeilenanfang
  • a - Anfügen hinter dem Cursor
  • A - Anfügen am Zeilenende
  • o - Einfügen in einer neuen Zeile, unterhalb der aktuellen Zeile
  • O - Einfügen in einer neuen Zeile, oberhalb der aktuellen Zeile
  • ea - Anfügen am Wortende
  • Ctrl + h - Entferne ein Zeichen vor dem Cursor im Eingabe-Modus
  • Ctrl + w - Entferne ein Wort vor dem Cursor im Eingabe-Modus
  • Ctrl + j - Starte eine neue Zeile im Eingabe-Modus
  • Ctrl + t - Zeile um eine Einheit einrücken (nach rechts verschieben) im Eingabe-Modus
  • Ctrl + d - Zeile um eine Einheit ausrücken (nach links verschieben) im Eingabe-Modus
  • Ctrl + n - Nächstes passendes Wort vor dem Cursor einfügen (auto-complete) im Eingabe-Modus
  • Ctrl + p - Vorheriges passendes Wort vor dem Cursor einfügen (auto-complete) im Eingabe-Modus
  • Ctrl + rx - Füge den Inhalt von Register x ein
  • Ctrl + ox - Wechseln Sie vorübergehend in den Normalmodus, um nur einen Normalmodus Befehl -x zu verwenden.
  • Esc or Ctrl + c - Eingabe-Modus verlassen

Editieren

  • r - Einzelnes Zeichen ersetzen
  • R - replace more than one character, until ESC is pressed.
  • J - Die Zeile unterhalb zur aktuellen Zeile hinzufügen
  • gJ - Die Zeile unterhalb zur aktuellen Zeile ohne Abstand hinzufügen
  • gwip - Absatz neu umbrechen
  • g~ - Groß-/Kleinschreibung umschalten bis zur Bewegung
  • gu - In Kleinschreibung ändern bis zur Bewegung
  • gU - In Großschreibung ändern bis zur Bewegung
  • cc - Ersetzen der kompletten Zeile
  • c$ or C - Ersetzen bis zum Zeilenende
  • ciw - Ersetzen des gesamten Worts
  • cw or ce - Ersetzen bis zum Ende des Worts
  • s - Zeichen löschen und ersetzen
  • S - Zeile löschen und ersetzen (wie cc)
  • xp - Zwei Zeichen vertauschen (löschen und einfügen)
  • u - Änderung rückgängig
  • U - Letzte geänderte Zeile wiederherstellen (rückgängig machen)
  • Ctrl + r - Wiederholen der letzten, rückgängig gemachten, Änderung
  • . - Letztes Kommando wiederholen

Text markieren (Visueller Modus)

  • v - Visuellen Modus starten, Zeilen markieren, Kommando ausführen (wie y-kopieren)
  • V - Zeilenweise Visuellen Modus starten
  • o - Springe zum anderen Ende der Markierung
  • Ctrl + v - Blockweise Visuellen Modus starten
  • O - Springe zur anderen Blockecke
  • aw - Wort markieren
  • ab - Block mit ()
  • aB - Block mit {}
  • at - Block mit <>
  • ib - Innerer Block mit ()
  • iB - Innerer Block mit {}
  • it - Innerer Block mit <>
  • Esc or Ctrl + c - Visuellen Modus verlassen
Tip Anstatt b oder B, kann man auch ( oder { verwenden.

Kommandos im Visuellen Modus

  • > - Text nach rechts rücken
  • < - Text nach links rücken
  • y - Markierten Text kopieren
  • d - Markierten Text löschen
  • ~ - Groß-/Kleinschreibung umschalten
  • u - Markierten Text in Kleinschreibung ändern
  • U - Markierten Text in Großschreibung ändern

Register

  • :reg[isters] - Zeige den Inhalt der Register
  • "xy - Kopiere in das Register x
  • "xp - Füge den Inhalt von Register x ein
  • "+y - Kopiere in die System Zwischenablage
  • "+p - Füge den Inhalt von der System Zwischenablage ein
Tip Register werden in ~/.viminfo gespeichert und beim nächsten Start von vim wieder geladen
Tip Spezial Register:

0 - Zuletzt kopiert
" - Register ohne Namen, zuletzt gelöscht oder kopiert
% - Aktueller Dateinamen
# - Alternativer Dateinamen
* - Inhalt der Zwischenablage (X11 primary)
+ - Inhalt der Zwischenablage (X11 clipboard)
/ - Letztes Such-Muster
: - Letzte Kommando-Zeile
. - Zuletzt eingefügter (geschriebener) Text
- - Zuletzt gelöscht (weniger als eine Zeile)
= - Ausdruck Register
_ - Schwarzes Loch Register

Markierungen und Positionen

  • :marks - Liste alle Markierungen
  • ma - Erstelle die Markierung 'a' an dieser Position
  • `a - Springe zur Markierung 'a'
  • y`a - Kopiere bis zur Position der Markierung 'a'
  • `0 - Zur Position gehen an der Vim zuvor beendet wurde
  • `" - Zur Position gehen an der beim letzen Mal gearbeitet wurde
  • `. - Zur Position der letzten Änderung gehen
  • `` - Zur Position vor dem letzten Sprung gehen
  • :ju[mps] - Liste alle Sprünge
  • Ctrl + i - Zur neueren Position in der Sprungliste gehen
  • Ctrl + o - Zur älteren Position in der Sprungliste gehen
  • :changes - Liste alle Änderungen
  • g, - Zur neueren Position in der Änderungsliste gehen
  • g; - Zur älteren Position in der Änderungsliste gehen
  • Ctrl + ] - Zum Schlagwort unter dem Cursor gehen
Tip Um zu einer Markierung zu gehen kann entweder ein Backtick (`) oder ein Apostroph (') verwendet werden. Mit einem Apostroph geht man jedoch an den Anfang (erstes Nicht-Leerzeichen) der Zeile mit der Markierung.

Makros

  • qa - Starte Aufnahme 'a'
  • q - Stoppe die Aufnahme
  • @a - Führe das Makro 'a' aus
  • @@ - Führe das letzte Makro nochmals aus

Kopieren/Auschneiden und Einfügen

  • yy - Zeile kopieren
  • 2yy - 2 Zeilen kopieren
  • yw - Zeichen des Worts unterm Cursor bis zum nächsten Wort kopieren.
  • yiw - Wort kopieren
  • yaw - Zeichen des Worts unterm Cursor und die Abstände davor oder danach kopieren
  • y$ or Y - bis Zeilenende kopieren
  • p - Zwischenablage nach dem Cursor einfügen
  • P - Zwischenablage vor dem Cursor einfügen
  • gp - put (paste) the clipboard after cursor and leave cursor after the new text
  • gP - put (paste) before cursor and leave cursor after the new text
  • dd - Löschen (Ausschneiden) der aktuellen Zeile
  • 2dd - Löschen (Ausschneiden) von 2 Zeilen (aktuelle und folgende)
  • dw - Zeichen des Worts unterm Cursor bis zum nächsten Wort löschen (ausschneiden).
  • diw - Wort löschen (ausschneiden)
  • daw - Zeichen des Worts unterm Cursor und die Abstände davor oder danach löschen (ausschneiden)
  • :3,5d - delete lines starting from 3 to 5
Tip You can also use the following characters to specify the range:
e.g.

:.,$d - From the current line to the end of the file
:.,1d - From the current line to the beginning of the file
:10,$d - From the 10th line to the beginning of the file

  • :g/{pattern}/d - delete all lines containing pattern
  • :g!/{pattern}/d - delete all lines not containing pattern
  • d$ or D - Löschen (Ausschneiden) bis Zeilenende
  • x - Zeichen löschen (ausschneiden)

Text einrücken

  • >> - Zeile um eine Einheit einrücken (nach rechts verschieben)
  • << - Zeile um eine Einheit ausrücken (nach links verschieben)
  • >% - Block mit () oder {} einrücken (Cursor auf Klammer)
  • <% - de-indent a block with () or {} (cursor on brace)
  • >ib - Innerer Block mit () einrücken
  • >at - Block mit <> einrücken
  • 3== - 3 Zeilen neu ausrichten
  • =% - Block mit () oder {} neu ausrichten (Cursor auf Klammer)
  • =iB - Inner Block mit {} neu ausrichten
  • gg=G - Gesamter Buffer neu ausrichten
  • ]p - Einfügen und analog zur aktuellen Zeile einrücken

Speichern und Beenden

  • :w - Datei schreiben, aber nicht schließen
  • :w !sudo tee % - Schreibe die aktuelle Datei mit sudo
  • :wq or :x or ZZ - Datei schreiben und schließen
  • :q - Datei schließen (schlägt fehl bei ungespeicherten Änderungen)
  • :q! or ZQ - Datei schließen und Änderungen verwerfen
  • :wqa - Datei in allen Tabs schreiben und schließen

Suchen und Ersetzen

  • /pattern - Muster suchen (vorwärts)
  • ?pattern - Muster suchen (rückwärts)
  • \vpattern - 'very magic' pattern: nicht-alphanummerische Charakter werden als regex-Symbole interpretiert (kein Escaping benötigt)
  • n - Suche wiederholen (selbe Richtung)
  • N - Suche wiederholen (entgegengesetzte Richtung)
  • :%s/old/new/g - Muster im gesamten Dokument ersetzen
  • :%s/old/new/gc - Muster im gesamten Dokument ersetzen, mit Bestätigung
  • :noh[lsearch] - Entferne alle Markierungen von Such-Treffern

Suchen in mehreren Dateien

  • :vim[grep] /pattern/ {`{file}`} - Muster suchen in mehreren Dateien
e.g. :vim[grep] /foo/ **/*
  • :cn[ext] - Springe zur nächsten Übereinstimmung
  • :cp[revious] - Springe zur vorherigen Übereinstimmung
  • :cope[n] - Öffne ein Fenster mit der Liste von Übereinstimmungen
  • :ccl[ose] - Schliesse das Fenster mit der Liste von Übereinstimmungen

Tabs

  • :tabnew or :tabnew {page.words.file} - Datei in neuem Tab öffnen
  • Ctrl + wT - Aktuell geteiltes Fenster in eigenen Tab bewegen
  • gt or :tabn[ext] - Zum nächsten Tab springen
  • gT or :tabp[revious] - Zum vorigen Tab springen
  • #gt - Zum Tab mit der Nummer # springen
  • :tabm[ove] # - Aktuellen Tab an #te Position bewegen (indiziert von 0 an)
  • :tabc[lose] - Aktuellen Tab, inklusiver aller Fenster, schließen
  • :tabo[nly] - Alle Tabs schließen, außer dem Aktuellen
  • :tabdo command - Führt command für alle Tabs aus (z.B.: :tabdo q - Schließt alle geöffneten Tabs)

Arbeit mit mehreren Dateien

  • :e[dit] Datei - Datei im neuen Buffer bearbeiten
  • :bn[ext] - Springe zum nächsten Buffer
  • :bp[revious] - Springe zum vorherigen Buffer
  • :bd[elete] - Buffer löschen (Datei schließen)
  • :b[uffer]# - Springe zum Buffer mit Index #
  • :b[uffer] file - Springe zum Buffer einer Datei
  • :ls or :buffers - Alle offenen Buffer auflisten
  • :sp[lit] Datei - Datei im neuen Buffer bearbeiten und Fenster horizontal teilen
  • :vs[plit] Datei - Datei im neuen Buffer bearbeiten und Fenster vertikal teilen
  • :vert[ical] ba[ll] - Alle Buffer als vertikale Fenster bearbeiten
  • :tab ba[ll] - Alle Buffer als Tabs bearbeiten
  • Ctrl + ws - Fenster horizontal teilen
  • Ctrl + wv - Fenster vertikal teilen
  • Ctrl + ww - Fenster wechseln
  • Ctrl + wq - Fenster schließen
  • Ctrl + wx - Aktuelles Fenster mit nächstem tauschen
  • Ctrl + w= - Alle Fenster gleich gross machen
  • Ctrl + wh - Cursor in das linke Fenster (vertikale Teilung)
  • Ctrl + wl - Cursor in das rechte Fenster (vertikale Teilung)
  • Ctrl + wj - Cursor in das untere Fenster (horizontale Teilung)
  • Ctrl + wk - Cursor in das obere Fenster (horizontale Teilung)
  • Ctrl + wH - make current window full height at far left (leftmost vertical window)
  • Ctrl + wL - make current window full height at far right (rightmost vertical window)
  • Ctrl + wJ - make current window full width at the very bottom (bottommost horizontal window)
  • Ctrl + wK - make current window full width at the very top (topmost horizontal window)

Diff

  • zf - Fold definieren bis zur Bewegung
  • zd - Fold unter dem Cursor löschen
  • za - Fold unter dem Cursor umschalten
  • zo - Fold unter dem Cursor öffnen
  • zc - Fold unter dem Cursor schliessen
  • zr - Alle Folds um ein Level öffnen (reduzieren)
  • zm - Alle Folds um ein Level schliessen
  • zi - Folding Funktionalität umschalten
  • ]c - Springe zum Start der nächsten Änderung
  • [c - Springe zum Start der vorherigen Änderung
  • do or :diffg[et] - Hole den Unterschied (vom anderen Buffer)
  • dp or :diffpu[t] - Gebe den Unterschied (an den anderen Buffer)
  • :diffthis - Mache das aktuelle Fenster Teil vom Diff
  • :dif[fupdate] - Aktualisiere den Diff
  • :diffo[ff] - Schalte den Diff Modus für das aktuelle Fenster aus
Tip Die Kommandos für Folding (bspw. za) wirken sich nur auf ein Level aus. Um diese auf alle Level anzuwenden, verwende Großbuchstaben (bspw. zA).
Tip Um die Unterschiede von Dateien anzusehen, kann man Vim direkt im Diff Modus starten, indem man vimdiff in einem Terminal ausführt. Man kann es sogar als git difftool festlegen.