In Emacs heißt „Window" das, was andere Editoren „Split", „Pane" oder „Editor-Bereich" nennen — und das OS-Fenster, das im Dock oder in der Taskleiste auftaucht, heißt „Frame". Diese Begriffsumkehr ist die einzige nennenswerte Hürde im Layout-System; wer sie einmal verinnerlicht hat, kann jede Emacs-Doku, jedes Paket-README und jedes Tutorial ohne Übersetzer-Aufwand lesen. Dieser Artikel erklärt die Begriffe, die fünf Kern-Bindings für Splits und das Power-Feature display-buffer-alist, mit dem sich Buffer-Platzierung deterministisch steuern lässt.

Window ≠ Frame: die Begriffsklärung

Emacs nutzt drei Schichten, um Inhalt auf den Bildschirm zu bringen. Wer die Begriffe trennt, versteht auch den Rest des Layout-Systems sofort:

BegriffBedeutung in EmacsVergleich in anderen Editoren
FrameOS-Fenster — das, was im Dock, in der Taskleiste oder im Window-Manager auftaucht„Window" in VS Code, JetBrains, Sublime
WindowBereich innerhalb eines Frames, der einen Buffer anzeigt„Pane", „Split", „Editor-Group", „Tile"
Bufferder eigentliche Inhalt — Datei, Suchergebnis, Shell, Help-Seite„Tab-Inhalt", „Editor-Document"

Zwei wichtige Konsequenzen aus dieser Trennung:

  • Ein Frame kann viele Windows enthalten — beliebig oft horizontal und vertikal geteilt.
  • Ein Buffer kann in mehreren Windows gleichzeitig sichtbar sein — sogar im selben Frame. Jedes Window hat dabei seinen eigenen Point (Cursor) und eigene Scroll-Position, der Inhalt ist aber identisch. Ändert man in einem Window, sieht man die Änderung im anderen sofort.

Visualisiert sieht das Verhältnis so aus:

text Frame, Windows und Buffer im Verhältnis
┌─ Frame (OS-Fenster) ──────────────────────────────┐
│ ┌─ Window A ─────────┬─ Window B ──────────────┐  │
│ │                    │                         │  │
│ │ Buffer: notes.md   │ Buffer: notes.md        │  │
│ │ Point: Zeile 12    │ Point: Zeile 200        │  │
│ │ (gleicher Buffer,  │ (anderer Ausschnitt     │  │
│ │  anderer Cursor)   │  desselben Inhalts)     │  │
│ ├────────────────────┴─────────────────────────┤  │
│ │ Window C                                     │  │
│ │ Buffer: *Messages*                           │  │
│ └──────────────────────────────────────────────┘  │
│ Mode-Line / Echo-Area                            │
└───────────────────────────────────────────────────┘

In dieser Doku gilt durchgängig: schreiben wir „Window", meinen wir den Emacs-Bereich, schreiben wir „Frame", meinen wir das OS-Fenster.

Splits anlegen: C-x 2 und C-x 3

Zwei Tastenkombinationen reichen aus, um den Frame in beliebig viele Windows zu zerlegen. Beide teilen das aktuelle Window und zeigen anfangs in beiden Hälften denselben Buffer — was im Editor wirkt, als würde sich der Inhalt „verdoppeln".

ShortcutBefehlEffekt
C-x 2split-window-belowhorizontaler Trenner — neues Window unten
C-x 3split-window-rightvertikaler Trenner — neues Window rechts

Mnemonik, die hilft: „2 = zwei übereinander", „3 = drei wie III nebeneinander". Die Ziffer ist also kein Befehlskürzel, sondern eine visuelle Eselsbrücke.

Vorher — ein Window:

text Vor dem Split
┌─────────────────────────────────┐
│                                 │
│           Window A              │
│       Buffer: main.go           │
│                                 │
└─────────────────────────────────┘

Nach C-x 2 — oben und unten:

text Nach C-x 2 (split-window-below)
┌─────────────────────────────────┐
│           Window A              │
│       Buffer: main.go           │
├─────────────────────────────────┤
│           Window B              │
│       Buffer: main.go           │
└─────────────────────────────────┘

Nach C-x 3 — links und rechts:

text Nach C-x 3 (split-window-right)
┌────────────────┬────────────────┐
│   Window A     │   Window B     │
│  Buffer:       │  Buffer:       │
│  main.go       │  main.go       │
└────────────────┴────────────────┘

