Scrolling in Emacs ist konzeptionell von Navigations-Befehlen wie C-n getrennt: Cursor-Bewegung verschiebt den Point im Buffer und passt den Viewport bei Bedarf an, Scrolling-Befehle verschieben den sichtbaren Ausschnitt und ziehen den Cursor mit, sobald er sonst außerhalb läge. Wer beide Achsen kennt — Point hier, Viewport dort — navigiert deutlich präziser, springt gezielter durch lange Buffer und stellt Code mit zwei Tastendrücken so im Fenster ein, dass das Auge sofort den richtigen Kontext sieht.

Seitenweise mit C-v und M-v

Der häufigste Scrolling-Bedarf ist „eine Bildschirmseite weiter" — und genau dafür gibt es das klassische Paar:

  • Eine Seite vorwärtsC-v ruft scroll-up-command auf.
  • Eine Seite rückwärtsM-v ruft scroll-down-command auf.

Beide Befehle sind auch über M-x scroll-up-command bzw. M-x scroll-down-command erreichbar, und ebenso über die PgDn- und PgUp-Tasten — die Buchstaben-Variante bleibt aber idiomatisch, weil die Hand am Heim-Block bleibt.

Die seltsame Mnemonik

Der irritierende Punkt für Einsteiger: C-v heißt intern scroll-up-command, scrollt aber den Inhalt nach oben — der Viewport sieht also weiter unten im Buffer. Das ist konsistent, wenn man „up" auf den Buffer-Inhalt bezieht (er wandert auf dem Bildschirm nach oben), aber unintuitiv, wenn man „up" auf den Viewport bezieht. Die Eselsbrücke, die meist hilft: v zeigt nach unten, also „sieh weiter unten nach".

Überlappung zwischen den Seiten

Damit man beim Seiten-Scrollen nicht den Anschluss verliert, behält Emacs zwischen aufeinanderfolgenden Seiten standardmäßig zwei Zeilen Überlappung. Das steuert die Variable next-screen-context-lines (Default: 2). Wer mehr Kontext will, erhöht den Wert:

elisp Mehr Überlappung beim Seitenscrolling
;; 5 Zeilen statt der Default-2 zwischen Seiten erhalten
(setq next-screen-context-lines 5)

Mit numerischem Prefix-Argument wird daraus eine zeilengenaue Variante: C-u 10 C-v scrollt genau 10 Zeilen nach unten statt eine ganze Seite. Wo dieser Konfig-Schnipsel hingehört, beschreibt das Konfigurations-Kapitel.

C-l: Cursor-Position im Viewport steuern

Der unterschätzte Held der Scrolling-Familie ist C-lrecenter-top-bottom. Er bewegt nicht den Point, sondern verschiebt den Viewport so, dass der Cursor an einer bestimmten Stelle des Fensters landet. Beim wiederholten Drücken durchläuft Emacs einen Drei-Stufen-Zyklus:

  1. Erstes Drücken — Cursor-Zeile wandert in die Mitte des Fensters.
  2. Zweites Drücken — Cursor-Zeile wandert an den oberen Rand.
  3. Drittes Drücken — Cursor-Zeile wandert an den unteren Rand.
  4. Viertes Drücken — zurück zur Mitte, der Zyklus beginnt von vorn.
  • Re-Center / CycleC-l ruft recenter-top-bottom auf.

Praktisch ist das vor allem nach einem Sprung mit M-g g oder nach C-s: man landet irgendwo am unteren Rand des Fensters, drückt C-l und hat sofort wieder die Hälfte des Buffers ober- und unterhalb sichtbar.

Mit Prefix-Argument: exakte Zeile

Wer eine konkrete Zeile im Viewport ansteuern will, kombiniert C-l mit einem Prefix-Argument:

TastenfolgeWirkung
C-u 0 C-lCursor an die oberste Zeile des Fensters
C-u 5 C-lCursor auf Zeile 5 von oben
C-u -1 C-lCursor auf die letzte Zeile (von unten gezählt)
C-u C-lCursor genau in die Bildschirm-Mitte (ohne Cycle-Status)

