(X)Emacs Kurzreferenz

Autor: Stefan Wehr (http://www.informatik.uni-freiburg.de/~wehr/)
Version: 0.4
Datum: 2005-10-17

Änderungen:
0.4
  • Fehler bezueglich Meta-k und Meta-d verbessert, Undo hinzugefuegt. Dank an Georg Schulz.
0.3
  • Hinweis zur Eingabe von Zeichen mit spezieller Bedeutung im Ersetzungsmodus hinzugefügt
  • kleine Korrektur des Layouts
  • einige Tippfehler beseitigt

Einleitung

Dies ist eine Kurzreferenz. Vieles ist deshalb nur verkürzt und/oder unvollständig dargestellt. Ich habe Kommandos aufgelistet, die ich häufig verwende und für nützlich halte. Falls du ein Kommando für nützlich hälst, es aber nicht in dieser Liste findest, freue ich mich über eine Mail. Eine relativ vollständige Dokumentation der Features von Emacs findet man im Emacs Manual.

Ich verwende die folgende Notation, um Tastaturkürzel darzustellen: Mit Großbuchstaben werden Tasten wie Strg oder Alt bezeichnet, Kleinbuchstaben bezeichnen die jeweiligen Tasten. Wenn Tasten gleichzeitig zu drücken sind, verwende ich ein Bindestrich (`-') als Trennzeichen, falls die Tasten nacheinander gedrückt werden sollen, werden sie durch ein Leerzeichen getrennt.
Diese Abkürzungen stellen die Sondertasten auf der Tastatur dar:
  • C => Control, Strg oder Steuerung
  • M => Meta (dies ist entweder Alt oder die `Windows' Taste, in jedem Fall aber die Esc-Taste)
  • RET => Return oder Enter
  • SPC => Leertaste
Einige Beispiel:
  • C-x r => Drücke gleichzeitig Strg und 'x', danach 'r'
  • C-M-c => Drücke Strg, Meta und 'c' gleichzeitig
  • M-% => Drücke Meta und '%' gleichzeitig
  • C-SPC => Drücke Strg und Leertaste gleichzeitig

Dateien / Beenden / Undo

C-x C-f Öffnet eine Datei im aktuellen Rahmen als neuen Buffer.
C-x C-v Öffnet eine Datei im aktuellen Rahmen, ersetzt den bisherigen Buffer.
C-x C-s ! Speichert alle offenen Dateien mit Rückfrage bei jeder Datei.
C-x C-s Speichert die aktuelle Datei.
C-x C-w Speichert eine Datei unter einem anderen Name.
C-x i Fügt den Inhalt einer Datei ein.
C-x C-c Beendet Emacs.
C-x u Undo

Navigation

C-v Um ein Seite vorwärts scrollen.
M-v Um eine Seite rückwärts scrollen.
C-l Seite am Cursor zentrieren.
M-< Geht zum Anfang des Puffers.
M-> Geht zum Ende des Puffers.
C-f Bewegt den Cursor einen Buchstaben nach vorne.
M-f Bewegt den Cursor ein Wort nach vorne.
C-b Bewegt den Cursor einen Buchstaben zurück.
M-b Bewegt den Cursor ein Wort zurück.
C-n Geht in die nächste Zeile.
C-p Geht in die vorherige Zeile.
C-a Geht an den Anfang der aktuellen Zeile.
C-e Geht an das Ende der aktuellen Zeile.
M-m Geht an den sichtbaren Anfang der aktuellen Zeile.

Puffer, Windows und Frames

Emacs zeigt jede zu editierende Datei in einem sogenannten Puffer (`buffer') an. Jeder Puffer ist in einem Fenster (`window') enthalten und jedes Fenster in einem Rahmen (`frame'). Man darf sich nicht von der Bezeichnung `window' täuschen lassen; damit ist die Unterteilung eines Fenster auf dem Bildschirm (welche bei Emacs als `frames' bezeichnet werden) in Untereinheiten gemeint.
C-x 2 Unterteilt das aktuelle Fenster vertikal in 2 Abschnitte (2 neue Fenster).
C-x 3 Unterteilt das aktuelle Fenster horizontal in 2 Abschnitte (2 neue Fenster).
C-x 0 Verschmilzt das aktuelle Fenster mit dem Nachbarfenster, das Nachbarfenster nimmt danach den Platz beider Fenster ein.
C-x 1 Macht das aktuelle Fenster zum alleinigen Fenster des Rahmens.
C-x o Springt in das Nachbarfenster.
C-x 5 2 Erstellt einen neuen Rahmen.

Markierungen

C-SPC Setzt eine Markierung an der aktuellen Cursorposition.
C-x h Markiert den gesamten Puffer.
C-x C-x Tauscht die Markierung mit der Cursorposition.
C-< Setzt Marke an den Anfang des Puffers.
C-> Setzt Marke an das Ende des Puffers.
C-u C-SPC Springt zur letztgesetzten Marke. Wiederholtes Anwenden durchläuft die Liste der Markierungspositionen.

Löschen, Ausschneiden, Kopieren

Wenn man in Emacs einen Textteil löscht, ist dieser unwiederbringlich verloren. Funktionen, die so etwas bewirken, erkennt man am Präfix `delete' in ihrem Namen. Die meisten Funktionen jedoch schneiden den Text nur aus; diese tragen das Präfix `yank'. Im Gegensatz zu anderen Editoren überschreibt eine Yank-Operation nicht den bereits gespeicherten Textteil. Die Textabschnitte werden im sogenannten `kill-ring' gespeichert. Dies ist eine Art Queue, die ihre Einträge nach der LIFO Strategie verwaltet. Mit F1 v kill-ring RET kann man sich den Inhalt der Variablen anzeigen lassen.
C-k Löscht das Zeichen rechts vom Cursor.
M-k Schneidet den Rest der Zeile rechts vom Cursor aus.
M-d Schneidet das Wort bzw. den Wortteil rechts vom Cursor aus.
DEL Löscht das Zeichen links vom Cursor.
M-DEL Schneidet das Wort links vom Cursor aus.
M-^ Verbindet die aktuelle Zeile mit deren Vorgängerzeile.
C-x C-o Löscht die der aktuellen Zeile nachfolgenden Leerzeilen. Falls die Zeile selbst auch leer ist, werden auch die vorhergenden Leerzeilen gelöscht.
C-k Löscht die aktuellen Zeile ohne das abschließende newline-Zeichen. Falls aber der Cursor am sichtbaren Ende steht, wird nur das newline-Zeichen gelöscht.
Mit einem numerischen Argument versehen (C-u DIGIT) ändert sich die Funktionsweise etwas:
  • DIGIT > 0: Es werden die DIGIT Zeilen inklusive des jeweiligen newline-Zeichens gelöscht, die dem Cursor nachfolgen. Die aktuelle Zeile ist ab dem Cursor eingeschlossen.
  • DIGIT < 0: Es werden die DIGIT Zeilen inklusive des jeweiligen newline-Zeichens gelöscht, die dem Cursor vorangehen. Die aktuelle Zeile in der Zählung nicht mit eingeschlossen. Sie wird ab dem Cursor nach links gelöscht.
  • DIGIT = 0: Alles links vom Cursor in der aktuellen Zeile wird gelöscht.
C-w Markierung ausschneiden.
M-w Markierung kopieren.

Einfügen

Wenn es sich bei der Einfügeoperation um das Einfügen eines ausgeschnitten oder kopierten Textteils handelt, spricht man im Emacs-Jargon von `Yanking'. Die ensprechenden Funktionen heißen auch alle entsprechend und sind dadurch leicht zu erkennen.
RET Fügt eine neuen Zeile ein und springt in deren Anfang.
C-j Fügt eine neue Zeile ein und rückt sie den Regeln des Modus' gemäÂß ein.
C-o Fügt eine Leerzeile nach dem Cursor ein.
C-y Fügt den zuletzt ausgeschnittenen oder kopierten Text ein.
M-y Navigiert durch die Liste der zuletzt ausgeschnittenen oder kopierten Textteile.
M-x append-to-buffer Hängt den ausgewählten Text ans Ende eines Buffers.
M-x prepend-to-buffer Fügt den ausgwählten Text am Anfang eines Buffers ein.

rechteckiges Editieren

Um ein Rechteck als ein solches zu Markieren, wird der Text `ganz normal' markiert (siehe Abschnitt ). Das Rechteck wird jetzt durch die Marke und den Cursor begrenzt.
C-x r d Löscht das ausgewählte Rechteck.
C-x r k Schneidet das gerade ausgewählte Rechteck aus.
C-x r y Fügt das zuletzt ausgeschnittene Rechteck ein. Rechtecke werden nicht im `kill-ring' aufbewahrt. Man kann immer nur auf das zuletzt ausgeschnittene zugreifen.
C-x r t STRING RET Ersetzt jede Zeile des Rechtecks durch STRING.

Register

Ein Register kann die verschiedensten Informationen speichern. Jedes Registern wird über einen Buchstaben angesprochen. Das Neubelegen eines Registers löscht den bisherigen Inhalt (falls vorhanden).
C-x r SPC CHAR Speichert die aktuelle Cursorposition im Register CHAR.
C-x r j CHAR Springt zu der im Register CHAR gespeicherten Cursorposition.
C-x r s CHAR Speichert makierten Text im Register CHAR.
C-x r r CHAR Speichert die Auswahl als Rechteck im Register CHAR
C-x r i CHAR Fügt Text aus Register CHAR ein (auch Rechtecke).

Suchen

Emacs verwendet als Standardsuchmodus die sogenannte `inkrementelle Suche'. Dabei wird bereits beim Tippen des Suchbegriffs' nach möglichen Treffern gesucht und die entsprechende Stelle markiert. Falls in einem Suchbegriff nur Kleinbuchstaben verwendet werden, ignoriert Emacs die Unterschiede, welche durch Groß- und Kleinschreibung hervorgerufen werden. Diese Verhalten kann durch Setzen der Variable case-fold-search auf nil geändert werden.
C-s Startet eine inkrementelle Suche beginnend bei der aktuellen Curserposition in Richtung Dateiende (Vorwärtsrichtung). Während diesem Vorgang kann mit einem erneuten C-s zum nächsten Treffer gesprungen werden, bzw. mit C-r die Suchrichtung geändert werden. Mit M-p und M-n kann man im `search-ring' navigieren und dadurch frühere Suchvorgänge reaktivieren. Mit M-y kann auf den Inhalt des `kill-ring' zugegriffen werden.
C-r Startet eine inkrementelle Suche beginnend bei der aktuellen Curserposition in Richtung Dateianfang (Rückwärtsrichtung) . Man kann dabei dieselben Kommandos anwenden wie bei der inkrementellen Suche in Vorwärtsrichtung.
C-s C-s Sucht nach dem zuletzt verwendeten Begriff in Vorwärtsrichtung.
C-r C-r Sucht nach dem zuletzt verwendeten Begriff in Rückwärtsrichtung.
C-s RET Startet eine nicht-inkrementelle Suche in Vorwärtsrichtung.
C-r RET Startet eine nicht-inkrementelle Suche in Rückwärtsrichtung.
C-M-s Startet eine inkrementelle Suche in Vorwärtsrichtung, wobei der Suchbegriff als regulärer Ausdruck interpretiert wird. Die Befehle innerhalb dieses Suchmodus' sind analog zu denen im `normalen' Suchmodus. Informationen zur Syntax der von Emacs verwendeten regulären Ausdruck findet man hier. Jedes getippte Leerzeichen wird von Emacs automatisch in die Zeichenklasse für Whitespace verwandelt (\s-+), ein explizites Leerzeichen kann mit C-q SPC angegeben werden.
C-M-r Startet eine inkrementelle Suche in Vorwärtsrichtung, wobei der Suchbegriff als regulärer Ausdruck interpretiert wird.
C-M-s C-M-s Sucht nach dem zuletzt verwendeten regulären Ausdruck in Vorwärtsrichtung.
C-M-r C-M-r Sucht nach dem zuletzt verwendeten regulären Ausdruck in Rückwärtsrichtung.
C-M-s RET Startet eine nicht-inkrementelle Suche nach einem regulären Ausdruck in Vorwärtsrichtung.
C-r RET Startet eine nicht-inkrementelle Suche nach einem regulären Ausdruck in Rückwärtsrichtung.
C-w Dieses Kommando steht nur zur Verfügung, wenn man sich bereits in einem der obigen Suchmodi befindet. Bei der inkrementellen Suche wird damit das links vom Cursor stehende Wort in die Eingabezeile kopiert und kann durch ein erneutes Anwenden von C-s (bzw. C-r) als Suchbegriff verwendet werden. Bei der nicht-inkrementellen Suche wird damit nur nach `ganzen' Wörter gesucht (die Befehlsfolge für eine solche Suche ist dann etwa C-s RET C-w).

Ersetzen

Emacs kennt bedingtes und nicht-bedingtes Ersetzen. Beim bedingten Ersetzen wird für jedes Vorkommen der zu ersetzenden Zeichenkette nachgefragt, ob diese Vorkommen ersetzt oder übersprungen werden soll. Beim `bedingungslosen' Ersetzen hingegen werden alle Vorkommen ohne Rückfrage ersetzt.

Falls bei der Eingabe des Such- oder Ersetzungsbegriffs Zeichen verwendet werden sollen, die im Ersetzungsmodus eine spezielle Bedeutung haben (wie etwa RET), so kann man diese spezielle Bedeutung durch Voranstellen von C-q temporär abschalten. Beispiele: C-q RET gibt ein "Carriage Return" Zeichen wörtlich ein; C-q C-j gibt ein "Newline" Zeichen wörtlich ein.
M-% Führt eine bedingte Ersetzung durch. Falls eine Markierung aktiv ist, gilt der Vorgang für diese Markierung, ansonsten von der aktuellen Curserposition bis zum Dateiende. Falls sowohl die zu ersetzende Zeichenkette als auch der Ersetzungsbegriff kleingeschrieben werden, beachtet Emacs das Verhältnis von Groß- und Kleinschreibung im Ersetzungsvorgang (Bsp: M-% foo RET bar RET ersetzt `foo' durch `bar', `FOO' durch `BAR' und `Foo' durch `Bar').
Während des Ersetzens sind folgende Kommandos möglich:
  • SPC ersetzt den Begriff an der aktuellen Position und geht zum Vorkommen.
  • n ersetzt den Begriff an der aktuellen Position nicht und geht zum Vorkommen.
  • . ersetzt den Begriff an der aktuellen Position und beendet den Vorgang danach.
  • ! ersetzt alle folgenden Begriffe ohne Rückfrage
  • C-r gibt einem die Möglichkeit den Text an der aktuellen Position zu editieren. Mit C-M-c kehrt man zum Ersetzungsprozess zurück.
  • C-w wie C-r, allerdings wird die Markierung zuvor gelöscht.
  • e gibt einem die Möglichkeit den Ersetzungsbegriff zu editieren.
C-M-% Führt eine bedingte Ersetzung durch, wobei der zu ersetzende Begriff ein regulärer Ausdruck ist. Falls eine Markierung aktiv ist, gilt der Vorgang für diese Markierung, ansonsten von der aktuellen Curserposition bis zum Dateiende. Während des Ersetzens sind dieselben Kommandos wie beim bedingten Ersetzen ohne regulären Ausdruck (M-%) vorhanden.
M-x replace-string Ersetzt eine Zeichenkette durch eine andere ohne Rückfragen.
M-x replace-regexp Ersetzt eine Zeichenkette durch einen regulären Ausdruck ohne Rückfragen.

Programmierung

TAB Rückt die aktuelle Zeile ein.
C-j Geht in die nächste Zeile und rückt sie ein.
C-M-\ Rückt den markierten Bereich ein.
M-m Geht zum ersten Nicht-Whitespace Zeichen der Zeile.
M-^ Verschmilzt die aktuelle Zeile mit der vorhergehenden.
M-/ Sucht nach einer Vervollständigung für das aktuelle Wort.
M-x (un)tabify Verwandelt Tabulatorzeichen in Leerzeichen (bzw. umgekehrt).
C-u DIGIT C-x $ Blendet alle Zeilen aus, deren Einrücktiefe gröÂßer DIGIT ist. C-x $ blendet wieder alle Zeilen ein.

Modi

XML
C-c / Schließt das aktuell offene Element.
C-c C-v Validiert die Datei. Das Kommando, welches zum Validieren verwendet wird, kann z.B. so festgelegt werden: (setq sgml-validate-command '("validateXML %b"))
Folding
C-c @ C-o Zeigt den kompletten Puffer an.
C-c @ C-w Versteckt den kompletten Puffer.
C-c @ C-s Klappt den aktuellen Bereich auf.
C-c @ C-x Versteckt den aktuellen Bereich.
C-c @ C-f Erstellt einen neuen `Folding-Bereich' mit dem ausgewählten Text.