www.thomas-guettler.de / Vorträge
niemand.leermann@thomas-guettler.de
Emacs --- Ein Texteditor
   Deprecated
   Einleitung
   Die wichtigsten Befehle
3.    Hinweis
3.    Befehlsübersicht
   Startdatei: .emacs
   Startdatei .vimrc
   Sonstige Features
   Nachteile
   Emacs vs. Vi
   Links
10    Bücher
11    About

1 Deprecated [toc]

Von 1996 bis 2015 habe den Emacs fast täglich genutzt. Seit 2015 nutze ich für meine hauptsächliche Arbeit (Softwareentwicklung mit Python) nicht mehr Emacs, sondern PyCharm. Inzwischen nutze ich Emacs nicht mehr.

2 Einleitung [toc]

Emacs ist ein portabler, sehr mächtiger Texteditor. Er eignet sich zum Bearbeiten von jeglichen Textdateien: Programmquelltext, XML, HTML, Daten im ASCII Format, Latex ...

Emacs besteht aus einem Lisp-Interpreter und darauf aufbauenden Paketen. Erweiterungen von Emacs werden in Lisp geschrieben. Für die meisten Aufgaben gibt es schon fertige Pakete, so dass man selber nur gelegentlich in den Konfigurationsdateien Lisp-Code eingeben muss.

Wenn man den Emacs startet sieht man oben ein Menü, darunter das Editor-Fenster, darunter die Status-Zeile (Modeline) und ganz unten den Minibuffer:

[Bild: Oben Python-Mode, unten HTML-Mode]

3 Die wichtigsten Befehle [toc]

Im folgenden die Befehle, die man häufig benutzt. Am besten diesen Text im Emacs öffnen und die Befehle direkt ausprobieren!
    C-TASTE: Die Strg-Taste halten und gleichzeitig die
    entsprechende TASTE drücken. Beispiel: C-k --> Die Zeile wird von der
    Cursor Position bis zum Ende gelöscht.
  
    M-TASTE: Die Alt (Meta) Taste halten und dann die entsprechende
    TASTE drücken. Bei manchen Systemen ist das nicht möglich, dann kann
    man auch Esc drücken und anschließend die gewünschte Taste
    drücken. Beispiel: M-x pwd --> Eingabe des Befehls "pwd" im Command-Buffer.
  
    Viele dieser Tastenkombinationen funktionieren auch mit
    Programmen, die die Readline Bibliothek verwenden (z.B. Bash).

    Für Vi-Benutzer, die ggf. mit dem Emacs arbeiten, bzw. für Emacs-Benutzer,
    die mit dem Vi arbeiten müssen, ist in der rechten Spalte der
    äquivalente Befehl des Vi Editors. Eine 1:1 Abbildung zwischen beiden
    Editoren ist nicht möglich, da es beim Emacs nur einen Modus gibt.
    Die Beispiele beziehen sich auf den weit verbreiteten Vim.
