Jede Aktion in Emacs ist im Kern ein Funktionsaufruf — und M-x ist der universelle Zugang zu diesen Funktionen. Tastenkombinationen wie C-x C-s sind nur Abkürzungen für genau dieselben Aufrufe, die du auch über M-x save-buffer RET auslösen kannst. Wer diesen Mechanismus einmal verinnerlicht hat, kann jede neue Funktion sofort ausprobieren, ohne erst nach einer Tastenkombination suchen zu müssen — und lernt die Bindings ganz nebenbei.
M-x als universeller Launcher
Hinter M-x steckt selbst eine Funktion: execute-extended-command. Sie öffnet den Minibuffer mit dem Prompt „M-x " und erwartet einen Befehlsnamen. Bestätigt wird mit RET, abgebrochen mit C-g.
Ein typischer Ablauf:
- M-x drücken — der Minibuffer öffnet sich.
- Befehlsnamen tippen, z. B.
save-buffer. - Mit RET bestätigen — der Befehl läuft.
Das ist exakt das gleiche, das auch hinter der Tastenkombination C-x C-s passiert. Eine Binding ist nichts anderes als ein hinterlegter Zeiger auf einen Funktionsnamen — die Funktion selbst bleibt dieselbe.
M-x save-buffer_Damit gilt der wichtigste Satz dieses Artikels: alles, was Emacs kann, ist über M-x erreichbar. Die rund 10.000 Befehle in einer durchschnittlich konfigurierten Emacs-Session sind über genau diesen Eingang ansprechbar — auch die, für die niemand jemals eine Binding vergeben hat.
Interaktive vs. nicht-interaktive Funktionen
Nicht jede Elisp-Funktion lässt sich über M-x aufrufen. Emacs unterscheidet zwischen normalen Funktionen (nur aus Code aufrufbar) und Befehlen (auch vom User aufrufbar). Ein Befehl ist eine Funktion, die in ihrem Rumpf eine (interactive ...)-Form trägt. Diese Form ist die ausdrückliche Erlaubnis des Autors, dass die Funktion direkt vom User gestartet werden darf.
;; Reine Funktion — NICHT über M-x aufrufbar.
(defun mibeon/double (n)
"Verdoppelt N."
(* n 2))
;; Befehl — über M-x mibeon/say-hello aufrufbar.
(defun mibeon/say-hello (name)
"Begrüßt NAME im Echo-Bereich."
(interactive "sName: ")
(message "Hallo, %s!" name))Drei Beobachtungen dazu:
mibeon/doublefehlt dasinteractive— M-x mibeon/double meldetWrong type argument: commandp.mibeon/say-hellohat eineinteractive-Spezifikation, die zusätzlich erklärt, wie das Argument abgefragt wird ("sName: "= ein String mit dem Prompt „Name: ").- Die Trennung ist bewusst: Library-Autoren markieren nur die Funktionen, die für den Direkt-Aufruf gedacht sind. Interne Helfer bleiben aus dem Completion-Pool draußen und vermüllen die
M-x-Liste nicht.
In der Praxis musst du dich um diese Unterscheidung selten kümmern — die Hilfe-Funktionen (siehe Artikel zum Hilfe-System) zeigen dir an, ob etwas ein Befehl ist oder nicht.
Completion mit TAB
Befehlsnamen in Emacs sind lang und sprechend — save-some-buffers, replace-regexp-in-region, display-line-numbers-mode. Niemand tippt sie komplett. Dafür gibt es Completion im Minibuffer, ausgelöst durch TAB.
M-x sav<TAB>Possible completions are:
save-buffer save-buffers-kill-emacs
save-buffers-kill-terminal save-some-buffers
save-place-mode save-place-local-modeVier nützliche Tasten im Completion-Kontext:
| Taste | Wirkung |
|---|---|
| TAB | vervollständigt so weit wie eindeutig möglich |
| TAB TAB | öffnet den *Completions*-Buffer mit allen Kandidaten |
| ? | gleichwertig zu TAB TAB — Liste aller Kandidaten anzeigen |
| RET | bestätigt die aktuelle Eingabe |
Die Default-Completion ist präfix-basiert: sav<TAB> matcht alles, was mit „sav" beginnt. Wer flexibler matchen will (Substring, Fuzzy, Initialen), greift später zum Trio Vertico + Marginalia + Orderless — siehe Vertico, Marginalia, Orderless. In Vanilla-Emacs reicht TAB-Präfix für den Anfang aber vollkommen aus.
History mit M-p und M-n
Jeder M-x-Aufruf wandert in eine Befehls-History. Im offenen Minibuffer kannst du diese History rückwärts und vorwärts durchblättern:
| Taste | Wirkung |
|---|---|
| M-p | vorheriger (älterer) Befehl aus der History |
| M-n | nächster (jüngerer) Befehl |
| M-r | Regex-Suche rückwärts in der History |
| M-s | Regex-Suche vorwärts in der History |
Das macht typische Wiederholungs-Workflows extrem schnell: Wer gerade package-refresh-contents aufgerufen hat und es noch einmal braucht, tippt M-x M-p RET — drei Tastenanschläge statt der vollen Eingabe.
Die History ist nicht auf M-x beschränkt. Jeder Minibuffer-Prompt mit eigener History — etwa C-x C-f (Dateien), C-x b (Buffer), M-% (Replace) — reagiert auf dieselben Tasten. Wer einmal verstanden hat, dass M-p „vorheriger Eintrag" bedeutet, navigiert in jedem dieser Prompts dieselbe Weise.
Für längere Recherche bietet Emacs zusätzlich den Befehl M-x list-command-history (bzw. die Variable command-history): ein Buffer mit allen ausgeführten Befehlen inklusive ihrer Argumente, aus dem heraus jeder Eintrag wiederholt aufgerufen werden kann.
Prefix-Argumente — dieselbe Funktion, anderes Verhalten
Viele Emacs-Befehle reagieren auf ein Prefix-Argument, das vor dem eigentlichen Aufruf gesetzt wird. Das ist eine Zahl (oder ein „universelles" Signal), die der Befehl selbst interpretiert. Damit verhält sich derselbe Befehl je nach Prefix unterschiedlich — eine der mächtigsten und am meisten unterschätzten Mechaniken von Emacs.
Wichtig: Das Wort „Prefix" hier hat nichts mit den Prefix-Keys (C-x, C-c …) aus dem Artikel zur Tasten-Notation zu tun. Prefix-Keys leiten eine Tasten-Sequenz ein. Prefix-Argumente sind Zahlen, die einen Befehl modifizieren.
Drei Wege, ein Prefix-Argument zu setzen
| Schreibweise | Effekt |
|---|---|
| C-u | universelles Prefix — Standard-Wert ist (4) (in Listenform) |
| C-u C-u | erneut C-u multipliziert mit 4 → (16); nochmals → (64) usw. |
| C-u 10 | numerisches Prefix-Argument 10 |
| M-10 | Kurzform: numerisches Argument 10 (M- + Ziffernfolge) |
| C-u - / M-- | negatives Prefix-Argument (−1, weitere Ziffern verlängern es) |
Beispiele in der Praxis
| Befehl | Effekt |
|---|---|
| C-n | eine Zeile nach unten |
| C-u 10 C-n | zehn Zeilen nach unten |
| M-10 C-n | zehn Zeilen nach unten (Kurzform — exakt dasselbe) |
| C-k | löscht von Cursor bis Zeilenende |
| C-u 0 C-k | löscht von Zeilenanfang bis Cursor (Prefix 0 invertiert die Richtung) |
| C-u 3 C-k | löscht drei Zeilen ab Cursor |
| C-SPC | setzt Mark an aktueller Position |
| C-u C-SPC | springt zur zuletzt gesetzten Mark-Position |
| M-x query-replace | interaktives Suchen & Ersetzen, case-sensitive je nach Buffer-Mode |
| C-u M-x query-replace | ersetzt nur in der aktuellen Region (statt im ganzen Buffer) |
Die Logik ist immer dieselbe: Der Befehl prüft selbst, ob ein Prefix-Argument vorliegt, und passt sein Verhalten an. Was genau passiert, dokumentiert jeder Befehl in seinem Docstring (anzeigbar mit C-h f). Faustregel: Wenn dich an einem Befehl etwas „fast aber nicht ganz" stört, probiere ihn mit C-u davor — überraschend oft ist genau das die gesuchte Variante.
M-x und der spätere Vertico-Stack
Vanilla-M-x ist solide: Minibuffer, TAB-Completion, History. Für den Alltag reicht das. Die Power-User-Erfahrung kommt aber aus einem kleinen Stapel modularer Pakete, die das System auf modernes Niveau heben:
| Paket | Verbesserung |
|---|---|
| Vertico | vertikale Liste der Kandidaten direkt im Minibuffer |
| Marginalia | Annotationen rechts neben jedem Kandidaten (Docstring, Binding, Mode) |
| Orderless | flexible Match-Strategien (Substring, Initialen, Fuzzy, Regex) |
| Consult | erweiterte Befehle (consult-buffer, consult-line, consult-grep) |
| Embark | Aktionen auf den gerade markierten Kandidaten anwenden |
Wichtig: Die zugrunde liegende Mechanik bleibt identisch. Auch mit Vertico ist M-x save-buffer RET nichts anderes als ein Aufruf von execute-extended-command — nur dass die Auswahl-Oberfläche dazwischen erheblich angenehmer ist. Das Detail-Setup findest du im Kapitel Completion-Frameworks und speziell unter Vertico, Marginalia, Orderless.
M-x als Lern-Werkzeug
Für die ersten Wochen mit Emacs gibt es eine pragmatische Empfehlung: Statt Tastenkombinationen auswendig zu lernen, ruf alles über M-x auf. Drei Gründe sprechen dafür:
- Du musst nichts wissen, um anzufangen. Wenn du das Konzept einer Funktion kennst (
save-buffer,kill-line,goto-line), kannst du sie sofort ausführen — ohne erst eine Cheatsheet-Tabelle zu konsultieren. - Emacs lehrt dich die Bindings nebenbei. Nach jedem
M-x-Aufruf eines Befehls, der auch eine Tastenkombination hat, erscheint in der Echo-Area kurz die Notiz „You can run the commandsave-bufferwithC-x C-s". Das ist das eingebaute Lern-Coach-System. - Bindings, die du wirklich oft brauchst, bleiben hängen — weil sie an Bedeutung gekoppelt sind, nicht an blindes Auswendiglernen. Befehle, die du selten brauchst, bleiben über
M-xjederzeit erreichbar, ohne dass du die Binding kennen musst.
You can run the command `save-buffer' with C-x C-sWie lange dieser Hinweis stehenbleibt und ab wie vielen Aufrufen er gezeigt wird, steuern die Variablen suggest-key-bindings und extended-command-suggest-shorter. Defaults sind sinnvoll — abschalten lohnt sich praktisch nie, gerade in der Lernphase.
Interessantes
M-x ist selbst nur eine Funktion
Hinter M-x steckt execute-extended-command — eine ganz normale Elisp-Funktion. Sie lässt sich theoretisch auf andere Tasten legen, durch alternative Implementierungen ersetzen (z. B. amx, smex) oder programmatisch aus Elisp heraus aufrufen. Es ist nichts „Magisches" an M-x — nur eine besonders prominente Binding für eine besonders nützliche Funktion.
Befehle ohne Binding sind über M-x trotzdem erreichbar
Viele extrem nützliche Funktionen — align-regexp, sort-lines, delete-duplicate-lines, pretty-print — haben in Vanilla-Emacs keine Tastenkombination. Über M-x sind sie trotzdem jederzeit aufrufbar. Wer ausschließlich nach Bindings sucht, übersieht die halbe Bibliothek.
Prefix-Argumente sind das unterschätzteste Feature
C-u 0 C-k löscht von Zeilenanfang bis Cursor — die natürliche Umkehrung von C-k. C-u C-x = zeigt erweiterte Zeichen-Infos. C-u M-! fügt die Shell-Ausgabe direkt in den Buffer ein. Wer sich angewöhnt, an unklarer Stelle einmal C-u davor zu setzen, entdeckt regelmäßig zweite Bedeutungen vertrauter Befehle.
Die Echo-Area ist dein eingebauter Lern-Coach
Nach jedem M-x-Aufruf eines Befehls mit Binding nennt Emacs die kürzere Tastenkombination in der Echo-Area. Über Wochen baust du dir so ein Repertoire der Bindings auf, die du wirklich nutzt — ohne je eine Cheatsheet konsultiert zu haben.
Mit Vertico wird M-x zur Hauptnavigation
Über das Trio Vertico + Consult + Embark wird M-x zum zentralen Navigationsmittel für alles: Befehle, Buffer, Dateien, Symbole, Suchergebnisse. Die Trennung „Tastenkombination vs. Befehl tippen" verschwindet zugunsten eines einheitlichen, suchbaren Index aller Aktionen.
History-Cycling funktioniert in JEDEM Minibuffer
M-p und M-n blättern nicht nur durch die M-x-History, sondern durch fast jeden Minibuffer-Prompt mit eigener History — Datei öffnen, Buffer wechseln, Replace, Shell-Befehl, Grep-Muster. Die Geste „Minibuffer offen, M-p drücken" ist eine der besten Investitionen im frühen Emacs-Lernen.
Deaktivierte Befehle fragen einmalig nach Bestätigung
Einige selten genutzte oder potenziell verwirrende Befehle (z. B. narrow-to-region, set-goal-column) sind per Default disabled und fragen beim ersten Aufruf über M-x, ob sie freigeschaltet werden sollen. Das ist kein Bug, sondern eine Schutzmaßnahme von 1985 — eine kurze Bestätigung schaltet den Befehl dauerhaft frei.
Weiterführende Ressourcen
Externe Quellen
- GNU Emacs Manual — M-x (Running Commands by Name) — offizielle Referenz zu
execute-extended-command. - GNU Emacs Manual — Minibuffer — Prompts, History, Completion-Verhalten.
- GNU Emacs Manual — Arguments — Prefix-Argumente in voller Tiefe.
- GNU Emacs Manual — Interactive Call — die
interactive-Spezifikation aus Elisp-Sicht. - Vertico auf GitHub — moderner Minibuffer-Completion-UI.