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.

M-x

Ein typischer Ablauf:

  1. M-x drücken — der Minibuffer öffnet sich.
  2. Befehlsnamen tippen, z. B. save-buffer.
  3. 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.

text Minibuffer-Zustand nach M-x
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.

elisp zwei-funktionen.el — Befehl vs. reine Funktion
;; 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/double fehlt das interactiveM-x mibeon/double meldet Wrong type argument: commandp.
  • mibeon/say-hello hat eine interactive-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.

text Completion-Beispiel
M-x sav<TAB>
Output
Possible completions are:
  save-buffer            save-buffers-kill-emacs
  save-buffers-kill-terminal  save-some-buffers
  save-place-mode        save-place-local-mode

Vier nützliche Tasten im Completion-Kontext:

TasteWirkung
TABvervollständigt so weit wie eindeutig möglich
TAB TABöffnet den *Completions*-Buffer mit allen Kandidaten
?gleichwertig zu TAB TAB — Liste aller Kandidaten anzeigen
RETbestä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:

TasteWirkung
M-pvorheriger (älterer) Befehl aus der History
M-nnächster (jüngerer) Befehl
M-rRegex-Suche rückwärts in der History
M-sRegex-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

SchreibweiseEffekt
C-uuniverselles Prefix — Standard-Wert ist (4) (in Listenform)
C-u C-uerneut C-u multipliziert mit 4 → (16); nochmals → (64) usw.
C-u 10numerisches Prefix-Argument 10
M-10Kurzform: numerisches Argument 10 (M- + Ziffernfolge)
C-u - / M--negatives Prefix-Argument (−1, weitere Ziffern verlängern es)

Beispiele in der Praxis

BefehlEffekt
C-neine Zeile nach unten
C-u 10 C-nzehn Zeilen nach unten
M-10 C-nzehn Zeilen nach unten (Kurzform — exakt dasselbe)
C-klöscht von Cursor bis Zeilenende
C-u 0 C-klöscht von Zeilenanfang bis Cursor (Prefix 0 invertiert die Richtung)
C-u 3 C-klöscht drei Zeilen ab Cursor
C-SPCsetzt Mark an aktueller Position
C-u C-SPCspringt zur zuletzt gesetzten Mark-Position
M-x query-replaceinteraktives Suchen & Ersetzen, case-sensitive je nach Buffer-Mode
C-u M-x query-replaceersetzt 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:

PaketVerbesserung
Verticovertikale Liste der Kandidaten direkt im Minibuffer
MarginaliaAnnotationen rechts neben jedem Kandidaten (Docstring, Binding, Mode)
Orderlessflexible Match-Strategien (Substring, Initialen, Fuzzy, Regex)
Consulterweiterte Befehle (consult-buffer, consult-line, consult-grep)
EmbarkAktionen 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 command save-buffer with C-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-x jederzeit erreichbar, ohne dass du die Binding kennen musst.
text Echo-Area nach M-x save-buffer
You can run the command `save-buffer' with C-x C-s

Wie 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

Verwandte Artikel

/ Weiter

Zurück zu Bedienkonzept

Zur Übersicht