Die negative Variante ist besonders praktisch: C-u -3 C-l rückt die aktuelle Zeile drei Zeilen über den unteren Fensterrand — gut, wenn unten gleich weitere Ausgabe entstehen soll und man jetzt schon Platz dafür will.

Weitere Scrolling-Befehle

Neben dem Seiten-Paar gibt es eine Reihe weiterer Scrolling-Befehle für Spezialfälle. Die wichtigsten:

BefehlTastenkombiWirkung
scroll-up-lineM-x scroll-up-lineeine Zeile nach unten scrollen (zeilengenau)
scroll-down-lineM-x scroll-down-lineeine Zeile nach oben scrollen
scroll-other-windowC-M-vdas andere Window seitenweise vorwärts scrollen
scroll-other-window-downC-M-S-vdas andere Window seitenweise rückwärts scrollen
scroll-leftC-x <horizontal nach links scrollen
scroll-rightC-x >horizontal nach rechts scrollen

scroll-other-window ist der heimliche Star in Split-Window-Workflows: Du liest in Fenster A eine Doku und willst gleichzeitig in Fenster B durch Code scrollen, ohne das Fenster zu wechseln. C-M-v erledigt das genau, der Cursor bleibt in Fenster A. Mehr zum Window-Konzept im späteren Kapitel zu Windows und Buffern.

Horizontales Scrolling braucht man im Alltag selten. In den meisten Fällen ist es sinnvoller, lange Zeilen visuell umzubrechen oder am Fensterrand abzuschneiden — beides regelt der Buffer-lokale Schalter truncate-lines, der zwischen „Wrap" und „abschneiden" toggelt (interaktiv über M-x toggle-truncate-lines). Erst wenn truncate-lines aktiv ist und Zeilen wirklich aus dem Fenster ragen, wird C-x &lt; / C-x &gt; interessant.

pixel-scroll-precision-mode ab Emacs 29

Eine der besten Quality-of-Life-Verbesserungen der letzten Emacs-Jahre ist pixel-scroll-precision-mode — eingeführt in Emacs 29. Klassisches Emacs-Maus-Scrolling springt zeilenweise: jedes Trackpad-Wisch-Ereignis bewegt den Viewport um eine ganze Textzeile, was auf modernen High-DPI-Displays sichtbar ruckelt. Der neue Modus verarbeitet stattdessen die Pixel-Deltas, die das Betriebssystem liefert, und bewegt den Viewport entsprechend feinkörnig — wie es Browser, Terminals und native macOS-Apps seit Jahren tun.

Aktivieren

elisp Pixel-Scrolling einschalten
;; Pixel-genaues Maus-/Trackpad-Scrolling (Emacs 29+, nur GUI)
(pixel-scroll-precision-mode 1)

Empfohlene Feintuning-Parameter

Zwei Variablen lohnen sich für das Gefühl auf Trackpad und Magic Mouse:

elisp Pixel-Scroll-Feintuning
(setq pixel-scroll-precision-large-scroll-height 35.0
      pixel-scroll-precision-interpolation-factor 30)
  • pixel-scroll-precision-large-scroll-height schaltet bei sehr großen Sprüngen (z. B. C-v mit aktivem Modus) auf eine kurze Animation um.
  • pixel-scroll-precision-interpolation-factor glättet die Bewegung interpoliert über mehrere Frames — höhere Werte = sanfter, aber träger.

Wo diese Snippets hingehören, erklärt das Konfigurations-Kapitel. Der Effekt ist auf macOS (Magic Mouse, MacBook-Trackpad) und auf Wayland-Linux am deutlichsten — beides Plattformen, deren Eingabe-Stack hochauflösende Scroll-Events liefert. Auf Terminal-Emacs hat der Modus keinen Effekt: dort gibt es keine Pixel-Events, nur Zeilen-Sprünge des Terminal-Emulators.

Auto-Scrolling: wenn der Cursor an den Rand kommt

Bewegt sich der Point durch reguläre Navigations-Befehle (C-n, C-s, M->, …) an den Rand des Fensters, scrollt Emacs automatisch nach, damit der Cursor sichtbar bleibt. Das Verhalten dieses Auto-Scrollings steuern drei Variablen, die für viele User zu den allerersten Customizations gehören.

