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:

TasteAktion
Ctrl-fforward — eine ganze Seite vorwärts
Ctrl-bback — eine ganze Seite rückwärts
Ctrl-ddown — eine halbe Seite vorwärts
Ctrl-uup — eine halbe Seite rückwärts
Ctrl-eextra — eine Zeile vorwärts (Cursor steht still!)
Ctrl-yyet — 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:

TasteAktion
zzzentriere den Cursor auf den Bildschirm
zttop — bringe die Cursor-Zeile an den oberen Rand
zbbottom — 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.

text zz nach Sprung als Reflex
/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 sichtbar

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

vim ~/.vimrc — Recenter nach Suche
" 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>zz

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

vim ~/.vimrc — scrolloff
" Mindestens 8 Zeilen oberhalb und unterhalb des Cursors sichtbar.
" Damit ist der Cursor de facto immer in der „Komfort-Zone&quot; des Bildschirms.
set scrolloff=8

" Alternative für „Cursor immer in der Mitte&quot;:
" set scrolloff=999

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

TasteAktion
zhAnsicht eine Spalte nach links scrollen
zlAnsicht eine Spalte nach rechts scrollen
zHhalbe Fenster-Breite nach links scrollen
zLhalbe Fenster-Breite nach rechts scrollen
zsCursor an den linken Bildschirm-Rand bringen
zeCursor 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:

vim ~/.vimrc — sidescrolloff
" Mindestens 8 Spalten links und rechts des Cursors sichtbar
set sidescrolloff=8

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

vim ~/.vimrc — Maus-Modi
" Maus in allen Modi aktiv
set mouse=a

" Alternativen:
" set mouse=n        " nur Normal-Mode
" set mouse=v        " nur Visual-Mode
" set mouse=         " Maus aus

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

text Lesen ohne Cursor zu verlieren
" 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 Mark

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

vim ~/.vimrc — Scrolling-Setup
" ============================================================
" 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>zz

Diese 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

Verwandte Artikel

/ Weiter

Zurück zu Navigation

Zur Übersicht