Die Region ist die zentrale Anker-Datenstruktur in Emacs. Anders als „Selektion" in anderen Editoren ist sie konzeptionell zwischen Point und Mark aufgespannt, kann aktiv oder inaktiv sein und ist Grundlage von Dutzenden Region-Befehlen — von schlichtem Kopieren über sort-lines bis hin zu echten Block-Auswahlen via rectangle-mark-mode. Dieser Artikel zeigt, was du mit ihr wirklich tun kannst: alle Wege zur Region-Setzung, alle wichtigen Region-Befehle, den semantischen Power-Boost durch expand-region und die kleinen transient-mark-mode-Eigenheiten, die Vanilla-Emacs alltagstauglich machen.
Region setzen und erweitern
Eine Region entsteht, sobald Mark und Point gesetzt sind und mindestens ein Zeichen zwischen ihnen liegt. Emacs bietet dafür drei klar unterscheidbare Wege: die klassische Mark-Kombination, die GUI-Konvention via Shift, und semantische „Markiere genau dieses Konstrukt"-Befehle.
Mark setzen — klassisch
- C-SPC ruft
set-mark-commandauf und setzt den Mark an die aktuelle Point-Position. Die Region ist sofort aktiv — bewegt sich Point, wandert das Highlighting mit. - M-x set-mark-command ist der vollständige Befehlsname, falls die Tastenkombi belegt ist.
Shift-Select-Mode — die GUI-Konvention
Seit Emacs 23 ist shift-select-mode Default. Pfeil- und Bewegungstasten in Kombination mit Shift erweitern die Region wie in jedem anderen Editor — Mark muss vorher nicht gesetzt werden:
- S-<arrow> — Region zeichenweise erweitern (analog
S-C-ffür wortweise,S-C-nzeilenweise usw.). - Sobald du eine Bewegung ohne Shift ausführst, wird die Region deaktiviert.
Semantische Mark-Befehle
Statt manuell aufzuspannen kannst du Emacs auch direkt sagen: „Markier dieses Konstrukt". Diese Befehle setzen Mark und Point so, dass das gewünschte Element exakt umschlossen wird:
| Tastenkombi | Befehl | Markiert |
|---|---|---|
C-x h | mark-whole-buffer | gesamten Buffer (Emacs-Pendant zu Cmd+A / Ctrl+A) |
M-h | mark-paragraph | aktuellen Absatz |
C-M-h | mark-defun | aktuelle Funktion / Top-Level-Definition |
M-@ | mark-word | nächstes Wort (mehrmals drücken erweitert) |
C-x h ist der schnellste Weg zur „Markiere alles"-Aktion — kein M-x nötig, keine zwei Sprünge an Anfang und Ende.
Hinweis macOS: C-SPC kollidiert in der Standardbelegung mit Spotlight bzw. dem Eingabequellen-Wechsel. Lege Spotlight unter Systemeinstellungen → Tastatur → Tastaturkurzbefehle auf eine andere Kombination, oder remappe set-mark-command in Emacs auf einen freien Key.
Aktive vs. inaktive Region
Die Region hat zwei Zustände — und der Unterschied bestimmt, wie viele Befehle sich verhalten.
Aktive Region
Visuell hervorgehoben über das Face region. Befehle verhalten sich kontextabhängig: bei aktiver Region operieren sie auf der Region, ohne aktive Region auf einem Standard-Default. Typische Beispiele:
- M-% (
query-replace) ersetzt nur innerhalb der Region. - M-; (
comment-dwim) kommentiert die Region (statt nur die aktuelle Zeile). - DEL löscht die ganze Region (mit
delete-selection-modean).
Inaktive Region
Existiert weiter — Mark und Point sind noch gesetzt — ist aber nicht visuell sichtbar. Hier wird es interessant:
- Befehle mit
regionim Namen (kill-region,indent-region,upcase-regionusw.) wirken trotzdem auf den Bereich zwischen Mark und Point, wenn die Variablemark-even-if-inactiveden Wertthat (vielerorts als persönliche Anpassung gesetzt). - Default-Wert ist
nil— dann werfen Region-Befehle bei inaktiver Region einen Fehler.
Deaktivierung
In transient-mark-mode deaktiviert sich die Region automatisch:
- bei jeder text-modifizierenden Operation,
- bei C-g (
keyboard-quit), - bei jeder Bewegung, die nicht Teil eines Shift-Select-Befehls ist.
Das „Mini-Bookmark"-Idiom
- C-SPC C-SPC setzt den Mark und deaktiviert die Region sofort — perfekt für „Bookmark für eine Minute"-Workflows. Später mit C-u C-SPC springst du zurück.
Den aktuellen Zustand prüfst du jederzeit:
- C-h v mark-active RET zeigt den Wert der Variable
mark-active(todernil).
Region-Befehle: alles, was mit „region" arbeitet
Region-Befehle sind in Emacs an einer einfachen Konvention erkennbar: ihr Funktionsname enthält fast immer das Wort region. Die folgende Tabelle listet die wichtigsten, geordnet von „brauchst du täglich" bis „brauchst du zweimal pro Woche, willst es aber nie wieder vergessen":
| Tastenkombi | Befehl | Wirkung |
|---|---|---|
C-w | kill-region | Region ausschneiden |
M-w | kill-ring-save | Region kopieren |
C-M-\ | indent-region | Region nach Major-Mode einrücken |
M-; | comment-dwim | Region kommentieren / ent-kommentieren |
C-x C-u | upcase-region | Region in Großbuchstaben |
C-x C-l | downcase-region | Region in Kleinbuchstaben |
M-x sort-lines | sort-lines | Zeilen in Region alphabetisch sortieren |
M-x reverse-region | reverse-region | Zeilen in umgekehrter Reihenfolge |
M-x delete-duplicate-lines | delete-duplicate-lines | doppelte Zeilen entfernen |
M-% | query-replace | bei aktiver Region: Ersetzung nur in der Region |
M-x replace-regexp | replace-regexp | Regex-Ersetzung in der Region |
M-x count-words-region | count-words-region | Wörter, Zeichen und Zeilen zählen |
M-x fill-region | fill-region | Zeilen auf fill-column umbrechen |
M-x tabify / untabify | tabify / untabify | Whitespace zwischen Tabs und Spaces wandeln |
Wenn du dir merken willst, was es überhaupt alles gibt: M-x apropos-command RET region$ RET listet alle Befehle, deren Name auf region endet. Eine eindrucksvolle Liste — und der Beweis, wie zentral die Region als Datenstruktur in Emacs ist.
rectangle-mark-mode: Block-Selektion
Manchmal willst du keine zusammenhängende Region, sondern einen rechteckigen Block über mehrere Zeilen — Spalte 10 bis 30 in den Zeilen 5 bis 12. Genau das macht rectangle-mark-mode. Aktiviert wird der Modus mit:
- C-x SPC ruft
rectangle-mark-modeauf — die normale Region wird zur Rechteck-Region. - M-x rectangle-mark-mode als langer Weg.
Der Auswahlblock ist die geometrische Schnittmenge der Spalten und Zeilen zwischen Point und Mark. Bewegst du Point, ändert sich der Rechteck-Block live mit. Innerhalb dieses Modus gibt es eine eigene Befehls-Familie:
| Tastenkombi | Befehl | Wirkung |
|---|---|---|
C-x r k | kill-rectangle | Rechteck ausschneiden |
C-x r M-w | copy-rectangle-as-kill | Rechteck kopieren (ohne Löschen) |
C-x r d | delete-rectangle | Rechteck löschen (ohne Kill-Ring) |
C-x r y | yank-rectangle | zuletzt gekilltes Rechteck einfügen |
C-x r t | string-rectangle | Rechteck durch eingegebenen Text ersetzen (alle Zeilen) |
C-x r o | open-rectangle | Leerraum-Rechteck einfügen, Inhalt nach rechts schieben |
C-x r c | clear-rectangle | Rechteck durch Leerzeichen ersetzen |
C-x r N | rectangle-number-lines | Zeilen am linken Rand des Rechtecks nummerieren |
Klassisches Einsatzfeld: ein Präfix vor jede Zeile einer Liste setzen. Du markierst Spalte 0 als Rechteck-Anfang, gehst N Zeilen nach unten, drückst C-x r t, gibst den Präfix ein — fertig. Auch das Entfernen von Spalten 0–4 (etwa Zeilen-Prefixe in copy-paste-Output) wird damit zur Drei-Tasten-Aktion.
Eine ausführliche Behandlung mit Bildern und realen Workflows liefert der eigene Rectangles-Artikel.
expand-region: Region semantisch erweitern
Eines der besten Region-Power-Tools im Emacs-Ökosystem ist das externe Paket expand-region. Die Idee ist denkbar einfach: ein Tastendruck, Region erweitert sich um den nächst-größeren semantischen Block. Mehrmals drücken — größere Ebene.
Eine typische Eskalation in einem JavaScript-Buffer:
- Point steht in einem Wort. C-= — Region umschließt das Wort.
- Nochmal C-= — Region umschließt den String, in dem das Wort steht.
- Nochmal — Region umschließt das umgebende Function-Argument.
- Nochmal — Region umschließt den Function-Call.
- Nochmal — die ganze Funktion.
Statt sechs verschiedener mark-*-Befehle merkst du dir genau einen — und der Modus weiß selbst, was als nächstes „logisch größer" ist.
Setup
expand-region ist nicht in Vanilla-Emacs enthalten und muss installiert werden. Mit use-package ist das eine Zeile Konfig plus Binding:
;; Region semantisch erweitern — ein Tastendruck pro Ebene
(use-package expand-region
:ensure t
:bind ("C-=" . er/expand-region))Wo dieses Snippet hingehört — in deine zentrale Konfigurations-Datei, siehe Artikel zur Konfiguration mit init.el und early-init.el.
Hinweis zur Tastenwahl
Auf der deutschen Tastatur ist C-= mühsam, weil = erst mit Shift erreichbar ist (Shift+0). Übliche Alternativen:
- C-, — bequem links neben dem Punkt, in den meisten Modes frei.
- C-ä — exotischer, aber auf DE-Layout sehr ergonomisch.
Einfach den :bind-Wert in der Konfig austauschen.
transient-mark-mode-Eigenheiten
Der Modus, der Region-Highlighting und kontextabhängiges Befehlsverhalten überhaupt erst aktiviert, hat ein paar Details, die im Alltag immer wieder auftauchen.
Default seit Emacs 23
transient-mark-mode ist seit Emacs 23 standardmäßig aktiv. Wer in einem alten Tutorial liest, der Mode müsse erst eingeschaltet werden, hat veraltete Informationen vor sich. Explizit aktivieren bzw. deaktivieren:
;; Default-Verhalten explizit setzen (für ältere Konfigs oder Demo-Setups)
(transient-mark-mode 1)
;; Old-School-Workflow: Region existiert, ist aber nie visuell hervorgehoben
;; (transient-mark-mode -1)
;; Region-Befehle nutzen die Region auch wenn inaktiv — verbreitete Anpassung
(setq mark-even-if-inactive t)Wohin das gehört — in deine zentrale Konfigurations-Datei, siehe Artikel zur Konfiguration mit init.el und early-init.el.
Region nachträglich reaktivieren
Manchmal hast du gerade die Region durch eine Bewegung deaktiviert und brauchst sie für den nächsten Befehl doch noch:
- C-u C-x C-x ruft
exchange-point-and-markmit Präfix auf — das tauscht Point und Mark und markiert die Region temporär als aktiv, ohne dass du erneutC-SPCbrauchst.
mark-even-if-inactive
Variable mit weitreichender Wirkung: Steht sie auf t, akzeptieren kill-region, indent-region und viele andere Region-Befehle die Region auch ohne aktives Highlighting. Klassische Mark-zentrierte Bedienlogik — kontroverses, aber für Tastatur-Workflows sehr angenehmes Verhalten.
delete-selection-mode
Verwandter, optionaler Modus für GUI-typische „selektion-überschreiben"-Logik:
;; Tippen bei aktiver Region ersetzt sie (wie in fast jedem GUI-Editor)
(delete-selection-mode 1)Default ist aus — Emacs ohne delete-selection-mode fügt Eingaben vor der aktiven Region ein, ohne sie zu löschen. Für Einsteiger von anderen Editoren ist die Aktivierung fast immer die richtige Wahl.
Praktische Workflows
Sechs Mini-Workflows, die die bisher gezeigten Bausteine in echte Editier-Bewegungen übersetzen.
Funktion duplizieren
- Point in die Funktion stellen.
- C-M-h —
mark-defunmarkiert die ganze Funktion. - M-w — Region kopieren.
- C-e ans Zeilenende der Funktion, RET für Leerzeile, C-y — Kopie eingefügt.
Alle Zeilen in der Region sortieren
- C-SPC am Listenanfang.
- Zum Listenende navigieren (Region wandert mit).
- M-x sort-lines RET — Zeilen sind alphabetisch.
Block in Großbuchstaben
- Region aufspannen (
C-SPC+ Bewegung oderS-\<arrow\>). - C-x C-u —
upcase-region.
Drei Spalten als Rechteck markieren
- Cursor an die obere linke Ecke.
- C-x SPC —
rectangle-mark-modean. - Drei Zeichen nach rechts (C-f C-f C-f) und N Zeilen nach unten (C-n).
- C-x r k killt den Block — C-x r y fügt ihn an beliebiger Stelle wieder ein.
Region in einem Buffer, dann in anderem einfügen
Der Kill-Ring ist global — Region in Buffer A kopieren, Buffer wechseln, Region in Buffer B einfügen, ohne dass Emacs „verliert", was du gerade hattest:
- Region aktivieren, M-w — kopiert.
- C-x b Buffer wechseln.
- C-y — eingefügt.
Zeilen-Präfix mit Rectangle einfügen
Klassische Tabellenformatierung — vor jede Zeile einer Liste - setzen, um Markdown-Bullets zu erzeugen:
- Cursor auf Spalte 0 der ersten Zeile, C-x SPC.
- C-n bis zur letzten Zeile.
- C-x r t, dann
- RET— alle Zeilen haben jetzt das Präfix.
Besonderheiten
Inaktive Region ist nicht weg
Ohne transient-mark-mode — und auch innerhalb davon, sobald die Region deaktiviert wurde — bleibt die Region als Konzept bestehen. Befehle wie kill-region oder indent-region nutzen sie trotzdem, sofern mark-even-if-inactive auf t steht. Das ist kein Bug, sondern die ältere, mark-zentrierte Bedienlogik.
`C-SPC C-SPC` ist das beste „Mini-Bookmark“-Idiom
Mark setzen, Region sofort deaktivieren — keine störende Hervorhebung, aber der Punkt steht im Mark-Ring. Später mit C-u C-SPC zurück. Für echte Langzeit-Marker sind die Emacs-Bookmarks da, für „in 30 Sekunden bin ich wieder hier" ist dieses Idiom unschlagbar.
`rectangle-mark-mode` macht aus Region eine geometrische Block-Auswahl
Aus „Bereich zwischen Point und Mark" wird „Rechteck zwischen den Spalten und Zeilen von Point und Mark". Perfekt für tabellarische Daten, Spalten-Operationen oder das Einfügen von Zeilen-Präfixen. Eine eigene Befehls-Familie unter C-x r ... macht das Ganze produktiv.
`expand-region` ist eines der besten Region-Power-Tools
Drei Tastendrücke statt sechs verschiedener mark-*-Befehle. Das Paket kennt eine semantische Eskalations-Hierarchie für die gängigen Sprach-Modes und erweitert die Region Ebene für Ebene — Wort, String, Argument, Funktion, Buffer.
`C-x h` ist das Emacs-Pendant zu `Cmd+A`
mark-whole-buffer markiert die gesamte Datei in einem Tastendruck — ein Befehl, der erstaunlich oft übersehen wird. Wer regelmäßig „alles kopieren" braucht, spart sich M-< C-SPC M-> M-w zugunsten von C-x h M-w.
`shift-select-mode` ist Default — die GUI-Konvention funktioniert
Pfeiltaste mit Shift erweitert die Region wie in jedem anderen Editor. Wer von VS Code oder JetBrains kommt, muss seine Selektions-Reflexe nicht umlernen — S-\<arrow\> tut, was du erwartest. Das geht auch mit S-C-f, S-C-n und allen anderen Bewegungs-Befehlen.
Auf macOS-DE kollidiert `C-SPC` mit Spotlight
Apple belegt ⌃Leertaste mit dem Eingabequellen-Wechsel, ⌘Leertaste mit Spotlight. Entweder Spotlight in den Systemeinstellungen umbiegen oder set-mark-command in Emacs auf einen freien Key remappen — sonst kommst du nie an den Mark.
`M-x apropos-command RET region$ RET` listet sie alle
Region-Befehle sind nicht alle vorab dokumentiert oder per Binding erreichbar — viele leben nur als M-x-Befehle. apropos-command mit dem Regex region$ zeigt die komplette Familie und ist die schnellste Methode, nach einem konkreten Befehl zu suchen, wenn du nur die ungefähre Aufgabe kennst.
Weiterführende Ressourcen
Externe Quellen
- GNU Emacs Manual — Mark — offizielle Übersicht zu Mark, Region und
transient-mark-mode. - GNU Emacs Manual — Using Region — Detail zu aktiver vs. inaktiver Region und
mark-even-if-inactive. - GNU Emacs Manual — Rectangles — komplette Rechteck-Befehls-Familie inklusive
rectangle-mark-mode. - GNU Emacs Manual — Shift Selection — Details zu
shift-select-modeund Bewegungs-Befehlen. - expand-region.el auf GitHub — Quellcode, Sprach-Unterstützung und Konfig-Optionen des Pakets.