Splits lassen sich beliebig schachteln: C-x 3, dann C-x o ins rechte Window wechseln, dann C-x 2 — und schon hat man drei Windows in einem L-förmigen Layout. In welchem der neu entstandenen Windows der Cursor landet, regelt die Variable split-window-keep-point (Default: an — der Cursor bleibt im ursprünglich aktiven Window).

Splits schließen: C-x 1 und C-x 0

Genauso reduziert wie das Anlegen ist das Schließen — zwei Bindings decken die beiden gebräuchlichsten Wünsche ab:

ShortcutBefehlEffekt
C-x 1delete-other-windowsschließt alle anderen Windows — nur das aktuelle bleibt
C-x 0delete-windowschließt nur das aktuelle Window — der Rest bleibt

C-x 1 ist die Notbremse, wenn der Frame zu unübersichtlich geworden ist — es liefert „Full-Screen für den aktuellen Buffer" in einem Tastendruck. C-x 0 entfernt nur den aktuellen Split und verteilt dessen Platz auf die Nachbarn.

Die zentrale, immer wieder verwirrende Eigenschaft beider Befehle:

  • Sie schließen das Window, NICHT den Buffer. Der Inhalt bleibt in der Buffer-Liste erhalten und kann jederzeit mit C-x b wieder in ein Window geholt werden.
  • Ein Buffer „verschwindet" in Emacs erst, wenn er explizit mit C-x k (kill-buffer) entfernt wird. Window schließen heißt also wirklich nur: den Sichtbarkeits-Slot zurückgeben.

Wer aus einem Tab-orientierten Editor kommt, verwechselt das gerne — dort schließt „Tab zumachen" beides in einem Schritt. In Emacs sind die beiden Aktionen sauber getrennt, und das ist Absicht: Buffer-Inhalt ist wertvoll, Window-Platzierung ist beliebig.

Zwischen Windows wechseln: C-x o

Sind mehrere Windows offen, wechselt C-x o (other-window, „o" wie „other") zum nächsten. Der Befehl arbeitet zyklisch und folgt einer festen Reihenfolge — grob „von oben nach unten, von links nach rechts", am Ende geht es wieder ans obere linke Window zurück.

ShortcutBefehlEffekt
C-x oother-windowein Window weiter im Zyklus
C-u 2 C-x oother-window mit Argzwei Windows weiterspringen
C-u - C-x oother-window rückwärtsgegen den Uhrzeigersinn — nützlich bei vielen Splits

Bei zwei Windows funktioniert C-x o tadellos. Ab vier Windows wird das blinde Hochzählen schnell mühsam, weil man im Kopf den Zyklus mitführen muss. Zwei eingespielte Lösungen:

  • windmove (Built-in): direktionale Navigation per Pfeiltaste. S-<left> springt nach links, S-<up> nach oben usw. Aktiviert wird der Modus mit (windmove-default-keybindings).
  • ace-window (Paket): blendet bei M-o (oder einer eigenen Bindung) einen Buchstaben pro Window ein — Buchstabe tippen, fertig. Skaliert auch mit zehn Splits ohne Denkpause.

Beide Werkzeuge bekommen einen eigenen Artikel: Winner-Mode und windmove. Für den Anfang reicht C-x o — wer regelmäßig mit vier oder mehr Windows arbeitet, sollte spätestens dann den verlinkten Artikel lesen.

Window-Größe anpassen

Splits entstehen im 50/50-Verhältnis, aber selten bleibt es dabei — Help-Buffer dürfen schmal sein, der Code-Buffer breit. Emacs bringt für jede Achse zwei Bindings mit:

