Zweiter Termin

Emacs-Workshop

1 2010-03-29    zweiter_tag

1.1 Grundfunktionen

1.1.1 Loeschen

C-d  Loescht das Zeichen nach dem Point (wie "Entfernen")
C-k  Loescht den Zeileninhalt ab dem Point

1.1.2 Undo

C-/    Drei Bindungen fuer dasselbe
C-_
C-x u

Die Kette der Undos wird durch andere Kommandos unterbrochen,
Cursor-Bewegung reicht dafuer aus. Danach werden die vorherigen Undos
selbst Teil der Geschichte, weitere Undos machen diese damit wieder
rueckgaengig.

1.1.3 Wiederholen

C-x z       wiederholt das letzte Kommando
C-x zzzzzz  danach kann man bliebig oft "z" druecken

1.1.4 Prefix-Argument

C-u C-k      Loescht vier Zeilen
C-u C-u C-k  Loescht 16 Zeilen
C-u 10 C-k   Loescht 10 Zeilen
M-1 M-0 C-k  alternative Schreibweise
C-1 C-0 C-k  noch eine alternative Schreibweise
             (funktioniert nicht in der Konsole)
C-u - 1 C-k  Loescht bis zum Anfang der letzten Zeile
M-- C-k      alternative Schreibweise
C-- C-k      alternative Schreibweise

1.1.5 Shell-Kommandos aufrufen

M-!      ausfuehren, Ausgabe in der Echo Area
C-u M-!  Ausgabe wird im Puffer eingefuegt

z.B. C-u M-! pwgen -s 12 1 N.B.: hier ist das Praefix-Argument nicht
numerisch, bzw. ist eine Zahl, wenn uebergeben, nicht ausschlaggebend.

M-|      schickt die region an stdin, Ausgabe in Echo Area
C-u M-|  schickt die Region durch ein Programm, die Ausgabe ersetzt die Region

z.B. C-u M-| sort RET. Evtl. muss das als “C-u ESC |” eingegeben
werden.

1.1.6 Wichtige Bewegungskommandos

C-a  zum Anfang der Zeile
C-e  zum Ende der Zeile
C-n  Zeile nach unten ("next")
C-p  Zeile nach oben ("previous")
C-f  Zeichen nach vorn ("forward")
C-b  Zeichen nach hinten ("backward")
M-f  ein Wort nach vorn
M-b  ein Wort zurueck
M-a  zum Anfang des Satzes 
M-e  zum Ende des Satzes

Die Logik zur Erkennung von Satzenden geht davon aus, dass nach einem
Satzzeichen zwei Leerzeichen stehen. Im Deutschen bewegt man sich eher
einen Absatz weiter.

M-d          loescht das folgende Wort
M-Backspace  loescht das vorherige Wort

Mehrere hintereinander geloeschte Worte werden zu einem Eintrag im
Kill-Ring zusammengefassst.

1.1.7 Gross- und Kleinschreibung

M-l  das naechste Wort klein schreiben und ueberspringen ("lower case")
M-u  das naechste Wort in Grossbuchstaben schreiben ("upper case")
M-c  das naechste Wort gross schreiben ("capitalize")

Mit Praefix-Argument auch fuer mehrere Worte.
Mit negativem Praefix-Argument fuer die vorhergehenden Worte.
Praktisch vor allem:

M-- M-c  Korrigiert das letzte Wort mit Grossschreibung
M-- M-l  Korrigiert das letzte Wort mit Kleinschreibung

1.2 Exkurs: Bash

Die bash sowie alle libreadline-basierten Programme haben
standardmaessig Emacs-Tastenbindungen. Die zuvor beschriebenen
Editier-Kommandos funktionieren hier genauso, es gibt ebenso einen
Kill-Ring und Praefix-Argumente. Zwei Tasten sind unterschiedlich:

C-w  loescht rueckwaerts bis zum naechsten Leerzeichen
     (M-Backspace verhaelt sich etwas anders)    
C-u  loescht rueckwaerts bis zum Anfang der Zeile

Praefix-Argumente koennen also nur mit Meta eingegeben werden.

1.3 Fortgeschrittenen Editorfunktionen