Die drei wichtigsten Variablen

VariableDefaultWirkung
scroll-margin0Mindest-Abstand des Cursors zum Viewport-Rand, bevor gescrollt wird
scroll-conservatively0Bei Werten ≥ 101: zeilenweises Nachscrollen statt seitenweisem Sprung
scroll-preserve-screen-positionnilBehält bei C-v/M-v die Cursor-Position auf dem Schirm
scroll-step0Älterer, gröberer Vorgänger von scroll-conservatively — heute überholt

Der oft zitierte „Halb-Seiten-Sprung", wenn der Cursor unten ankommt, ist die Folge des Defaults: Emacs scrollt dann ein gutes Stück, damit der Cursor wieder mittig sitzt — was viele als ruckelig empfinden. Wer das vermeiden will, setzt scroll-conservatively auf einen Wert ≥ 101. Dann fügt Emacs einzeilig nach, sobald der Cursor den Rand erreicht.

Empfohlenes Mini-Setup

elisp Ruhiges Auto-Scrolling
;; Cursor bleibt mindestens 4 Zeilen vom Viewport-Rand entfernt
(setq scroll-margin 4)

;; Zeilenweise nachscrollen statt halb-seitenweise springen
(setq scroll-conservatively 101)

;; Bei C-v / M-v Cursor-Position im Fenster behalten
(setq scroll-preserve-screen-position t)

Wo dieser Code hingehört, beschreibt das Konfigurations-Kapitel. scroll-margin 4 ist Geschmackssache — manche bevorzugen 0, manche gehen bis 8. Höhere Werte sorgen dafür, dass beim Lesen immer ein paar Zeilen Kontext um die Cursor-Zeile sichtbar bleiben; sehr hohe Werte (z. B. (/ (window-height) 2)) erzeugen ein „immer mittig"-Verhalten, das beim Code-Reading angenehm sein kann.

Praktische Workflows

Die einzelnen Befehle entfalten ihren Wert in Kombinationen. Eine Sammlung von Mustern, die im Alltag immer wieder auftauchen:

  • Aktuelle Position zentrierenC-l. Klassisches Re-Center nach einem Sprung oder einer Suche.
  • Aktuelle Zeile an den oberen RandC-l C-l. Zweimal drücken springt durch den Cycle bis zur Oben-Position. Alternative: C-u 0 C-l.
  • 50 Zeilen nach unten ohne Scroll-SprungC-u 50 C-v. Numerisches Prefix macht aus dem Seiten-Scroll einen exakten Zeilen-Scroll.
  • Anderes Window scrollen, ohne zu wechselnC-M-v. Klassiker für Doku-links-/Code-rechts-Setups.
  • Im Buffer sehen, was unter dem Cursor stehtC-u -5 C-l schiebt die Cursor-Zeile fünf Zeilen über den unteren Rand, alles darüber wird sichtbar.
  • Smooth Maus-Scrolling aktivieren(pixel-scroll-precision-mode 1) in der init.el. Ein einziger Aufruf, und das Trackpad-Verhalten ändert sich sofort.
  • Auto-Scroll beruhigen(setq scroll-conservatively 101) und (setq scroll-margin 4) in der Konfig.

Diese Kombinationen funktionieren ohne jedes externe Paket — alles ist Vanilla-Emacs. Wer sie verinnerlicht, navigiert in großen Buffern (Logdateien, lange Quelldateien, Org-Dokumente) mit drei bis vier Tastendrücken überall hin, wo er gerade sein will.

Maus-Scrolling und Touch-Geräte

Auch wer Emacs primär mit der Tastatur bedient, scrollt im Alltag mit Maus oder Trackpad — beim Lesen langer Buffer, in Doku-Modes, bei eshell-Output. Die Defaults dafür:

EingabeAktion
Mausrad nach oben/untenmwheel-scroll — ohne Pixel-Modus zeilenweise
Shift + Mausradschnelleres Scrollen (mehrere Zeilen pro Tick)
Trackpad-Wisch (GUI)mit pixel-scroll-precision-mode pixelgenau
Trackpad-Wisch (Terminal)zeilenweise, kein Pixel-Modus verfügbar

