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:
| Begriff | Bedeutung in Emacs | Vergleich in anderen Editoren |
|---|---|---|
| Frame | OS-Fenster — das, was im Dock, in der Taskleiste oder im Window-Manager auftaucht | „Window" in VS Code, JetBrains, Sublime |
| Window | Bereich innerhalb eines Frames, der einen Buffer anzeigt | „Pane", „Split", „Editor-Group", „Tile" |
| Buffer | der 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:
┌─ 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".
| Shortcut | Befehl | Effekt |
|---|---|---|
| C-x 2 | split-window-below | horizontaler Trenner — neues Window unten |
| C-x 3 | split-window-right | vertikaler 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:
┌─────────────────────────────────┐
│ │
│ Window A │
│ Buffer: main.go │
│ │
└─────────────────────────────────┘Nach C-x 2 — oben und unten:
┌─────────────────────────────────┐
│ Window A │
│ Buffer: main.go │
├─────────────────────────────────┤
│ Window B │
│ Buffer: main.go │
└─────────────────────────────────┘Nach C-x 3 — links und rechts:
┌────────────────┬────────────────┐
│ 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:
| Shortcut | Befehl | Effekt |
|---|---|---|
| C-x 1 | delete-other-windows | schließt alle anderen Windows — nur das aktuelle bleibt |
| C-x 0 | delete-window | schließ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.
| Shortcut | Befehl | Effekt |
|---|---|---|
| C-x o | other-window | ein Window weiter im Zyklus |
| C-u 2 C-x o | other-window mit Arg | zwei Windows weiterspringen |
| C-u - C-x o | other-window rückwärts | gegen 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:
| Shortcut | Befehl | Wirkung |
|---|---|---|
| C-x ^ | enlarge-window | aktuelles Window vertikal vergrößern |
| C-x } | enlarge-window-horizontally | horizontal vergrößern |
| C-x { | shrink-window-horizontally | horizontal verkleinern |
| C-x - | shrink-window-if-larger-than-buffer | auf den minimalen nötigen Platz schrumpfen |
| C-x + | balance-windows | alle 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.
| Shortcut | Befehl | Effekt |
|---|---|---|
| C-x 4 b | switch-to-buffer-other-window | Buffer im anderen Window öffnen |
| C-x 4 f | find-file-other-window | Datei im anderen Window öffnen |
| C-x 4 d | dired-other-window | Verzeichnis (dired) im anderen Window |
| C-x 4 c | clone-indirect-buffer-other-window | indirekten Buffer der aktuellen Datei daneben anzeigen |
| C-x 4 0 | kill-buffer-and-window | Buffer 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:
;; 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 derinit.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:
;; 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 / Parameter | Effekt |
|---|---|
display-buffer-in-side-window | Side-Window am Rand des Frames (left, right, top, bottom) |
display-buffer-reuse-window | bereits offenes Window mit diesem Buffer wiederverwenden |
display-buffer-same-window | aktuelles Window überschreiben |
display-buffer-pop-up-window | neues 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
- GNU Emacs Manual — Windows — offizielles Kapitel zum Window-System.
- GNU Emacs Manual — Split Window — Details zu
C-x 2,C-x 3und Maus-Splits. - GNU Emacs Manual — Other Window —
C-x ound der Cycle-Order. - GNU Emacs Manual — Displaying Buffers — Elisp-Referenz für
display-buffer-alist. - abo-abo/ace-window — Buchstaben-Overlay zur Window-Auswahl.