ShortcutBefehlWirkung
C-x ^enlarge-windowaktuelles Window vertikal vergrößern
C-x }enlarge-window-horizontallyhorizontal vergrößern
C-x {shrink-window-horizontallyhorizontal verkleinern
C-x -shrink-window-if-larger-than-bufferauf den minimalen nötigen Platz schrumpfen
C-x +balance-windowsalle Windows wieder auf gleiche Größe bringen

Alle Befehle akzeptieren einen Numerik-Präfix: C-u 10 C-x ^ vergrößert das Window um zehn Zeilen statt um eine. Praktisch, wenn man die Größe mit einem Tastendruck merklich verschieben will.

Die geschweiften Klammern sind auf deutscher Tastatur eine bekannte Stolperfalle: { liegt auf AltGr+7, } auf AltGr+0. Bei vielen Layouts wird AltGr intern als C-M- interpretiert, sodass C-x { faktisch nicht ankommt. Drei Auswege:

  • Maus auf den Trenner ziehen — funktioniert in GUI-Emacs auf Frame-Grenzen wie auf Mode-Lines.
  • Eigene Bindings auf erreichbare Tasten legen, z. B. C-c < / C-c >.
  • balance-windows (C-x +) als pragmatischer Reset, der ohne manuelle Größen-Bindings auskommt.

Wer feiner pixelgenau resizen will, schaltet window-resize-pixelwise ein — Detail im Artikel zu erweiterten Window-Features. Mehr zu den DE-Tastatur-Konflikten und ihrer Auflösung steht im Artikel zur Tasten-Notation.

C-x 4: Aktionen im anderen Window

Eines der elegantesten, aber unterschätztesten Features in Vanilla-Emacs: der Prefix C-x 4 bedeutet immer „mache X, aber im anderen Window". Wer es einmal verinnerlicht hat, spart sich das manuelle Splitten + Wechseln + Befehl-Aufrufen.

ShortcutBefehlEffekt
C-x 4 bswitch-to-buffer-other-windowBuffer im anderen Window öffnen
C-x 4 ffind-file-other-windowDatei im anderen Window öffnen
C-x 4 ddired-other-windowVerzeichnis (dired) im anderen Window
C-x 4 cclone-indirect-buffer-other-windowindirekten Buffer der aktuellen Datei daneben anzeigen
C-x 4 0kill-buffer-and-windowBuffer und sein Window in einem Schritt schließen

Ein typischer Ablauf: man arbeitet in main.go und will daneben README.md lesen. Statt erst C-x 3 zu splitten, C-x o zu wechseln und dann C-x C-f README.md zu drücken, reicht C-x 4 f README.md. Emacs splittet bei Bedarf selbst, öffnet die Datei daneben — fertig.

Existiert noch kein zweites Window, legt Emacs eines an (Default: horizontaler Split). Existieren bereits mehrere, wählt es eines davon — wer die Auswahl deterministischer haben will, konfiguriert das über display-buffer-alist (nächste Sektion).

Window-Konfiguration speichern und wiederherstellen

Layouts sind in Emacs Daten — sie lassen sich als Objekt speichern und später exakt wiederherstellen. Das macht ein paar typische Arbeitsabläufe stark:

  • vor einem temporären Vollbild-Sprung (z. B. C-x 1) das Layout merken
  • zwischen mehreren festen Layouts hin- und herschalten („Coding-Layout", „Mail-Layout", „Org-Review-Layout")
  • nach einer Hilfe-Suche, die fünf neue Windows aufgemacht hat, mit einem Tastendruck zurück zum vorherigen Stand

Die Bausteine in Elisp sind zwei Funktionen:

elisp Window-Layout per Hand sichern und zurücksetzen
;; aktuelles Layout in einer Variable festhalten
(setq mein-layout (current-window-configuration))

;; ... beliebig viele Splits, Wechsel, Vollbilder ...

;; gespeichertes Layout exakt wiederherstellen
(set-window-configuration mein-layout)

Im Alltag will man das natürlich nicht von Hand schreiben. Die zwei populären Komfort-Lösungen:

  • winner-mode (Built-in, nicht aktiv per Default): merkt sich automatisch jede Layout-Änderung und macht sie mit C-c <left> rückgängig (bzw. C-c <right> für Redo). Aktivierung mit (winner-mode 1) in der init.el.
  • Bookmark-/Registers-Pakete: speichern benannte Layouts und laden sie per Buchstabe wieder.

Tiefe Behandlung beider Pfade folgt im Artikel Winner-Mode und windmove — auf dieser Seite genügt das Wissen, dass Window-Konfigurationen erste-Klasse-Objekte sind und sich speichern lassen.

Window-Verhalten konfigurieren: display-buffer-alist

Wer Emacs eine Weile nutzt, merkt: manche Buffer landen mal links, mal unten, mal überschreiben sie den aktuellen — scheinbar zufällig. Hinter dieser Platzierung steht ein einzelnes Regelsystem namens display-buffer-alist. Es ist eines der mächtigsten Customization-Features in Emacs überhaupt — und gleichzeitig eines der komplexesten.

Die Grundidee: für jedes Pattern (regulärer Ausdruck auf den Buffer-Namen) lässt sich eine Liste von Display-Aktionen festlegen. Emacs probiert die erste passende Aktion, scheitert sie, kommt die nächste, usw.

Ein klassisches, sofort nützliches Beispiel: der *Help*-Buffer soll immer rechts in einem Side-Window mit 40 % Breite landen — egal welcher Befehl ihn öffnet:

elisp display-buffer-alist — Help rechts als Side-Window
;; Help-Buffer immer rechts in einem Side-Window
(add-to-list 'display-buffer-alist
             '("\\*Help\\*"
               (display-buffer-in-side-window)
               (side . right)
               (window-width . 0.4)))

Häufig verwendete Bausteine, ohne Anspruch auf Vollständigkeit:

Aktion / ParameterEffekt
display-buffer-in-side-windowSide-Window am Rand des Frames (left, right, top, bottom)
display-buffer-reuse-windowbereits offenes Window mit diesem Buffer wiederverwenden
display-buffer-same-windowaktuelles Window überschreiben
display-buffer-pop-up-windowneues Window aufpoppen
(side . right) / bottom / …Seite für Side-Windows
(window-width . 0.4)relative Breite (Anteil) oder feste Spalten
(window-height . 0.3)analog Höhe

Wo dieser Code hingehört

Der add-to-list-Aufruf gehört in deine init.el oder in eine Modul-Datei, die von dort geladen wird. Wie die init.el aufgebaut ist, in welcher Reihenfolge early-init.el und init.el geladen werden und wie sich Konfiguration sauber mit use-package strukturieren lässt, beschreibt der Artikel init.el und early-init.el ausführlich.

display-buffer-alist ist die einzige saubere Möglichkeit, Buffer-Platzierung deterministisch zu steuern — alles andere überlässt Emacs dem display-buffer-base-action-Default und damit ein Stück weit dem Zufall. Eine tiefere Behandlung mit mehreren Beispielen (Compilation-Buffer unten fixiert, *grep* rechts, REPLs in Bottom-Side-Windows) folgt im Customization-Kapitel.

Besonderheiten

Window in Emacs ist nicht das, was du denkst

„Window" meint in Emacs den Bereich INNERHALB eines OS-Fensters — also das, was VS Code „Pane", Vim „Split" und JetBrains „Editor-Group" nennt. Das OS-Fenster selbst heißt „Frame". Wer diese Umkehr einmal verinnerlicht hat, versteht jede Emacs-Doku, jedes Paket-README und jedes Tutorial sofort.

Ein Buffer kann in mehreren Windows GLEICHZEITIG sichtbar sein

Splitte einen Buffer mit C-x 2, scrolle in einem der beiden Windows — der andere bleibt stehen. Der Inhalt ist identisch, der Point pro Window unterschiedlich. Ideal, um den Anfang einer Datei oben und das Ende unten gleichzeitig zu lesen.

C-x 1 schließt Windows, nicht Buffer

Nach C-x 1 ist der Frame leer geräumt, aber die vorher sichtbaren Buffer sind alle noch da — abrufbar über C-x b. Buffer verschwinden erst mit C-x k (kill-buffer). Window-Layout und Buffer-Lebensdauer sind in Emacs strikt getrennt.

C-x 4 ist das unterschätzteste Produktivitäts-Feature

Statt erst zu splitten, dann zu wechseln, dann zu öffnen: einfach C-x 4 f, C-x 4 b oder C-x 4 d. Emacs erledigt Layout und Wechsel in einem Schritt. Ein Tag mit bewusstem C-x 4-Einsatz reicht, um nicht mehr ohne arbeiten zu wollen.

winner-mode gehört in jede Konfiguration

Built-in, eine Zeile Aktivierung — und du hast Undo/Redo für jede Layout-Änderung. C-c <left> nach einem versehentlichen C-x 1 stellt den Stand davor wieder her. Eines der ersten Pakete, die jeder einschalten sollte.

Ab vier Windows lohnt sich ace-window oder windmove

C-x o ist linear und cyclisch — bei vier oder mehr Splits ein mentaler Overhead. windmove (direktionale Pfeile) oder ace-window (Buchstaben-Overlay) lösen das in Bruchteilen einer Sekunde. Wer regelmäßig komplexe Layouts fährt, sollte beides kennen.

display-buffer-alist ist die einzige saubere Steuerung

Alle anderen Mechanismen, mit denen man Buffer-Platzierung beeinflussen kann, sind Workarounds über den Default. display-buffer-alist ist das offizielle, vom Manual empfohlene Power-Feature — komplex, aber alternativlos für deterministische Layouts.

Weiterführende Ressourcen

Externe Quellen

Verwandte Artikel

/ Weiter

Zurück zu Buffer, Fenster & Frames

Zur Übersicht