Das Klischee „Emacs scrollt ruckelig" stammt aus der Vor-Emacs-29-Zeit. Mit aktivem pixel-scroll-precision-mode fühlt sich Maus- und Trackpad-Scrolling auf macOS und auf Wayland-Linux so an wie in nativen Apps oder Browsern — sanft, ohne Sprünge, mit Schwung-Verhalten. Wer Emacs zum ersten Mal auf einem aktuellen MacBook ausprobiert, sollte den Modus von Anfang an aktivieren — der erste Eindruck ist sonst unnötig negativ.

Auf X11-Linux und Windows lohnt sich der Modus ebenfalls, der Effekt ist dort aber kleiner, weil die Eingabe-Pipeline weniger feinkörnige Events liefert. In Terminal-Emacs (emacs -nw) ist pixel-scroll-precision-mode wirkungslos: das Terminal selbst übersetzt Scroll-Events bereits in Zeilen-Sprünge, bevor sie Emacs erreichen.

Interessantes

Cursor-Bewegung und Viewport-Bewegung sind zwei Dinge

Scrolling-Befehle bewegen den Viewport, nicht den Point — der Cursor wird nur mitgezogen, wenn er sonst außerhalb läge. Umgekehrt verschieben Navigations-Befehle wie C-n den Point und ziehen den Viewport nur bei Bedarf nach. Wer beide Achsen separat denkt, navigiert deutlich präziser.

`C-l` ist der unterschätzte Held

recenter-top-bottom bietet drei Cursor-Positionen im Viewport mit einer einzigen Taste: Mitte, oben, unten — und im Cycle wiederholbar. Nach jedem Sprung mit M-g g, C-s oder imenu ist C-l der natürliche Folgegriff.

pixel-scroll-precision-mode hebt die Maus-Erfahrung auf modernes Niveau

Der Modus (Emacs 29+) macht den Unterschied zwischen „Emacs scrollt wie ein modernes Programm" und „Emacs scrollt wie in den 1990ern". Vor allem auf macOS-Trackpads und Wayland-Linux ein echter Sprung — auf Terminal-Emacs ohne Effekt.

`scroll-conservatively 101` ist die berühmte 1-Zeilen-Konfig

Diese eine Zeile ersetzt das gefürchtete „halb-seitige Springen" durch ruhiges, zeilenweises Nachscrollen. Praktisch jeder erfahrene Emacs-User hat sie früher oder später in seine init.el geschrieben — sie ist eines der ersten Customizations, die sich wirklich lohnen.

`scroll-margin 4` hält den Cursor aus dem Randbereich

Mit einem Wert ≥ 1 bleibt der Cursor immer mindestens N Zeilen vom Viewport-Rand entfernt — das Auge muss beim Lesen nicht ständig in den Ecken nachschauen. Viele finden Werte zwischen 4 und 8 ergonomisch.

Prefix-Argument macht `C-l` zur Zeilen-Pinpoint-Taste

C-u 0 C-l setzt die Cursor-Zeile an den oberen Rand, C-u 5 C-l auf Zeile 5 von oben, C-u -3 C-l drei Zeilen über den unteren Rand. Damit positionierst du den Kontext um den Cursor herum exakt so, wie du ihn lesen willst.

`C-M-v` scrollt das andere Window, ohne dass du wechseln musst

In Split-Setups (z. B. Doku links, Code rechts) bleibt der Cursor im aktiven Fenster, während scroll-other-window durch das Nachbar-Fenster blättert. Spart das ständige C-x o-Hin-und-Her.

`next-screen-context-lines` regelt die Überlappung beim Seiten-Scrollen

Default 2 reicht meist, aber bei dichtem Code lohnen sich 4 bis 5 — so verliert das Auge zwischen zwei Seiten nicht den Anschluss.

Weiterführende Ressourcen

Externe Quellen

Verwandte Artikel

/ Weiter

Zurück zu Navigation

Zur Übersicht