Vims Doku und jede ernsthafte Vim-Anleitung benutzen eine eigene Tastatur-Notation — <C-x> statt „Ctrl+x", <CR> statt „Enter", <leader> statt einer konkreten Taste. Die Schreibweise wirkt am Anfang technisch, ist aber konsequent durchdacht und hat einen praktischen Sinn: Sie beschreibt Tasten eindeutig, unabhängig von Layout und Betriebssystem, und sie funktioniert wörtlich als Eingabe in einem Vim-Mapping. Wer nnoremap <leader>w :w<CR> in seine Konfig schreibt, hat damit gleichzeitig dokumentiert, was die Tastenfolge bedeutet. Dieser Artikel ist die definitive Referenz aller Notations-Elemente — alle Modifier, alle Sondertasten, die Mapping-Modi-Präfixe und die typischen Stolperfallen auf der deutschen Tastatur, vor allem mit AltGr-Belegung der eckigen und geschweiften Klammern.
Das Grundprinzip
Jede Taste in Vim hat eine eindeutige Schreibweise. Einzelne, druckbare Zeichen werden direkt geschrieben, ohne Klammern: a, b, 7, $, ?. Sondertasten und Tastenkombinationen mit Modifiern werden in Angle-Brackets geschrieben: <Esc>, <C-w>, <F5>, <leader>.
Die Schreibweise ist case-insensitive für die Modifier-Buchstaben, case-sensitive für das Sondertasten-Wort: <C-w> ist identisch zu <c-w>, aber <Esc> und <esc> und <ESC> sind alle gleichwertig. Praktische Konvention: Modifier groß (C, M, S), Sondertasten in CamelCase (<CR>, <Esc>, <Tab>), reine Zeichen klein/groß wie sie auf der Tastatur stehen.
Die Notation funktioniert wörtlich als Eingabe in einem Mapping:
" Diese Zeile sagt zwei Dinge gleichzeitig:
" 1. Erstelle ein Normal-Mode-Mapping (nnoremap)
" 2. Bei Druck von <leader>w (Leader-Taste, dann w)
" führe :w<CR> aus — also den Ex-Befehl :w gefolgt von Enter.
nnoremap <leader>w :w<CR>Diese Selbst-Beschreibbarkeit ist der Grund, warum die Schreibweise sich auch in jeder Vim-Doku, in Plugin-READMEs und in :help-Tags durchgesetzt hat.
Modifier: C-, M-, S-, A-, D-
Vim kennt fünf Modifier-Präfixe, die innerhalb von <...> einer Taste vorangestellt werden:
| Schreibweise | Modifier | Bedeutung |
|---|---|---|
<C-x> | Ctrl | Ctrl + x |
<M-x> oder <A-x> | Meta / Alt | Alt + x (auf macOS: Option, siehe macOS-Hinweise) |
<S-x> | Shift | Shift + x — meist redundant für Buchstaben |
<D-x> | Command (macOS) | Cmd + x — nur in MacVim / Neovim-GUI verfügbar |
Mehrere Modifier können kombiniert werden — die Reihenfolge ist Konvention, aber technisch egal:
<C-S-Tab> " Ctrl + Shift + Tab
<C-M-Right> " Ctrl + Alt + Pfeil rechts
<D-S-f> " Cmd + Shift + f — nur in MacVim/GUIWichtig zu wissen: Die meisten Terminal-Emulatoren reichen <C-S-- und <M--Kombinationen nicht zuverlässig durch. Wer ein <C-S-Tab> mappt, sieht es in Vim oft als <C-Tab> oder <Tab> ankommen — der Shift-Bit geht im Terminal-Protokoll verloren. Im GUI-Vim (gVim, MacVim) ist diese Einschränkung weg.
Shift bei Buchstaben ist redundant
Eine kleine Eleganz: Bei Buchstaben braucht es kein <S->, weil Vim Groß- und Kleinbuchstaben sowieso unterscheidet. <S-a> und A sind dasselbe — die Schreibweise <S-A> ergibt keinen Sinn. Anders bei Funktions- und Sondertasten: <S-Tab> ist sinnvoll, weil Tab und Shift-Tab unterschiedliche Aktionen sind.
Sondertasten
Die nicht-druckbaren Tasten haben eigene Namen in Angle-Brackets. Die vollständige Liste:
| Schreibweise | Taste |
|---|---|
<CR> | Enter / Return (Carriage Return) |
<Enter> | Synonym für <CR> |
<Esc> | Escape |
<Tab> | Tab |
<S-Tab> | Shift+Tab |
<BS> | Backspace |
<Del> | Delete (Entfernen — vorwärts löschen) |
<Space> | Leertaste |
<Up> <Down> <Left> <Right> | Pfeiltasten |
<Home> <End> | Pos1 / Ende |
<PageUp> <PageDown> | Bild ↑ / Bild ↓ |
<Insert> | Einfügen-Taste |
<F1> bis <F12> | Funktionstasten |
<nul> | Null-Byte |
<Bar> | das Pipe-Zeichen | — als Literal in Mappings |
<Bslash> | Backslash \ |
<lt> | das <-Zeichen — als Literal in Mappings |
<Nop> | „nichts tun" — nützlich, um eine Taste zu deaktivieren |
Ein paar dieser Sondernamen sind erst auf den zweiten Blick wichtig:
<Bar> brauchst du, wenn ein Mapping mehrere Ex-Befehle mit | verkettet — das nackte | würde Vim als Mapping-Ende interpretieren. Korrekt:
" Falsch: das | beendet das Mapping zu früh
" nnoremap <leader>x :w | bnext<CR> " bnext wird NICHT Teil des Mappings
" Richtig: <Bar> als Literal-| im Mapping
nnoremap <leader>x :w <Bar> bnext<CR><Nop> ist die Standard-Variante, um eine Taste explizit zu deaktivieren — z. B. die Pfeiltasten für die Eingewöhnung an h j k l:
" Die Pfeiltasten in den Modi unbrauchbar machen,
" damit man sich an hjkl gewöhnt.
nnoremap <Up> <Nop>
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>Leader-Tasten
Der Leader ist eine spezielle Taste, die als persönlicher Befehls-Präfix fungiert. Default ist der Backslash \, aber praktisch jede Vim-Konfig setzt ihn um, weil \ auf vielen Layouts schlecht erreichbar ist. Die 2026 verbreitetste Wahl: das Leerzeichen.
" Leader auf Space setzen — MUSS vor dem ersten Mapping passieren,
" sonst nutzen die Mappings den alten Default.
let mapleader = " "
" Optionaler Localleader für filetype-spezifische Mappings.
let maplocalleader = ","
" Mappings mit <leader> nutzen jetzt die gesetzte Taste.
nnoremap <leader>w :w<CR> " Space-w speichert
nnoremap <leader>q :q<CR> " Space-q beendet
nnoremap <leader>e :Explore<CR> " Space-e öffnet netrwDie Reihenfolge ist wichtig: let mapleader = ... muss vor den nnoremap-Zeilen stehen, in denen <leader> auftaucht. Vim löst die Leader-Taste zur Definitionszeit auf, nicht zur Laufzeit. Wer Leader später umstellt, ändert keine bestehenden Mappings.
Die zweite Variante, <localleader>, ist als Präfix für filetype-spezifische Mappings gedacht. Konvention ist ein anderes Zeichen als <leader> — typisch , oder \. Sie kommt in ftplugin/<lang>.vim-Dateien zum Einsatz:
" Markdown-spezifische Mappings über localleader.
" ,b = Bold (Selektion mit ** umschließen)
nnoremap <buffer> <localleader>b ciw**<C-r>"**<Esc>Mapping-Modi: n, i, v, x, s, o, c, t
Mappings sind in Vim Modus-spezifisch. :nmap definiert ein Mapping nur für den Normal-Mode; in Insert oder Visual wirkt es nicht. Das gleiche Mapping in mehreren Modi gibt es als :map (Sammelvariante für Normal, Visual, Operator-pending — die drei „Visual-ähnlichen") oder muss in jedem Modus einzeln definiert werden.
| Befehl | Wirkung |
|---|---|
:nmap / :nnoremap | Normal-Mode |
:imap / :inoremap | Insert-Mode |
:vmap / :vnoremap | Visual + Select Mode |
:xmap / :xnoremap | Visual-Mode (ohne Select) |
:smap / :snoremap | Select-Mode (ohne Visual) |
:omap / :onoremap | Operator-pending Mode |
:cmap / :cnoremap | Command-Line-Mode |
:tmap / :tnoremap | Terminal-Mode (Vim 8+) |
:map / :noremap | Normal + Visual + Operator-pending (Sammel-Variante) |
nnoremap statt nmap — immer
Vims Mappings gibt es in zwei Varianten: rekursiv (nmap) und nicht-rekursiv (nnoremap, das nore steht für „non-recursive"). Der Unterschied:
nmapdurchläuft Mappings rekursiv. Wennaaufbgemappt ist undbaufc, dann führtazuc.nnoremapstoppt nach einem Schritt.aführt zub, auch wennbselbst gemappt ist.
Die Praxis-Empfehlung ist eindeutig: immer nnoremap (bzw. die entsprechende Modus-Variante) verwenden, es sei denn, Rekursion ist explizit gewünscht (was selten ist und meist mit <Plug>-Mappings zu tun hat).
Ohne nnoremap baut man sich versehentlich Endlos-Schleifen oder unerwartete Verhaltens-Ketten — vor allem in Setups mit vielen Plugins, die ihrerseits Mappings definieren.
" GEFÄHRLICH: dieses Mapping versucht, j als gj zu mappen,
" aber wenn ein Plugin gj umgemappt hat, läuft hier eine
" unerwartete Kette an.
nmap j gj
" SICHER: stoppt nach einem Schritt, gj wird tatsächlich
" als reines „nächste visuelle Zeile" verwendet.
nnoremap j gjMapping-Flags: <silent>, <buffer>, <expr>
Vor dem lhs (left-hand side) eines Mappings können Flags stehen, die das Verhalten modifizieren:
| Flag | Bedeutung |
|---|---|
<silent> | unterdrückt die Echo-Ausgabe des Ex-Befehls in der Command-Line |
<buffer> | Mapping gilt nur im aktuellen Buffer |
<expr> | rhs wird als Vimscript-Expression evaluiert, nicht als Tastenfolge |
<nowait> | Mapping wartet nicht auf längere mehrteilige Mappings |
<unique> | Fehler, wenn Mapping schon existiert (sauberes Plugin-Verhalten) |
<silent> ist im Alltag die nützlichste — viele Mappings führen :-Befehle aus, deren Echo am Bildschirm visuelles Rauschen produzieren:
" Ohne <silent>: nach jedem Druck blinkt ":noh" kurz auf
nnoremap <leader>h :noh<CR>
" Mit <silent>: lautloser Befehl
nnoremap <silent> <leader>h :noh<CR><buffer> ist die übliche Variante für filetype-spezifische Mappings in ftplugin/:
" Gilt NUR in Go-Buffern, nicht global
nnoremap <buffer> <localleader>r :!go run %<CR>DE-Tastatur — die wichtigsten Stolperfallen
Die deutsche Tastatur hat eine besondere Beziehung zu den Zeichen, die Vim regelmäßig braucht. Die wichtigsten Probleme:
Eckige und geschweifte Klammern brauchen AltGr
[, ], {, } liegen auf einer deutschen Tastatur auf AltGr-Belegungen — Vim nutzt diese Zeichen aber sehr häufig als Motions und für Bracket-Sprünge:
| Vim-Befehl | Bedeutung | DE-Tastatur |
|---|---|---|
[ | Bracket-Prefix (z. B. [c, [m, [[) | AltGr + 8 |
] | Bracket-Prefix (Gegenstück) | AltGr + 9 |
{ / } | Absatz-Motion vorwärts/rückwärts | AltGr + 7, AltGr + 0 |
\\ | Backslash — Default-Leader | AltGr + ß |
~ | Case-Toggle und Home-Verzeichnis-Symbol | AltGr + + |
[] | Brackets-Pair für :! und ähnliches | AltGr-Doppel |
In der Praxis bedeutet das: viele klassische Vim-Bewegungen wie [[ (Funktionsanfang) oder } (nächster Absatz) verlangen Drei-Tasten-Kombinationen. Wer Vim ernsthaft nutzt, hat ein paar Optionen:
- us-Layout-Switcher für Code-Sessions (z. B. via OS-Tastatur-Umschaltung auf US-International).
- Eigene Bindings auf besser erreichbare Tasten — z. B.
nnoremap <leader>j }undnnoremap <leader>k {für Absatz-Sprünge. - Karabiner-Elements (macOS), AutoHotkey (Windows) oder xkbcomp (Linux) für eine permanente Layout-Anpassung.
Backslash als Default-Leader ist auf DE schmerzhaft
\ ist AltGr + ß — eine Dreifinger-Kombination. Empfehlung: Leader auf das Leerzeichen umstellen (siehe oben). Das ist 2026 ohnehin Mainstream-Konvention.
<C-]> für Tag-Sprünge in :help
Die Hilfe verwendet <C-]>, um Tag-Links zu folgen — auf einer DE-Tastatur ist ] aber AltGr+9, was sich schlecht mit dem Ctrl-Modifier kombiniert. Alternative Bindings:
" Alternative Tag-Sprung-Bindings für DE-Tastaturen.
" <C-+> ist auf DE besser erreichbar als <C-]>
nnoremap <C-+> <C-]>
" (Achtung: <C-+> wird von vielen Terminals nicht durchgereicht —
" für GUI-Vim, MacVim oder gVim aber zuverlässig.)~ für Case-Toggle
~ ist AltGr + + — ebenfalls dreifingerig. Wer Case-Toggle oft braucht, mappt sich eine eigene Variante:
" Visual-Toggle: in Visual ~ als Operator nutzbar
" (Vims g~ ist ohnehin die saubere Operator-Variante,
" die mit Motions kombiniert: g~w toggelt ein Wort.)Interessantes
`` und `X` sind identisch — bei Buchstaben
Für Buchstaben ist <S-x> (Shift+x) und der Großbuchstabe X exakt dasselbe. Für Sondertasten wie <S-Tab> oder Funktionstasten ist die Schreibweise sinnvoll, weil Tab und Shift-Tab unterschiedliche Aktionen auslösen können.
Terminal-Emulatoren reichen nicht jede Tastenkombination durch
<C-S-Tab>, <C-;>, <C-Space> und andere „komplexe" Kombinationen funktionieren oft in gVim/MacVim, scheitern aber im Terminal. Wer ein Mapping anlegt und Vim reagiert nicht: erst mit :nmap <C-foo> prüfen, ob Vim die Kombination überhaupt sieht — alternativ im Insert-Mode <C-v> plus die Taste drücken, dann zeigt Vim, was tatsächlich ankommt.
``-Mappings sind die Brücke zwischen Plugins und Konfig
Viele Plugins definieren ihre Aktionen als <Plug>(plugin-action) und überlassen es dem User, eine konkrete Taste darauf zu binden: nmap <leader>x <Plug>(plugin-action). Hier ist nmap (rekursiv) richtig — nnoremap würde die Auflösung verhindern. Das ist die einzige verbreitete Ausnahme von der „immer nnoremap"-Regel.
`:verbose nmap ` zeigt, wer ein Mapping gesetzt hat
Wenn eine Tastenkombination unerwartet etwas anderes tut als erwartet, ist das die Antwort. :verbose nmap <leader>x zeigt sowohl die Definition als auch die Datei und Zeilennummer, in der das Mapping zuletzt gesetzt wurde — meist ein Plugin oder eine vergessene Zeile in der eigenen Konfig.
`` auf macOS = Option, nicht Cmd
Auf macOS ist <M-x> die Option-Taste (links oder rechts), nicht Command. <D-x> ist Command und funktioniert nur in MacVim/gVim, nicht im Terminal-Vim. Wer Option-Taste als Meta im Terminal nutzen will: Konfiguration des Terminal-Emulators ist nötig — siehe Installation auf macOS.
`` ist nicht statisch — er ist die Definitions-Zeit-Auflösung
Wer let mapleader = " " setzt und danach Mappings definiert, hat Space-Mappings. Wer Leader später umstellt, lässt die bestehenden Mappings auf der alten Taste — Vim löst <leader> zur Definitions-Zeit auf, nicht zur Laufzeit. Bei zusammengewachsenen Configs aus mehreren Quellen ist das eine häufige Ursache für „warum tut Leader plötzlich nichts mehr".
Weiterführende Ressourcen
Externe Quellen
- Vim Help: key-notation — offizielle Definition aller Notation-Elemente.
- Vim Help: map.txt — vollständige Mapping-Referenz.
- Vim Help: mapleader — Leader-Auflösungs-Semantik.
- Vim Help: map-modes — alle Modi und ihre Mapping-Befehle.
- Vim Help: <Plug> — Plug-Mappings als Plugin-Konvention.