In Vim ist Scrolling die Bewegung der Ansicht, nicht die des Cursors — eine wichtige Unterscheidung, weil viele andere Editoren beides koppeln. Vim hat eine eigene Familie von Scroll-Befehlen (<C-d>, <C-u>, <C-f>, <C-b>, <C-e>, <C-y>) und eine parallele Familie für Cursor-Zentrierung (zz, zt, zb). Mit etwas Konfiguration via scrolloff lässt sich der Cursor in einer „Komfort-Zone" halten — er springt nie zu nah an den oberen oder unteren Bildschirmrand. Dieser Artikel zeigt alle Scroll-Befehle, die Cursor-Zentrierungs-Tasten und die zwei Konfigurations-Optionen, die das Scrolling im Alltag deutlich angenehmer machen.
Sechs Scroll-Befehle
Vim hat drei Stufen von Scroll-Schrittweiten — jeweils vorwärts und rückwärts:
| Taste | Aktion |
|---|---|
| Ctrl-f | forward — eine ganze Seite vorwärts |
| Ctrl-b | back — eine ganze Seite rückwärts |
| Ctrl-d | down — eine halbe Seite vorwärts |
| Ctrl-u | up — eine halbe Seite rückwärts |
| Ctrl-e | extra — eine Zeile vorwärts (Cursor steht still!) |
| Ctrl-y | yet — eine Zeile rückwärts |
Wichtiger Unterschied:
<C-d>/<C-u>/<C-f>/<C-b>scrollen und bewegen den Cursor mit. Der Cursor bleibt visuell auf derselben Bildschirm-Position, springt aber im Buffer entsprechend mit.<C-e>/<C-y>scrollen nur die Ansicht — der Cursor bleibt auf seiner Datei-Position. Wenn die Cursor-Zeile aus dem Bildschirm scrollt, springt der Cursor an die noch sichtbare Bildschirm-Kante.
Die halbe Seite (<C-d>/<C-u>) ist die im Alltag meistgenutzte Schrittweite — ganze Seiten verlieren mehr Kontext, eine Zeile ist zu langsam für längere Sprünge.
Cursor-Zentrierung mit z
Eine zweite Familie an Befehlen bewegt die Ansicht relativ zum Cursor, ohne den Cursor selbst zu bewegen. Der Cursor bleibt an seiner Datei-Position, die Ansicht scrollt darum:
| Taste | Aktion |
|---|---|
| zz | zentriere den Cursor auf den Bildschirm |
| zt | top — bringe die Cursor-Zeile an den oberen Rand |
| zb | bottom — bringe die Cursor-Zeile an den unteren Rand |
zz ist die häufigste Variante: nach einem Sprung mit 42G oder /pattern ist die Cursor-Zeile oft am oberen oder unteren Rand. zz zentriert sie — und gibt damit oberhalb und unterhalb des Cursors gleich viel Kontext.
/functionFoo<CR> " zum Pattern springen — Cursor oft am unteren Rand
zz " Cursor zentriert sich im Bildschirm
" jetzt fünf Zeilen Kontext über und unter dem Treffer sichtbarEine kleine Erweiterung: nach n/N (Such-Wiederholung) springt der Cursor oft an unangenehme Bildschirm-Positionen. Mappings, die n/N automatisch mit zz kombinieren, sind ein klassischer Komfort-Eintrag in der Vim-Konfig:
" Nach jedem Such-Schritt automatisch zentrieren
nnoremap n nzz
nnoremap N Nzz
" Analog nach halben Seiten-Scrolls
nnoremap <C-d> <C-d>zz
nnoremap <C-u> <C-u>zzMit diesen vier Mappings landet der Cursor nach jedem größeren Sprung verlässlich in der Bildschirm-Mitte. Eines der lohnendsten Mini-Setups in der Vim-Welt.
scrolloff — die Cursor-Komfortzone
Standardmäßig kann der Cursor in Vim bis an den obersten oder untersten sichtbaren Bildschirm-Rand wandern. Das hat den Nachteil, dass man beim Lesen oder Editieren der oberen/unteren Zeilen keinen Kontext mehr sieht — Vim scrollt erst, wenn der Cursor den Rand erreicht hat.
Die Option scrolloff ändert das: sie definiert eine Anzahl Zeilen, die immer ober- und unterhalb des Cursors sichtbar bleiben müssen. Vim scrollt automatisch nach, sobald der Cursor diesen „Sicherheitsabstand" erreicht.
" Mindestens 8 Zeilen oberhalb und unterhalb des Cursors sichtbar.
" Damit ist der Cursor de facto immer in der „Komfort-Zone" des Bildschirms.
set scrolloff=8
" Alternative für „Cursor immer in der Mitte":
" set scrolloff=999Ein Wert von 5 bis 10 ist die übliche Wahl — genug Kontext, ohne dass es nervig wirkt. Der Extrem-Wert scrolloff=999 zentriert den Cursor permanent in der Bildschirm-Mitte und scrollt den Buffer-Inhalt um ihn herum — manche User mögen das, andere finden es unruhig.
Horizontales Scrolling
Bei langen Zeilen ohne Wrap (z. B. wenn set nowrap aktiv ist oder eine Zeile breiter als das Fenster ist) verschiebt sich die Ansicht horizontal mit dem Cursor. Vier Befehle steuern das gezielt:
| Taste | Aktion |
|---|---|
zh | Ansicht eine Spalte nach links scrollen |
zl | Ansicht eine Spalte nach rechts scrollen |
zH | halbe Fenster-Breite nach links scrollen |
zL | halbe Fenster-Breite nach rechts scrollen |
zs | Cursor an den linken Bildschirm-Rand bringen |
ze | Cursor an den rechten Bildschirm-Rand bringen |
Diese Befehle sind selten gebraucht, weil die meisten Workflows mit set wrap arbeiten. Bei Logfiles, CSV-Daten oder breiten Tabellen ohne Wrap sind sie aber das richtige Werkzeug.
sidescrolloff — horizontale Komfortzone
Analog zu scrolloff gibt es sidescrolloff für die horizontale Achse:
" Mindestens 8 Spalten links und rechts des Cursors sichtbar
set sidescrolloff=8Wirkt nur, wenn nowrap aktiv ist — bei wrap-Anzeige ist die ganze Zeile immer sichtbar.
Maus-Scrolling
Vim unterstützt Maus-Scrolling, sobald die Option mouse aktiv ist:
" Maus in allen Modi aktiv
set mouse=a
" Alternativen:
" set mouse=n " nur Normal-Mode
" set mouse=v " nur Visual-Mode
" set mouse= " Maus ausMit mouse=a reagiert Vim auf Maus-Klicks (Cursor setzen), Drag (Visual-Selektion) und Scroll-Rad (Scrollen). Bei aktivem Maus-Modus wechselt Vim außerdem automatisch in Visual-Mode bei Maus-Selektion.
Manche Profis schalten die Maus bewusst aus (set mouse=), um sich nicht auf sie zu verlassen — das beschleunigt das Lernen der Vim-Idiome erheblich. Im Alltag mit Plugins und größeren Buffern ist mouse=a aber komfortabler.
Cursor und Ansicht — das Mental Model
Ein guter Reflex für Vim-Lernende: Cursor-Bewegung und Ansichts-Bewegung strikt trennen.
- Cursor-Bewegung (
h j k l,w,gg,G,42G,/pattern) ändert, wo im Buffer du bist. - Ansichts-Bewegung (
<C-e>,<C-y>,zz,zt,zb,zh,zl) ändert, was sichtbar ist, ohne den Cursor zu verschieben. - Beides gleichzeitig (
<C-d>,<C-u>,<C-f>,<C-b>) — Hybrid-Befehle.
Diese Trennung macht das Lesen von langem Code angenehmer: man kann den Buffer-Inhalt unter dem Cursor wegscrollen (<C-e>/<C-y>), ohne die Cursor-Position zu verlieren — z. B. um eine Funktion fünf Zeilen weiter unten zu sehen, während der Cursor am aktuellen Bearbeitungspunkt bleibt.
" Du editierst Zeile 50, willst kurz Zeile 70 sehen, ohne den Cursor zu bewegen
20<C-e> " 20 Zeilen nach unten scrollen — Cursor bleibt an Zeile 50
" ... Inhalt prüfen ...
20<C-y> " 20 Zeilen zurückscrollen — Cursor war nie weg
" Alternative mit Marks:
ma " Mark setzen
70G " zu Zeile 70 (Cursor wandert)
`a " zurück zum MarkMit <C-e>/<C-y> plus Count ist das Prüfen anderer Stellen in vier Tasten erledigt, ohne den Cursor zu bewegen.
Praxis-Konfiguration
Ein bewährtes Scrolling-Setup für die ~/.vimrc:
" ============================================================
" Scrolling und Cursor-Komfort
" ============================================================
" Cursor-Komfortzone: 8 Zeilen oben und unten sichtbar
set scrolloff=8
" Horizontale Komfortzone (nur bei nowrap relevant)
set sidescrolloff=8
" Maus aktiv in allen Modi
set mouse=a
" Recenter nach Such- und Scroll-Operationen
nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap <C-d> <C-d>zz
nnoremap <C-u> <C-u>zz
" Bequemes Recenter im Insert-Mode (selten gebraucht, aber praktisch)
inoremap <C-z> <C-o>zzDiese acht Zeilen verändern den Vim-Workflow spürbar: der Cursor ist nie zu nah am Rand, große Sprünge zentrieren sich automatisch, jeder Such-Treffer steht in der Bildschirm-Mitte.
Interessantes
`` und `` sind die halben Seiten — die Standard-Wahl
Im Alltag ist die halbe Seite die richtige Schrittweite. Ganze Seiten (<C-f>/<C-b>) verlieren den Kontext (kein Überlapp zur vorherigen Ansicht), eine Zeile ist zu langsam. Die halbe Seite hält ungefähr 50 % der vorherigen Anzeige sichtbar — das Auge findet die letzte Position wieder.
`` und `` als „Inhalt scrollen, Cursor bleibt"
Diese zwei Befehle sind seltener gebraucht, aber für „kurz was anderes anschauen ohne den Cursor zu bewegen" die richtige Wahl. Mit Counts (5<C-e>, 20<C-y>) wird daraus ein zielgerichtetes Scroll-Werkzeug.
`zz` ist das wichtigste Recenter-Idiom
Drei Buchstaben mehr nach jedem Sprung, die das Lesen drastisch angenehmer machen. Die meisten Vim-Profis haben zz so internalisiert, dass sie es nach jedem G, /, *, n automatisch tippen. Mapping in der Konfig macht es transparent.
`scrolloff=999` für „Cursor in der Mitte"
Manche Vim-Profis schwören auf den Mitte-Cursor: der Cursor bleibt permanent zentriert, der Buffer scrollt um ihn herum. Wie immer Geschmack — manche finden es ruhiger, andere unruhig. Probieren mit set scrolloff=999 für einen Tag, dann entscheiden.
`H`/`M`/`L` als „springen statt scrollen"-Alternative
Wenn der Ziel-Bereich schon sichtbar ist, ist ein direkter Sprung mit H/M/L (siehe vorheriger Artikel) oft schneller als Scrolling. Scrollen ist für Ziele jenseits des Bildschirms; H/M/L für Ziele innerhalb.
Maus-Scrolling und `scrolloff` greifen ineinander
Beim Scrollen mit dem Mausrad bleibt scrolloff aktiv — der Cursor wird mitgescrollt, sobald er die Komfortzone verlassen würde. Das ist meist nicht erwünscht, weil man mit der Maus „nur kurz schauen" will. Manche User schalten scrolloff daher per Mapping situationsbedingt aus, andere leben mit der Eigenheit.
Weiterführende Ressourcen
Externe Quellen
- Vim Help: scrolling — alle Scroll-Befehle in der Übersicht.
- Vim Help: scrolloff — vertikale Komfortzone.
- Vim Help: sidescrolloff — horizontale Komfortzone.
- Vim Help: mouse — Maus-Modi und ihre Wirkung.
- Vim Help: z — Recenter- und Sprung-Befehle.