1.3.1 Register

C-x r s R    Region in Register "R" speichern
C-x r i R    Register "R" einfuegen
C-x r SPC R  Aktuelle Position in Register "R" speichern
C-x r j R    Zur im Register "R" gespeicherten Position springen
C-x r n R    eine Zahl im Register speichern ("number")
C-x r + R    die Zahl im Register "R" erhoehen (Praefix-Argument!)

1.3.2 Rechtecke

C-x r k    Rechteck loeschen ("kill")
C-x r o    Rechteck nach rechts schieben ("open")
C-x r y    Rechteck wieder einfuegen ("yank")
C-x r t    Rechteck durch Text ersetzen ("text")
C-x r r R  Rechteck in Register speichern ("rectangle register")

1.3.3 Makros

C-x (      Makro-Definition beginnen
C-x )      Makro-Definition beenden
C-x e      Makro ausfuehren ("execute")
C-x C-k e  Makro editieren
           C-h l: lossage, die letzten 100 Tastendruecke
M-x name-last-kbd-macro
           letztes Keyboard-Makro benennen
M-x insert-kbd-macro
           benanntes Keyboard-Makro in Buffer einfuegen

Mit Keyboard-Makros sind Register besonders sinnvoll. Das Makro-System
bringt aber auch einen eigenen Zaehler mit. Die zuletzt definierten
Makros werden ausserdem in einem Makro-Ring gespeichert.

C-x C-k C-n  naechstes Makro im Makro-Ring auswaehlen
C-x C-k C-p  vorheriges Makro im Makro-Ring auswaehlen
C-x C-k C-h  Hilfe zu mehr Makro-Funktionen

1.4 Major- und Minor-Modes

1.4.1 Major-Modes

Jeder Buffer hat genau einen Major-Mode.

  • Font Locking (AKA Syntax Highlighting)
  • intelligente Einrueckung
  • Syntax-Tabelle (beeinflusst regulaere Ausdruecke und Bewegungskommandos)
  • lokale Keymap (evtl. Befehle zur Codevervollstaendigung,
    Syntax-Check, Compilieren, schnellen Wechsel zwischen Header und
    Code etc.)

Major-Mode wird meist automatisch bestimmt, anhand von Extension oder
Inhalt, leicht bei Shell/Perl-Skripten zu sehen

M-x sh-mode
M-x normal-mode
M-x find-file-literally

TAB rueckt ein
C-q TAB fuegt ein TAB-Zeichen ein ("quote")
        genauso fuer ^M, ESC... 

1.4.2 Minor-Modes

  • tool-bar-mode
  • menu-bar-mode
  • scroll-bar-mode
  • show-paren-mode
  • recentf-mode
  • column-number-mode
  • mouse-wheel-mode
  • xterm-mouse-mode
  • global-linum-mode (ab Emacs 23)
  • ido-mode

Interaktiv umschalten mit z.B. M-x ido-mode

Code fuer die .emacs

(ido-mode)         ;; schaltet um
(ido-mode 1)       ;; schaltet ein
(tool-bar-mode -1) ;; schaltet aus

Codeschnipsel lassen sich ueberall ausprobieren, z.B. direkt in der
.emacs oder im *scratch*-Buffer.

C-x C-e      nach der letzten schliessenden Klammer ("evaluate")
C-u C-x C-e  ausfuehren und Ausgabe einfuegen
M-C-x        kompletten geklammerten Ausdruck ausfuehren
  • Lokale Minor-Modes

    Nicht alle Minor-Modes haben globale Auswirkungen, manche wirken nur
    in dem Buffer, in dem sie aktiviert wurden.

    • auto-fill-mode

      Der auto-fill-mode bricht beim schreiben von Fliesstext automatisch
      um. Die Variable “fill-column” bestimmt, ab wann umgebrochen
      wird. Wenn ihr sie in Elisp-Code auf einen anderen Wert setzen wollt,
      geht das etwa so:

      (setq fill-column 60)
      

      Uebrigens koennt ihr auch explizit umbrechen mit M-q

    • linum-mode

      Man kann in Emacs 23 die Zeilennummerierung auch nur fuer einen Buffer
      einschalten.