Emacs Tastenkombination Befehl Vim Äquivalent
C-h t
Interaktives Tutorial vimtutor (Auf der Shell)
C-h ?
Aufrufen der Hilfe. :help
C-a
Gehe an den Anfang der Zeile.
^
C-e
Gehe an das Ende der Zeile.
$
C-x k
Schließt die aktuelle Datei. :q
C-x C-c
Beendet Emacs. :q
C-g
Bricht den aktuellen Befehl ab. Ähnlich wie C-c auf der Kommandozeile.
ESC
C-x C-f
Öffnet eine Datei.
:e
C-x i
Einfügen einer Datei an der aktuellen Cursor Position.
:rDateiname
C-x C-s
Speichere die aktuelle Datei.
:w bzw. :wNeueDatei
C-k
Lösche bis zum Ende der Zeile (Mehrere Zeilen kann man gleich hintereinander löschen).
D (lösche bis Zeilenende)
dd (lösche Zeile)
d/STRING (Lösche bis STRING)
C-y
Einfügen der zuletzt mit C-k gelöschten Zeilen.
p
M-y
Durchblättern des Kill-Rings. Dieses Feature gefällt mir besonders. Der Text wird mit C-k in den Kill-Ring verschoben. Mit C-y fügt man den zuletzt gelöschten Text ein. Nach C-y kann man mit M-y durch den Kill-Ring durchblättern und älteren Text einfügen. Einen Kill-Ring gibt es auch im vi. Mittels ESC "xNp mit N zwischen 0 bis 9, kann man auf die älteren ausgeschnittenen Bereiche zugreifen.
C-l
Gehe in die Mitte und zeichne den Bildschirm neu. Das ist nützlich, wenn die Anzeige gestört ist, weil z.B. ein anderes Programm auf die gleiche Konsole geschrieben hat.
C-l
C-s
I-search (Interaktive Suche): Während man die gesuchten Zeichen eingibt springt Emacs zu der Stelle, die man sucht.
/ (Nicht interaktiv. 
Weitersuchen mit "n" bzw "N")
C-r
Wie C-s, bloß es wird rückwärtsgesucht. Dieses Feature funktioniert auch in der Bash: So kann man schnell zu bestimmten Zeilen zurück blättern.
? (Nicht interaktiv)
C-x (
Definieren von Keyboard-Makros. Wird mit "C-x )" wieder geschlossen. Sehr nützlich in Verbindung mit
"M-x apply-macro-to-region-lines".
qa
Speichere folgende Eingaben als Makro "a". Mit "q" wird das Makro beendet.
C-x e
Führt das mit "C-x (" definierte Keyboard-Makro aus.
@a
Führe das Makro "a" aus.
M-x compile
Mit dieser Funktion kann man einen Shell-Befehl aufrufen, der z.B. ein Programm übersetzt. Kommt es zu einem Syntax-Fehler kann man direkt zu der Stelle im Quelltext springen, an der sich der Fehler befindet.
:make
Über "set makeprg=..." einstellbar.
C-x 2
Teilt das aktuelle Fenster in zwei Hälften. Sehr nützlich wenn man von einer Datei abschreibt, um eine zweite zu bearbeiten.
C-w s (:split)
C-x o
Wechselt zum anderen Fenster, falls die Anzeige in mehrere Teile aufgesplittet ist.
C-w PFEIL_HOCH | PFEIL_RUNTER
C-x C-b
Zeige alle offenen Puffer an
:ls
C-x 0
Zeigt, falls die Anzeige in mehrere Hälften geteilt ist, wieder ein einziges Fenster an.
C-w q (:close)
C-x b
Wechsel zu einer anderen offenen Datei.
 (:buffer dateiname.txt)
M-x toggle-read-only
Macht die Datei schreibgeschützt. :set readonly; set: ro
:set noro (Schreibschutz aufheben)
M-PFEIL_TASTE
So kann man wort- oder auch klammernweise Springen. Sinnvoll, wenn man z.B. in Lisp zur entsprechenden schließenden Klammer möchte. Zur entsprechenden anderen Klammer springen: %
M-x query-replace
Interaktives Ersetzen von Zeichenketten.
:,$s/alt/neu/gc
Der Doppelpunkt steht für den Anfang eines Befehls. Das Komma bedeutet "bis". Das Dollarzeichen heißt "Dateiende". Das "s" bedeutet "Substitute" (Ersetzen). Aufgrund des "g" werden alle passenden Stellen einer Zeile ersetzt (nicht nur die erste). Das "c" schaltet den interaktiven Modus ein.

Vim kennt verschiedene Syntaxformen von regulären Ausdrücken. Mit \v kann man die von Perl und Python gewohnte Syntax verwenden. Siehe auch vim magic.
Folgender Ausdruck passt z.B. auf die Ausgaben von "du -a"
,$s/\v^\d+\t(.*)$/\1/
M-<
Gehe zum Anfang der Datei.
1G oder gg
M->
Gehe zum Ende der Datei.
G
C-u ZAHL
Numerische Argument, der nächste Befehl wird entsprechend oft ausgeführt:
C-u 8 - ==> "--------"
ZAHL AKTION
ESC 8 i - ESC
C-SPACE
Markiere die aktuelle Cursor Position. ma (Speichere die Position als "a")
C-SPACE C-s foo PFEIL-LINKS C-w
Lösche von aktueller Position bis zum Wort "foo"
d/foo  oder emacsähnlich mit visual Block:
       v /foo[RETURN] d
       
C-SPACE C-r foo PFEIL-RECHTS C-w
Lösche von aktueller Position bis zum Wort "foo" (rückwärts).
d?foo
M-w
Kopiere die markierte Region in den Kill-Ring. Region mit C-SPACE vorher markieren. Die Region kann mit C-y wieder eingefügt werden. :'a,'by (Kopiere (y (yank)) von Markierung "a" bis Markierung "b". Einfügen mit "p")
C-w
Verschiebe die markierte Region in den Kill-Ring. :'a,'bd (Lösche von Markierung "a" bis Markierung "b". Einfügen mit "p")
C-x u
Undo (C-_ geht auch).
u
M-!
Führe Shell-Befehl aus.
:sh oder ESC !
M-q
Formatiere den aktuellen Absatz: Bricht Zeilen ab 78 Zeichen um. Funktioniert z.B. im Text- und HTML-Modus. Formatieren mit dem externen Befehl "fmt":
!}fmt
Oder "gqap"
M-g oder M-x goto-line
Gehe zu einer bestimmten Zeilennummer.
_ZAHL_G (z.B. 45G)
set-variable truncate-lines 1
set-variable truncate-lines nil
Lange Zeilen nicht umbrechen. Analog "-S" bei dem Pager "less".
:set nowrap
:set wrap
C-x=
M-x what-cursor-position
Zeige Informationen zu dem aktuellen Zeichen des Cursors (oktal, dezimal und hexadezimaler Wert):
ü (0374, 252, 0xfc) point=238 of 291(81%) column 0
ga
C-u 500 PFEIL-RECHTS
Gehe zu dem N-ten Zeichen in einer Datei. (Offset)
:goto 500
M-x whitespace-visual-mode (TAB ist gelb, SPACE türkis)
Unterschied zwischen TAB und SPACE darstellen.
:set list (^I == TAB)
C-u C-x TAB  --> C-u numeric Argument von 4 "C-x TAB" --> vier Leerzeichen nach rechts
C-u -4 C-x TAB --> vier Leerzeichen nach links einrücken.
Aktuellen Bereich 4 oder N Zeichen nach rechts/links verschieben.

