Was bei anderen Editoren schlicht „Cursor" und „Selektion" heißt, trägt in Emacs drei eigene Namen: Point, Mark und Region. Die Trennung ist nicht akademisch — sie ermöglicht eine Mark-History, springbare Anker und Region-Befehle, die auf beliebige Punkte im Buffer wirken, ohne dass du sie aktiv „selektieren" musst. Wer diese drei Begriffe einmal sauber verstanden hat, versteht jeden Emacs-Bewegungs-Befehl, jede Region-Operation und jede Doku-Stelle, an der „the region" oder „the mark" auftaucht. Genau das ist das Ziel dieser Seite.
Point: der Cursor zwischen den Zeichen
Der Point ist Emacs' Begriff für das, was anderswo „Cursor-Position" heißt — mit einem entscheidenden Detail: Point liegt zwischen zwei Zeichen, niemals auf einem Zeichen. Der Block-Cursor, den du auf dem Bildschirm siehst, wird visuell links vor dem nächsten Zeichen gerendert; technisch zeigt Point in den Spalt davor. Das offizielle Manual formuliert es so: „the cursor … appears to be on a character, but you should think of point as between two characters; it points before the character that appears under the cursor".
Daraus folgt unmittelbar: In einem Buffer mit n Zeichen kann Point n + 1 verschiedene Positionen einnehmen — eine vor jedem Zeichen plus eine am absoluten Buffer-Ende. Ein 10-Zeichen-Buffer hat also 11 mögliche Point-Positionen, von 1 (vor dem ersten Zeichen) bis 11 (nach dem letzten).
Buffer-Inhalt: H a l l o !
Point-Position: 1 2 3 4 5 6 7
^ ^
| |
vor 'H' nach '!'Den aktuellen Wert kannst du dir jederzeit anzeigen lassen — sowohl als reine Position als auch als reiche Zeichen-Information (Codepoint, Encoding, Major-Mode-Kontext):
- C-x = ruft
what-cursor-positionauf — eine Zeile in der Echo-Area mit Zeichen, Codepoint, Position und Buffer-Größe. - M-x what-cursor-position mit Präfix (also C-u C-x =) liefert dieselbe Information ausführlicher in einem eigenen
*Help*-Buffer.
Zwei weitere Eigenschaften des Point, die häufig übersehen werden und später Sinn machen:
- Jeder Buffer hat seinen eigenen Point. Wechselst du den Buffer und kommst zurück, ist der Cursor wieder dort, wo du ihn verlassen hast — auch dann, wenn der Buffer zwischenzeitlich gar nicht angezeigt wurde.
- Mehrere Fenster auf denselben Buffer haben jeweils einen eigenen Point. Zwei Splits auf dieselbe Datei können also zwei verschiedene Cursor zeigen, die unabhängig voneinander wandern — das Konzept Point lebt pro Window, nicht pro Buffer, sobald derselbe Buffer mehrfach angezeigt wird.
Mark: der Anker
Der Mark ist ein zweiter, unsichtbarer Punkt im Buffer. Du setzt ihn an der aktuellen Position, bewegst danach den Point frei weiter — und zwischen Mark und Point spannt sich automatisch eine Region auf. Anders gesagt: Point ist „wo du gerade bist", Mark ist „wo du gerade warst, und woher du noch gemessen wirst".
Setzen lässt sich der Mark mit dem klassischen Idiom:
- C-SPC ruft
set-mark-commandauf und setzt den Mark an die aktuelle Point-Position. Die Region ist sofort „aktiv" — bewegt sich Point, wird der Bereich dazwischen visuell hervorgehoben. - M-x set-mark-command ist der vollständige Befehlsname und tut dasselbe, falls die Tastenkombi (z. B. unter macOS wegen Spotlight) nicht verfügbar ist.
Der Mark ist im Buffer nicht sichtbar — er lebt als interne Variable jedes Buffers. Du kannst aber jederzeit zu ihm springen und Point und Mark gegeneinander tauschen:
- C-x C-x ruft
exchange-point-and-markauf: Point springt dorthin, wo der Mark stand, Mark wandert zur ehemaligen Point-Position. Sehr nützlich, um „mal kurz" an den Anfang einer aktiven Region zu springen, dort zu prüfen, und dann mit einem weiteren C-x C-x zurück ans andere Ende zu kommen.
Ein wichtiges Detail: Jeder Buffer hat seinen eigenen Mark. Marks in verschiedenen Buffern stören sich nicht — wechselst du den Buffer, ist auch der Mark wieder „der Mark dieses Buffers", nicht ein globaler. Für den buffer-übergreifenden Fall gibt es den globalen Mark-Ring, mehr dazu in Sektion 05.
Region: der Bereich zwischen Point und Mark
Die Region ist exakt das, was Point und Mark einrahmen — alles vom kleineren der beiden Werte bis zum größeren. Die Reihenfolge spielt dabei keine Rolle: Mark kann vor oder nach Point liegen, die Region ist in beiden Fällen identisch. Das ist wichtig zu wissen, weil viele Region-Befehle die innere Reihenfolge automatisch korrekt verarbeiten.
Region-Befehle sind in Emacs an einer einfachen Konvention erkennbar: ihr Funktionsname enthält fast immer das Wort region. Eine kleine Auswahl, die du im Alltag häufig brauchst:
kill-region(C-w) — Region ausschneiden und in den Kill-Ring legen.kill-ring-save(M-w) — Region kopieren (Region bleibt unverändert).indent-region(C-M-\) — alle Zeilen der Region nach Major-Mode-Regeln einrücken.comment-region/comment-dwim(M-;) — Region als Kommentar markieren.upcase-region(C-x C-u) /downcase-region(C-x C-l) — Groß-/Kleinschreibung umstellen.query-replace(M-%) — wirkt bei aktiver Region nur innerhalb der Region.
Die Region kennt zwei Zustände: aktiv (visuell hervorgehoben) und inaktiv (existiert noch, ist aber nicht sichtbar). Das ist kein Detail, sondern für Emacs alltagsentscheidend — und das Thema der nächsten Sektion.
transient-mark-mode und die zwei Welten
Bis einschließlich Emacs 22 war der Default folgender: Region wurde nicht visuell hervorgehoben, sie existierte einfach als gedachter Bereich zwischen Point und Mark, und Region-Befehle wirkten immer auf diesen unsichtbaren Bereich — egal, ob du den Mark gerade frisch gesetzt hattest oder vor einer halben Stunde. Wer „eine Selektion sehen" wollte, musste explizit den Minor-Mode aktivieren.
Seit Emacs 23 ist transient-mark-mode Default. Das ändert das Verhalten grundlegend:
- Region wird visuell hervorgehoben (über das Face
region). - Region ist aktiv unmittelbar nach C-SPC und bleibt aktiv, solange du Point bewegst.
- Bei einem text-modifizierenden Befehl oder einem C-g wird die Region deaktiviert — Highlighting verschwindet.
- Viele Befehle verhalten sich kontextabhängig: bei aktiver Region operieren sie auf der Region, ohne aktive Region auf dem ganzen Buffer oder einem Standard-Default.
query-replace,indent-region-Aliase und einige Suchbefehle sind typische Beispiele.
Ein paar Old-School-User schalten den Mode bewusst aus, weil sie die „unsichtbare Region" als bewussten Workflow nutzen — Mark setzen, frei navigieren, und Region-Befehle wirken zuverlässig auf den letzten Abschnitt zwischen Point und Mark. Heute ist das eher Geschmackssache; für Einsteiger ist der Default die richtige Wahl, weil er sich wie aus anderen Editoren gewohnt anfühlt, ohne die Mark-Logik zu verstecken.
;; Region visuell hervorheben (seit Emacs 23 Default — hier explizit
;; für alte Konfigurationen oder Demo-Setups)
(transient-mark-mode 1)Wo dieses Snippet hingehört — in deine zentrale Konfigurations-Datei, siehe Artikel zur Konfiguration mit init.el und early-init.el.
Der Mark-Ring: deine Sprung-History
Hier wird das Konzept richtig interessant. Emacs speichert nicht nur den aktuellen Mark, sondern eine ganze History vorheriger Marks pro Buffer — den sogenannten Mark-Ring. Default-Größe sind 16 Einträge (Variable mark-ring-max). Jedes C-SPC legt den alten Mark in den Ring; auch viele „große Sprünge" tun das automatisch, damit du den Weg zurückfindest:
- M-< (
beginning-of-buffer) und M-> (end-of-buffer) legen die alte Position als Mark im Ring ab. isearchlegt nach erfolgreicher Suche den Start-Punkt als Mark ab.imenu,xref-find-definitions(oft M-.) und ähnliche „Springe-irgendwohin"-Befehle tun dasselbe.
Zurückspringen funktioniert mit einem Präfix-Argument auf C-SPC:
- C-u C-SPC springt zum letzten Mark im Ring. Mehrmals drücken cyclet rückwärts durch die History — du kannst also bequem zwischen den drei oder vier zuletzt besuchten Stellen einer Datei wechseln, ohne sie als Bookmark anzulegen.
Buffer-übergreifend funktioniert das gleiche Konzept über den globalen Mark-Ring. Dieser hat seine eigene Liste mit Marks, die in beliebigen Buffern liegen können:
- C-x C-SPC ruft
pop-global-markauf. Das springt zum jüngsten Eintrag im globalen Mark-Ring — und wenn dieser in einem anderen Buffer liegt, wechselt Emacs auch dorthin. Praktisch, um nach einemxref-find-definitions-Sprung in eine andere Datei mit einem einzigen Befehl wieder zurückzukommen.
Ein verbreitetes Idiom, das den Mark-Ring als „Bookmark für eine Minute" nutzt:
- C-SPC C-SPC setzt den Mark und deaktiviert die Region sofort wieder. Du kannst danach frei navigieren, ohne dass Highlighting stört — und holst dich später mit C-u C-SPC zurück.
Praktische Befehle im Überblick
Die Tabelle fasst die wichtigsten Mark- und Region-Befehle zusammen — alle aus Vanilla-Emacs, kein zusätzliches Paket nötig.
| Tastenkombi | Befehl | Wirkung |
|---|---|---|
C-SPC | set-mark-command | Mark an aktueller Position setzen, Region aktivieren |
C-x C-x | exchange-point-and-mark | Point und Mark tauschen (Region bleibt erhalten) |
C-SPC C-SPC | (Idiom) | Mark setzen, Region sofort deaktivieren — „Bookmark für eine Minute" |
C-u C-SPC | set-mark-command (Präfix) | zum letzten Mark im buffer-lokalen Mark-Ring springen |
C-x C-SPC | pop-global-mark | zum letzten Mark im globalen Mark-Ring (auch in anderem Buffer) |
C-x h | mark-whole-buffer | gesamten Buffer als Region markieren |
M-h | mark-paragraph | aktuellen Absatz als Region markieren |
C-M-h | mark-defun | aktuelle Funktion / Definition als Region markieren |
M-@ | mark-word | nächstes Wort an die Region anhängen (mehrmals drücken erweitert) |
C-w | kill-region | aktive Region ausschneiden |
M-w | kill-ring-save | aktive Region kopieren (Region bleibt unverändert) |
Zwei davon mit OS-Toggle für den schnellen Überblick:
- Mark setzen: C-SPC
- Point und Mark tauschen: C-x C-x
Wie immer in Emacs: Jeder dieser Befehle ist auch über M-x mit seinem Funktionsnamen erreichbar — praktisch, wenn die Tastenkombi auf deiner Plattform belegt ist oder du den Befehl gerade nicht in den Fingern hast.
Häufige Workflows
Theorie ist gut, aber die drei Begriffe entfalten ihre Stärke erst im Alltag. Vier Workflows, die du schnell automatisierst:
Großen Block kopieren
Klassischer Region-Workflow, eins zu eins wie in jedem anderen Editor — nur mit Emacs-Tasten:
- An den Block-Anfang navigieren.
- C-SPC — Mark setzen, Region aktiv.
- Ans Block-Ende navigieren (mit beliebigen Bewegungs-Befehlen — Region wandert mit).
- M-w — Region in den Kill-Ring kopieren.
Danach ist die Region deaktiviert, aber noch vorhanden — ein C-x C-x würde dich an die ursprüngliche Mark-Stelle springen lassen.
Springen mit Rückkehr
Wenn du „kurz woanders nachsehen" willst, ohne den aktuellen Ort zu verlieren:
- C-SPC C-SPC — Mark setzen, Region sofort deaktivieren (kein störendes Highlighting).
- Beliebig im Buffer navigieren — die Stelle ist im Mark-Ring gesichert.
- C-u C-SPC — zurück zur ursprünglichen Stelle.
Das ist der wahrscheinlich häufigste Mark-Ring-Einsatz im Alltag und ersetzt einen großen Teil dessen, was andere Editoren als „Position-History" bewerben.
Zwischen mehreren Edit-Stellen wechseln
Wer in einer Datei an drei, vier verschiedenen Stellen abwechselnd arbeitet, baut sich seine Sprünge im Mark-Ring auf:
- An Stelle A arbeiten, C-SPC C-SPC drücken, bevor du wegnavigierst.
- An Stelle B, später C, später D dasselbe.
- C-u C-SPC mehrmals drücken — Emacs cyclet durch die letzten Marks und du landest reihum an C, B, A.
Buffer-übergreifend zurück
Nach einem xref-Sprung oder einem find-file in eine andere Datei willst du oft zurück, ohne den Datei-Namen erneut tippen zu müssen:
- C-x C-SPC springt zum letzten Eintrag im globalen Mark-Ring — und wechselt dabei automatisch in den passenden Buffer. Mehrmals drücken bringt dich Schritt für Schritt durch deine Buffer-Sprung-History.
Interessantes
Point liegt zwischen Zeichen, nicht auf einem
Das Block-Cursor-Bild täuscht — Point sitzt im Spalt vor dem nächsten Zeichen. In einem 10-Zeichen-Buffer gibt es deshalb 11 mögliche Point-Positionen. Wer das einmal verinnerlicht, versteht sofort, warum Befehle wie forward-char und backward-char sich symmetrisch verhalten und warum (point-min) immer 1 ist, nicht 0.
Mark und Point getrennt — daher die History
Die Trennung von Cursor und Anker ist nicht nur eine Designentscheidung, sondern die Voraussetzung dafür, dass es überhaupt einen Mark-Ring geben kann. In einem klassischen Cursor-Modell, in dem „Selektion" nur ein zweiter Cursor ist, lässt sich keine sinnvolle History über mehrere Sprünge hinweg führen.
`transient-mark-mode` ist seit Emacs 23 Default
Region wird visuell hervorgehoben, viele Befehle verhalten sich kontextabhängig — moderne Editor-Erfahrung ohne historische Stolpersteine. Wer auf alten Tutorials liest, der Mode müsse erst aktiviert werden, hat veraltete Informationen vor sich.
Der Mark-Ring vergisst nichts in der laufenden Session
Default sind 16 Einträge pro Buffer (mark-ring-max). C-u C-SPC ist ein Lebensretter, wenn man „kurz woanders war" — auch dann, wenn der Sprung über einen anderen Befehl wie M-< oder eine Suche ausgelöst wurde, weil Emacs den alten Punkt automatisch im Mark-Ring ablegt.
Der globale Mark-Ring funktioniert über Buffer hinweg
C-x C-SPC (pop-global-mark) springt zurück — auch wenn das letzte Mark in einer ganz anderen Datei liegt. Das ist das natürliche Gegenstück zu xref-find-definitions und ähnlichen Sprüngen, die typischerweise einen Buffer-Wechsel auslösen.
`C-SPC C-SPC` ist das beste „Bookmark für eine Minute“-Idiom
Mark gesetzt, Region sofort deaktiviert — 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.
Region kann inaktiv sein und trotzdem existieren
Ohne transient-mark-mode — und auch innerhalb davon, sobald die Region deaktiviert wurde — bleibt die Region als Konzept bestehen. Viele klassische Region-Befehle (kill-region, indent-region) nutzen sie auch ohne Highlighting. Das ist kein Bug, sondern die ältere, mark-zentrierte Bedienlogik.
Auf macOS kollidiert `C-SPC` oft mit Spotlight
Apple belegt ⌃Leertaste standardmäßig mit dem Eingabequellen-Wechsel und ⌘Leertaste mit Spotlight. Lege Spotlight in den Systemeinstellungen auf eine andere Kombination oder remappe Emacs' set-mark-command auf einen freien Key — sonst kommst du nie an den Mark.
Weiterführende Ressourcen
Externe Quellen
- GNU Emacs Manual — Point — offizielle Definition von Point und dem Cursor-Konzept.
- GNU Emacs Manual — Mark — Übersichts-Sektion zu Mark, Region und
transient-mark-mode. - GNU Emacs Manual — Setting Mark — alle Befehle rund um das Setzen des Mark inklusive
mark-word,mark-paragraph,mark-defun. - GNU Emacs Manual — Mark Ring — Details zum lokalen und globalen Mark-Ring und zur Variable
mark-ring-max.