Vortrag im Rahmen der Grazer Linux Tage 2003
Stefan Thalauer <emacs@thalauer.net>
Emacs Grundlagen, Dateien editieren, Such- und Ersetzoperationen, Buffer und Fenster, Emacs als Arbeitsumgebung, Emails und Usenet News (Gnus), Texte erstellen (HTML/XML, LaTeX), Macros schreiben, Konfiguration des Emacs, Emacs für Programmierer (C und C++, Java).
Um die Präsentation zu starten bitte F11 drücken. (Für Benutzer des Internetbrowsers Opera)
Weitere Informationen zu den Grazer Linux Tagen sind unter http://www.linuxtage.at zu finden.
Diese Einführung bezieht sich auf den GNU Emacs (Version 21.x)
"Emacs is the extensible, customizable, self-documenting real-time display editor."
Eine erste Version wurde 1975 von Richard Stallman geschrieben
Emacs steht für:
| Modifier | Taste | |
|---|---|---|
| CONTROL | C | STRG |
| META | M | ALT (ESC) |
| SHIFT | S | Umschalt |
| (none> | DEL | BACKSPACE. |
ESC x ist gleichbedeutend zu M-x.
Um den Emacs zu starten:
thalze@glt03:~> emacs
Beim Starten kann die zu editierende Datei angegeben werden:
thalze@glt03:~> emacs <file>
Um den Emacs ohne X-Unterstützung zu starten:
thalze@glt03:~> emacs -nw
| Mode | Funktion |
|---|---|
| Fundamental Mode | Default Mode; keine spezielle Funktionalität |
| Text Mode | Um Texte zu schreiben. |
| Message Mode | Um Mails und Usenetbeiträge zu schreiben . |
| HTML Mode | Um HTML Dokumente zu schreiben. |
| XML Mode | Um XML Dokumente zu schreiben. |
| LaTeX Mode | Um LaTeX Dokumente zu schreiben. |
| C mode | Um C Programme zu schreiben. |
| C++ mode | Um C++ Programme zu schreiben. |
| Mode | Funktion |
|---|---|
| Auto-fill mode | Automatischer Umbruch |
| Overwrite mode | Überschreiben |
| Auto-save mode | Automatisches Speichern in bestimmten Intervallen. |
| Line number mode | Anzeige der aktuellen Zeilennummer |
| Transient mark Mode | Highlighting von Regionen |
| Abbrev mode | Um Abkürzungen zu verwenden. |
| Flyspell mode | Automatische Rechtschreibprüfung |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-x C-f | find-file | Datei in einem Buffer laden. |
| C-x C-v | find-alternative-file | Alternative Datei in Buffer laden. |
| C-x C-i | insert-file | Datei in Buffer einfügen. |
| C-x C-s | save-buffer | Datei speichern. |
| C-x C-w | write-file | Buffer unter anderem Namen speichern. |
| C-x C-c | save-buffers-kill-emacs | Emacs beenden. |
Es gibt verschiedenste Möglichkeiten in Dateien zu navigieren.
Navigation am besten im Tutorial (C-h t) üben!
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-f | forward-char | Gehe ein Zeichen weiter (rechts). |
| C-b | backward-char | Gehe ein Zeichen zurück (links). |
| C-p | previous-line | Gehe in vorige Zeile (hinauf). |
| C-n | next-line | Gehe in nächste Zeile (hinunter). |
| M-f | forward-word | Gehe ein Wort weiter. |
| M-b | backward-word | Gehe ein Wort zurück. |
| C-a | beginning-of-line | Gehe zum Anfang dieser Zeile. |
| C-e | end-of-line | Gehe zum Ende dieser Zeile. |
| M-e | forward-sentence | Gehe einen Satz zurück. |
| M-a | backward-sentence | Gehe einen Satz weiter. |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| M-} | forward-paragraph | Gehe einen Paragraphen weiter. |
| M-{ | backward-paragraph | Gehe einen Paragraphen zurück. |
| C-v | scroll-up | Gehe eine Bildschirmseite weiter. |
| M-v | scroll-down | Gehe eine Bildschirmseite zurück. |
| M-< | beginning-of-buffer | Gehe zum Anfang der Datei. |
| M-> | end-of-buffer | Gehe zum Ende der Datei. |
| (none) | goto-line | Gehe zu Zeile n. |
| C-l | recenter | Aktuelle Zeile in die Mitte. |
| M-n | digit-agrument | Wiederhole den nächsten Befehl n-mal |
| C-u n | universal-argument | Wiederhole den nächsten Befehl n-mal (4-mal wenn kein n angegeben). |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-d | delete-char | Lösche Zeichen unter dem Cursor. |
| DEL (Backspace) | delete-backward-char | Lösche voriges Zeichen. |
| M-d | kill-word | Lösche nächstes Wort. |
| M-DEL | backward-kill-wort | Lösche voriges Wort. |
| C-k | kill-line | Lösche Zeile ab Cursor |
| M-k | kill-sentence | Lösche nächsten Satz. |
| C-x DEL | end-of-buffer | Lösche vorigen Satz.. |
| C-y | yank | Füge das letzte Gelöschte ein. |
| C-w | kill-region | Lösche markierten Text. |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| M-q | fill-paragraph | Paragraph neu formatieren. |
| (none) | fill-region | Region neu formatieren. |
| C-x h | mark-whole-buffer | Ganze Datei markieren. |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-x r s | copy-to-register | Kopiert Region in Register. |
| C-x r i | insert-register | Fügt den Inhalt des Registers ein. |
| C-x r SPACE | point-to-register | Speichert aktuelle Position in Register. |
| C-x r j | jump-to-register | Gehe zu im Register gespeicherter Position. |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-t | transpose-chars | Vertauscht zwei Zeichen. |
| M-t | transpose-words | Vertauscht zwei Wörter. |
| C-x C-t | transpose-lines | Vertauscht zwei Zeilen. |
| (none) | transpose-sentences | Vertauscht zwei Sätze. |
| (none) | transpose-paragraphs | Vertauscht zwei Paragraphen. |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| M-c | capitalize-word | Erster Buchstabe großgeschrieben. |
| M-u | upcase-word | Großgeschriebenes Wort. |
| M-l | downcase-word | Kleingeschriebenes Wort. |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-s | isearch-forward | Inkrementelle Vorwärtssuche |
| C-r | isearch-backward | Inkrementelle Rückwärtssuche. |
| RETURN | (none) | Suche beenden. |
| C-g | keyboard-quit | Suche abbrechen. |
| DEL | (none) | Lösche Zeichen des Suchwortes. |
| C-s C-w | (none) | Suche mit dem Wort unter dem Cursor. |
| C-s C-y | (none) | Suche mit Text von Cursor Position bis zum Ende der Zeile. |
| C-s M-y | (none) | Suche mit Text aus dem "kill ring". |
| C-s C-s | (none) | Letzte Suche wiederholen. |
| Tastendrücke | Wirkung |
|---|---|
| C-s RETURN searchstring RETURN |
Simple Suche Vorwärts |
| C-r RETURN searchstring RETURN |
Simple Suche Rückwärts |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-s RETURN C-w | word-search-forward | Wort Suche Vorwärts |
| C-r RETURN C-w | word-search-backward | Wort Suche Rückwärts |
| Tastendrücke | Wirkung |
|---|---|
| M-% | Start query replace |
| SPACE oder y | Ersetzen und weitergehen. |
| DEL oder n | Nicht ersetzen und weitergehen. |
| . | Ersetzen und beenden. |
| , | Ersetzen und nicht weitergehen. |
| ! | Weiteres ersetzen ohne Nachfragen. |
| RETURN oder q | Query-replace beenden. |
| ? | Hilfe. |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-x ESC ESC | repeat-complex-command | Komplexe Operation wiederholen |
Komplexe Operationen wiederholen funktioniert nicht nur bei Query-replace!
| Tastendrücke | Wirkung |
|---|---|
| C-r | Rekursives Editieren beginnen. |
| C-w | Wort löschen und rekursives Editieren beginnen. |
| M-C-c | Rekursives Editieren beenden und weiter "query-replace". |
| C-] | Rekursives Editieren und "query-replace" beenden. |
(setq-default case-fold-search nil) ;; *Non-nil if searches and matches should ignore case. (setq-default case-replace nil) ;; *Non-nil means `query-replace' should ;; preserve case in replacements.
Manchmal normale Suche nicht ausreichend.
Dann Suche mit Regulären Ausdrücken.
| Zeichen | Übereinstimmung |
|---|---|
| ^ | Anfang einer Zeile. |
| $ | Ende einer Zeile |
| . | Ein einzelnes Zeichen (wie ?) |
| .* | Null oder mehr Zeichen (wie * , Wildcard) |
| \< | Beginn eines Wortes |
| \> | Ende eines Wortes |
| [] | Zeichen zwischen den Klammern. (z.B.: [a-z] ) |
| \ | Escape-Character (z.B.: \. für Punkt) |
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| M-C-s RETURN | re-search-forward | Suche vorwärts nach Regulärem Ausdruck. |
| M-C-r RETURN | re-search-backward | Suche rückwärts nach Regulärem Ausdruck. |
| M-C-s | isearch-forward-regexp | Suche inkrementell rückwärts nach Regulärem Ausdruck. |
| M-C-r | isearch-backward-regexp | Suche inkrementell rückwärts nach Regulärem Ausdruck. |
| (none) | query-replace-regexp | Suche ersetze einen Regulären Ausdruck. |
Es ist möglich zu prüfen:
Um einen Buffer zu überprüfen: M-x ispell-buffer RETURN
Wenn alle Worte korrekt: Spell-checking done
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| M-$ | ispell-word | Das Wort unter dem Cursor überprüfen. |
| (none) | ispell-region | Alle Wörter der Region überprüfen. |
| (none) | ispell-buffer | Alle Wörter im Buffer überprüfen. |
| C-u M-$ | ispell-continue | Ispell fortsetzen. |
| M-TAB | ispell-complete-word | Im Text mode: mögliche Vervollständigungen des aktuellen Wortes zeigen. |
(setq ispell-dictionary "english")
Um den Flyspell Mode allgemein für einen Mode zu Aktivieren:
(z.B.: LateX Mode)
(add-hook 'LaTeX-mode-hook 'flyspell-mode)
(setq-default abbrev-mode t) (read-abbrev-file "~/.abbrev_defs") (setq save-abbrevs t) (setq flyspell-abbrev-p nil)
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| (none) | abbrev-mode | Word abbreviation mode starten (beenden). |
| C-x a - oder C-x a i g |
inverse-add-global-abbrev | Nach Abbreviation globale Definition. |
| C-x a g | add-global-abbrev | Nach Wort globale Abbreviation. |
| C-x a i l | inverse-add-local-abbrev | Nach Abbreviation lokale Definition. |
| C-x a l | add-mode-abbrev | Nach Wort lokale Abbreviation. |
| (none) | unexpand-abbrev | Letze abbreviation rückgängig machen. |
| (none) | write-abbrev-file | Abbreviations speichern. |
| (none) | edit-abbrevs | Abbreviations bearbeiten. |
| (none) | list-abbrevs | Abbreviations anzeigen. |
| (none) | kill-all-abbrevs | Abbreviations löschen. |
Ein Buffer wird in einem Fenster dargestellt
Dies ist die Emacs Definition eines Fensters! GUI Fenster (X, MS Windows) werden hier als Frames bezeichnet!
Um zwischen Buffern hin- und herzuschalten: C-x b gefolgt vom Buffer Name.
| C-x b gefolgt von | Wirkung |
|---|---|
| Neuer Buffer Name | Neuer Buffer wird erzeugt. |
| Name eines existierenden Buffer | Buffer wird aktiv. |
Mit C-x k (kill-buffer) kann ein Buffer gelöscht werden.
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-x 2 | split-window-vertically | Teile aktuelles Fenster in zwei übereinander liegende. |
| C-x 3 | split-window-horizontally | Teile aktuelles Fenster in zwei nebeneinander liegende. |
| C-x o | other-window | Gehe zum anderen Fenster. |
| C-x 0 | delete-window | Lösche das Aktuelle Fenster. |
| C-x 1 | delete-other-window | Lösche alle anderen Fenster. |
| C-x 4 f | find-file-other-window | Öffne Datei in anderem Fenster. |
| C-x 4 b | switch-to-buffer-other-window | Wechsle zu Buffer in anderem Fenster. |
Um die Liste aller Buffer zu erhalten: C-x C-b
| Tastendrücke | Wirkung | Passiert |
|---|---|---|
| C-n | Gehe zum nächsten Buffer (eine Zeile hinunter). | Sofort |
| SPACE | Gehe zum nächsten Buffer. | Sofort |
| C-p | Gehe zum vorhergehendem Buffer (eine Zeile hinauf) | Sofort |
| d | Markiere Buffer als gelöscht. | Nachdem x gedrückt wurde |
| s | Markiere Buffer als gespeichert. | Nachdem x gedrückt wurde |
| u | Hebe Markierung auf. | Sofort |
| x | Führe Befehle (d,s,x) aus. | Sofort |
| 1 | Zeige Buffer in einem Fenster an. | Sofort |
| 2 | Zeige Buffer im nächsten Fenster an. | Sofort |
Mit Bookmarks ist es möglich sich Positionen in verschiedenen Dateien zu merken
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-x r m | bookmark-set | Setzt ein Lesezeichen an der aktuellen Position. |
| C-x r b | bookmark-jump | Springt zu einem Lesezeichen. |
| (none) | bookmark-rename | Umbenennt ein Lesezeichen. |
| (none) | bookmark-delete | Löscht ein Lesezeichen. |
| (none) | bookmark-save | Speichert die Lesezeichen in die Default Datei. |
| C-x r l | bookmark-menu-list | Öffnet den *Bookmark List* buffer. |
Es können Shell-Befehle (z.B: grep ) auf eine Datei angewandt werden: !
| Tastendrücke | Wirkung |
|---|---|
| v | Datei ansehen (schreibgeschützt). |
| RETURN | Öffne Datei zum Editieren |
| Tastendrücke | Wirkung | Passiert |
|---|---|---|
| d | Markiere Datei als gelöscht. | Nachdem x gedrückt wurde |
| D | Lösche Datei | Nach Dialog |
| u | Hebe Markierung auf. | Sofort |
| x | Führe Befehle (d) aus. | Sofort |
| C | Kopiere Datei. | Nach Dialog |
| R | Datei umbennen. | Nach Dialog |
Um das Fensterverhalten zu verändern:
(setq Man-notify-method 'pushy)
Um Mails und News zu lesen und zu schreiben:
M-x gnus
Eine Vorstellung des Gnus gibt es vielleicht bei den nächsten Grazer Linux Tagen :-) oder durch:
C-h i RETURN Gnus RETURN
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-x r k | kill-rectangle | Löscht Rechteck und speichert es. |
| C-x r d | delete-rectangle | Löscht Rechteck und speichert es nicht. |
| C-x r y | yank-rectangle | Fügt das letzt gelöschte Rechteck wieder ein. |
| C-x r c | clear-rectangle | Überschreibt Rechteck mit Leerzeichen und speichert es nicht. |
| C-x r t | string-rectangle | Fügt Zeichen in jeder Zeile des Rechteckes ein. |
| C-x r o | open-rectangle | Fügt ein leeres Rechteck ein. |
Keyboard Macros sind aufgezeichnete Befehlsabfogen.
Können wiederholt ausgeführt werden.
C-x ( C-e C-f RETURN C-f C-x )
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-x ( | start-kbd-macro | Startet Macro Aufzeichnung |
| C-x ) | end-kbd-macro | Beendet Macro Aufzeichnung |
| C-x e | call-last-kbd-macro | Führt letztes Macro aus |
| M-n C-x e | digit-argument and call last-kbd-macro | Führt letztes Macro n-mal aus |
| (none) | name-last-kbd-macro | Gibt dem letztem Macro einen Namen |
| (none) | insert-kbd-macro | Fügt Macro in eine Datei ein |
| (none) | load-file | Lädt eine Datei mit Funktionsdfinitionen |
| C-x C-k | edit-kbd-macro | Editieren eines Macros |
(global-set-key "\C-xl" 'goto-line)
(add-hook 'c-mode-hook
(lambda ()
(local-set-key "\C-cc" 'compile))
(setq auto-save-interval 800)
| Tastendrücke | Befehl | Wirkung |
|---|---|---|
| C-h ? | help-for-help | verfügbare Hilfe-Optionen |
| C-h t | help-with-tutorial | Emacs Tutorial |
| C-h i | info | Startet Info-System |
| C-h c | describe-key-briefly | Kurzbeschreibung des Tastenkürzels |
| C-h k | describe-key | Welcher Befehl ist auf diesem Tastenkürzel |
| C-h w | where-is | Welches Tastenkürzel für diesen Befehl |
| C-h m | describe-mode | Informationen über den aktuellen Mode |
| C-h b | describe-bindings | Wie sind die Tastenkürzel für diesen Mode? |
Um die Präsentation zu beenden bitte F11 drücken.