4 Startdatei: .emacs [toc]

Mit einer .emacs Datei im Home-Verzeichnis kann man den Editor konfigurieren. Hier ein kleines Beispiel:
;;; .emacs Thomas Guettler <guettli@thomas-guettler.de>

;Syntax-Highlighting
(global-font-lock-mode t)

; shift-pageUp/pageDown scrolls other window
(global-set-key (quote [S-prior]) (quote scroll-other-window-down))
(global-set-key (quote [S-next]) (quote scroll-other-window))

; F6 stores a position in a file F7 brings you back to this position
(global-set-key [f6] '(lambda () (interactive) (point-to-register ?1)))
(global-set-key [f7] '(lambda () (interactive) (register-to-point ?1)))

;higlight the marked region (C-SPC) and use commands (like
; latex-environment) on current region.
(transient-mark-mode t)

; for frank who likes to use them like on windows:
(global-set-key [end] 'end-of-line)
(global-set-key [home] 'beginning-of-line)

(setq blink-cursor nil)             ; Keinen blinkenden Cursor
(setq column-number-mode t)         ; Aktuelle Spalte in Mode-Line anzeigen
(setq visible-bell t)               ; Bei Fehlern nicht Piepsen 
(setq tab-width 4)                  ; Ein TAB sind vier Leerzeichen
(setq-default indent-tabs-mode nil) ; Keine TABs einfügen, verwende Leerzeichen

5 Startdatei .vimrc [toc]

" .vimrc Thomas Guettler <guettli@thomas-guettler.de>

" We use vim
set nocompatible

" Color Syntax
syntax on

" Be silent
set visualbell

" isearch like in Emacs
set incsearch

" Highlight Search
set hlsearch

" Ignore case in search
set ignorecase

set tabstop=4

" ESC V (mark lines) > moves SHIFTWIDTH columns to the right
" use "." to repeat this.
set autoindent
set shiftwidth=1

" Show modeline at the bottom
" You see the current line und column number and the filename 
set ruler

" Show "INSERT" at the bottom if you are in Insert-Mode
set showmode

" Show matching (), [], {}
set showmatch

"Like readline (bash) or emacs:
"From: http://www.vim.org/htmldoc/tips.html#useful-mappings
map <C-A>  <Home>
map <C-E>  <End>
imap <C-A> <Home>
imap <C-E> <End>
map <C-D>  <Del>
imap <C-D>  <Del>
map <C-K> dd

" Indent according to filetype
:filetype plugin indent on

6 Sonstige Features [toc]

Features, die ich nicht verwende, da ich finde, dass man diese Dinge besser mit einem anderen Programm erledigt:

7 Nachteile [toc]

Aufgrund folgender Punkte würde ich zu einem anderen Editor wechseln, wenn ich einen besseren kennen würde:

8 Emacs vs. Vi [toc]

Beide Editoren haben ihre Stärken und Schwächen. Zum Programmieren bevorzuge ich Emacs, da das Arbeiten mit mehreren Dateien und ggf. mehrfach geteiltem Fenster für mich einfacher ist als im vi. Das liegt hauptsächlich daran, dass sich das Zehnfinger-Schreibsystem und die ESC-Taste, die beim Vi häufig benutzt wird, nicht harmonieren. Der häufige Wechsel zwischen den "normalen" Tasten und der ESC-Taste ist ähnlich umständlich wie das Wechseln zwischen Tastatur und Maus.

Beobachtet man einen vi-Benutzer, so stellt man fest, dass er sehr häufig auf die ESC-Taste klopft. Wenn ein Vi'ler nach einer Denkpause zu Schreiben beginnt, hat er jedes dritte bis fünfte Mal vergessen in welchen Modus er gerade ist und muss das zuviel eingegebene "i" (Wechseln zum Insert-Modus) erstmal löschen.

Will man jedoch Konfigurationsdateien auf entfernten Rechnern über eine langsame Leitung bearbeiten nehme ich lieber den vi.

Bei großen Dateien (mehrere MByte) werden beide Editoren langsam und ggf. unbenutzbar. Nach meiner Erfahrung ist der Emacs für große Dateien besser geeignet als Vim. Möchte man nur Bereiche einer großen Datei ausschneiden, kann man auch den Pager "less" verwenden. Siehe Tipps und Tricks

9 Links [toc]

10 Bücher [toc]

11 About [toc]




© 2002-2007 Thomas Güttler. Der Text darf nach belieben kopiert und modifiziert werden, solange dieser Hinweis zum Copyright und ein Links zu dem Original unter www.thomas-guettler.de erhalten bleibt. Es wäre nett, wenn Sie mir Verbesserungsvorschläge mitteilen: guettli@thomas-guettler.de