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-command auf 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-f für wortweise, S-C-n zeilenweise 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:

TastenkombiBefehlMarkiert
C-x hmark-whole-buffergesamten Buffer (Emacs-Pendant zu Cmd+A / Ctrl+A)
M-hmark-paragraphaktuellen Absatz
C-M-hmark-defunaktuelle Funktion / Top-Level-Definition
M-@mark-wordnä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-mode an).

Inaktive Region

Existiert weiter — Mark und Point sind noch gesetzt — ist aber nicht visuell sichtbar. Hier wird es interessant:

  • Befehle mit region im Namen (kill-region, indent-region, upcase-region usw.) wirken trotzdem auf den Bereich zwischen Mark und Point, wenn die Variable mark-even-if-inactive den Wert t hat (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 (t oder nil).

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

TastenkombiBefehlWirkung
C-wkill-regionRegion ausschneiden
M-wkill-ring-saveRegion kopieren
C-M-\indent-regionRegion nach Major-Mode einrücken
M-;comment-dwimRegion kommentieren / ent-kommentieren
C-x C-uupcase-regionRegion in Großbuchstaben
C-x C-ldowncase-regionRegion in Kleinbuchstaben
M-x sort-linessort-linesZeilen in Region alphabetisch sortieren
M-x reverse-regionreverse-regionZeilen in umgekehrter Reihenfolge
M-x delete-duplicate-linesdelete-duplicate-linesdoppelte Zeilen entfernen
M-%query-replacebei aktiver Region: Ersetzung nur in der Region
M-x replace-regexpreplace-regexpRegex-Ersetzung in der Region
M-x count-words-regioncount-words-regionWörter, Zeichen und Zeilen zählen
M-x fill-regionfill-regionZeilen auf fill-column umbrechen
M-x tabify / untabifytabify / untabifyWhitespace 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-mode auf — 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:

TastenkombiBefehlWirkung
C-x r kkill-rectangleRechteck ausschneiden
C-x r M-wcopy-rectangle-as-killRechteck kopieren (ohne Löschen)
C-x r ddelete-rectangleRechteck löschen (ohne Kill-Ring)
C-x r yyank-rectanglezuletzt gekilltes Rechteck einfügen
C-x r tstring-rectangleRechteck durch eingegebenen Text ersetzen (alle Zeilen)
C-x r oopen-rectangleLeerraum-Rechteck einfügen, Inhalt nach rechts schieben
C-x r cclear-rectangleRechteck durch Leerzeichen ersetzen
C-x r Nrectangle-number-linesZeilen 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:

  1. Point steht in einem Wort. C-= — Region umschließt das Wort.
  2. Nochmal C-= — Region umschließt den String, in dem das Wort steht.
  3. Nochmal — Region umschließt das umgebende Function-Argument.
  4. Nochmal — Region umschließt den Function-Call.
  5. 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:

elisp init.el — expand-region installieren und binden
;; 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:

elisp init.el — transient-mark-mode steuern
;; 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-mark mit Präfix auf — das tauscht Point und Mark und markiert die Region temporär als aktiv, ohne dass du erneut C-SPC brauchst.

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:

elisp init.el — Selektion überschreibt
;; 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

  1. Point in die Funktion stellen.
  2. C-M-hmark-defun markiert die ganze Funktion.
  3. M-w — Region kopieren.
  4. C-e ans Zeilenende der Funktion, RET für Leerzeile, C-y — Kopie eingefügt.

Alle Zeilen in der Region sortieren

  1. C-SPC am Listenanfang.
  2. Zum Listenende navigieren (Region wandert mit).
  3. M-x sort-lines RET — Zeilen sind alphabetisch.

Block in Großbuchstaben

  1. Region aufspannen (C-SPC + Bewegung oder S-\<arrow\>).
  2. C-x C-uupcase-region.

Drei Spalten als Rechteck markieren

  1. Cursor an die obere linke Ecke.
  2. C-x SPCrectangle-mark-mode an.
  3. Drei Zeichen nach rechts (C-f C-f C-f) und N Zeilen nach unten (C-n).
  4. 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:

  1. Region aktivieren, M-w — kopiert.
  2. C-x b Buffer wechseln.
  3. C-y — eingefügt.

Zeilen-Präfix mit Rectangle einfügen

Klassische Tabellenformatierung — vor jede Zeile einer Liste - setzen, um Markdown-Bullets zu erzeugen:

  1. Cursor auf Spalte 0 der ersten Zeile, C-x SPC.
  2. C-n bis zur letzten Zeile.
  3. 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

Verwandte Artikel

/ Weiter

Zurück zu Editieren

Zur Übersicht