Emacs unter Windows


13.10.2013: Achtung, die Hinweise zur AucTeX Installation sind nicht mehr aktuell. Wenn ich mal mehr Zeit habe, wird diese Seite aktualisiert. In der Zwischenzeit empfehle ich, die komplette Installation von http://ctan.org/tex-archive/support/win32-emacs-auctex zu nutzen.

Emacs ist einer der vielseitigsten und mächtigsten Editoren, die es gibt. In diesem kleinen Artikel beschreibe ich die Installation und Anpassung von Emacs und AucTeX unter Windows sowie die anschließende Anpassung von Emacs selbst.

Emacs und AucTeX

Die Installation orientiert sich dabei sehr eng an der Anleitung von Uwe

Siart, die in der TeXnischen Komödie 4/2004 erschien und auch seiner

Homepage zum

Download bereitsteht. Daher an dieser Stelle nur ein kurzer Überblick:

  1. Eine aktuelle Emacs-Version von http://www.gnu.org/software/emacs/windows/Getting-Emacs.html herunterladen.
  2. AucTeX von http://www.gnu.org/software/auctex/

    herunterladen. AucTeX erweitert die LaTeX Funktionalität von Emacs beträchtlich.

  3. msys-1.0.10.exe von http://www.mingw.org/download.shtml

    herunterladen. Die Installation von AucTeX erfordert die Ausführung von

    Shellskripten und make, die auf einem herkömmlichen Windowssystem nicht

    verfügbar sind. Falls die MinGW tools oder Cygwin bereits installiert

    sind, sollte dieser Schritt überflüssig sein.

  4. Emacs in ein leeres Verzeichnis entpacken, vorzugsweise c:\emacs
  5. AucTeX in ein leeres Verzeichnis entpacken, dieses Verzeichnis wird nur

    für die Installation benötigt.

  6. Die MSYS (bzw. Cygwin) Shell aufrufen und in das AucTeX Verzeichnis wechseln.
  7. Wenn die Emacs.exe im Verzeichnis c:\emacs\bin

    liegt, folgenden Befehl so eingeben, andernfalls den Pfad angeben.

    ./configure –prefix=c:/emacs

  8. make aufrufen
  9. make install aufrufen
  10. Im Stammverzeichnis c:\ eine Datei .emacs

    anlegen und die folgenden Zeilen eintragen:
    (load „auctex.el“ nil t t)
    (load „preview-latex.el“ nil t t)
    (require ‚tex-mik)

  11. Die Installation des Emacs-AucTeX Gespanns ist damit abgeschlossen, die

    optimale Konfiguration für Emacs noch nicht.

Die ersten 9 Schritte kann man sich auch komplett sparen, wenn man sich von der AucTeX-Webseite eine AucTeX-Distribution herunterlädt, die nur ins Emacs-Verzeichnis zu entpacken ist. Voraussetzung für das korrekte Funktionieren ist aber hier, wenn der Emacs nicht verändert wurde.

Emacs Konfiguration

Emacs ist unter den Editoren eine eierlegende Wollmilchsau. Mit geeigneten Paketen läßt sich so ziemlich alles mit Emacs machen, Emails und netnews lesen, Tetris spielen, etc. Die Frage nach dem Sinn und Unsinn sollte sich jeder selbst beantworten. Ich selbst nutze Emacs für den Umgang mit LaTeX und hatte als Ziel nur die sinnvolle Erweiterung des Emacs mit LaTeX-spezifischen Funktionen. Wer darüberhinaus Ideen für die Emacs Anpassung sucht, findet sie beispielsweise auf http://www.dotemacs.de oder http://www.dotfiles.com.

Folgende Emacs Lisp-Dateien, zu finden sich auf http://centaur.maths.qmw.ac.uk/Emacs/, müssen zusätzlich heruntergeladen werden und beispielsweise in das Emacs/lisp/emacs-lisp Verzeichnis kopiert werden.

  1. w32-symlinks.el
  2. font-menus.el
  3. eol-conversion.el
  4. edit-history.el
  5. dired-sort-menu.el
  6. dired-explore.el
  7. htmlize.el
  (global-font-lock-mode t)
(require 'pc-mode)
(pc-bindings-mode)
(pc-selection-mode)(setq TeX-auto-save t)
(setq TeX-parse-self t)


(require 'eol-conversion)
(require 'font-menus)


; Jetzt die Hooks, um nach Verzeichnissen und dann nach Dateien zu sortieren
; http://centaur.maths.qmw.ac.uk/Emacs/
; Floating menu aufrufen mit Ctrl-d, im Immediate Menu
; w32-symlinks um Links zu folgen


(add-hook 'dired-load-hook
(lambda () (require 'w32-symlinks )))
;(add-hook 'dired-load-hook
;(lambda () (load-library "ls-lisp")))
;(add-hook 'dired-load-hook
;(lambda () (require 'dired-explore)))
;(add-hook 'dired-load-hook
;(lambda () (require 'dired-sort-menu)))
;(setq ls-lisp-dirs-first t)
;(setq ls-lisp-ignore-case t)

(defun my-dired-changes ()
"Set my preferences for dired"
(require 'ls-lisp)
(require 'htmlize)
; konvertiert Quellcode nach HTML
; M-x htmlize-buffer
; M-x htmlize-file

(require 'dired-explore)
(require 'dired-sort-menu)
(setq ls-lisp-dirs-first t)
(setq ls-lisp-ignore-case t))
(add-hook 'dired-load-hook 'my-dired-changes)
;(require 'mc)


; automatischer Umbruch nach 90 Zeichen

(add-hook 'text-mode-hook 'turn-on-auto-fill)
(setq-default fill-column 90)


(load "edit-history" )
(setq ehistory-history-length 5)

; which files to ignore
(setq ehistory-ignore-regexp "/\\(browse\\|diary\\|site-diary\\|tags\\| \\
.*rmail.*\\|.*\.tmp\\|.*a[d]*ress.*\\|.*-scores\\|.*\.bbdb\\)$"
)
(ehistory-load-file-list)

;; ;; One vision of a better picture mode.
(add-hook 'picture-mode-hook 'rm-example-picture-mode-bindings)
(autoload 'rm-example-picture-mode-bindings "rect-mark" "Example rect-mark key and mouse bindings \\
for picture mode."
)

;; Buffer wechseln wie click auf modeline, aber mit
;; tasten...

(defun ska-previous-buffer ()
"Hmm, to be frank, this is just the same as bury-buffer. \\
Used to wander through the buffer stack with the keyboard."

(interactive)
(bury-buffer))

(defun ska-next-buffer ()
"Cycle to the next buffer with keyboard."
(interactive)
(let* ((bufs (buffer-list))
(entry (1- (length bufs)))
val)
(while (not (setq val (nth entry bufs)
val (and (/= (aref (buffer-name val) 0)
? )
val)))
(setq entry (1- entry)))
(switch-to-buffer val)))

;; Buffer cycling like on modeline
(define-key global-map [(C M shift right)]
'ska-next-buffer)
(define-key global-map [(C M shift left)]
'ska-previous-buffer)

;(autoload 'tetris "tetris" "Fun with Emacs :)" t)

(setq ispell-program-name "aspell")

; Display settings
; default size and color options for all frames

(setq default-frame-alist
'(
; frame width and height
(width . 100)
(height . 40)
; foreground, background, and cursor colors
(foreground-color . "grey8")
(background-color . "grey92")
(cursor-color . "red3")
) )

;(set-frame-height (selected-frame) 40)
;(set-frame-width (selected-frame) 80) ;; Fenster rückwärts springen

(defun other-window-backward (n)
"Select Nth previous window."
(interactive "p")
(other-window (- n)))

(global-set-key [(C shift down)] 'other-window)
(global-set-key [(C shift up)] 'other-window-backward)


; (cd (getenv "emacsstart"))

(setq ispell-enable-tex-parser t)

(global-set-key [f4] 'kill-buffer-and-window)
(global-set-key [M-f4] 'kill-this-buffer)


;write y instead of yes
(fset 'yes-or-no-p 'y-or-n-p)

;;;;;;;;;;;;;;;;;;;
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(cua-mode t nil (cua-base)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.

)

(require 'tex-mik)
(require 'tempo)
(setq transient-mark-mode t)
; `tempo-define-template' returns an interactive function, which is then
; bound to the appropriate key. The `r' simply stands for `region'. There
; are many more possibilities here.

(add-hook 'LaTeX-mode-hook
'(lambda ()
(local-set-key
"{" (tempo-define-template "TeX-schweif" '("{" r "}")))
(local-set-key
"(" (tempo-define-template "TeX-rundekl" '("(" r ")")))
(local-set-key
"[" (tempo-define-template "TeX-eckigek" '("[" r "]")))
(local-set-key
"^" (tempo-define-template "TeX-exponen" '("^{" r "}")))
(local-set-key
"_" (tempo-define-template "TeX-subscri" '("_{" r "}")))
(local-set-key
"$" (tempo-define-template "TeX-dollarm" '("$" r "$")))))

; PSGML
;(add-to-list 'load-path "C:/Programme/emacs-21.3/site-lisp/psgml-1.2.5/")
;(autoload 'sgml-mode "psgml" "Major mode for SGML files" t)
;(autoload 'xml-mode "psgml" "Major mode for SGML files" t)


(add-hook 'LaTeX-mode-hook 'turn-on-auto-fill)
(setq reftex-plug-into-AUCTeX t)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode
(add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode

Emacs+AucTeX Bedienung

Standardtastenkombinationen

Dateiverwaltung
C-x C-f Datei öffnen
C-x C-s Datei speichern
C-x s alle Dateien speichern
C-x C-k Datei schließen (kill buffer)
C-q aktuellen Befehl stoppen
C-x u undo
   
Bewegung im Text
C-v eine Seite vorwärts
Alt-v eine Seite rückwärts
C-p ein Zeichen hoch
C-n ein Zeichen tiefer
C-b ein Zeichen zurück
C-f ein Zeichen vorwärts
Alt-f ein Wort weiter
Alt-b ein Wort zurück
C-a zum Zeilenanfang
C-e zum Zeilenende
Alt-a zum Satzanfang
Alt-e zum Satzende
Alt-< zum Bufferanfang
Alt-> zum Bufferende
   
Kopieren, Einfügen und Ausschneiden
   
C-<space> Marker setzen
C-u zum nächsten Marker springen
C-d lösche Zeichen unter Cursor
Alt- lösche bis zum nächsten Wortanfang
Alt- lösche bis zum nächsten Wortende
C-k lösche bis zum Zeilenende
Alt-k lösche bis zum Satzende
C-x k lösche Buffer (schließe die Datei)
C-w ausschneiden
Alt-w kopieren
C-y einfügen
   
Bewegung zwischen den Buffers
C-x 1 auf Einfensterbetrieb umschalten
C-x 2 teile Fenster horizontal
C-x 5 teile Fenster vertikal
C-x o in anderes Fenster wechseln
C-x b wähle anderen Buffer
   
Suchen und Ersetzen
C-s inkrementelle Suche
Esc beende Suchmodus
C-r suche rückwärts
Alt-x % suchen & ersetzen mit Nachfragen
Alt-x replace-string einfaches suchen & ersetzen
   
C-Alt-s RegExp Suche
C-Alt-r RegExp Suche rückwärts
   
Hilfesystem
C-h Hilfesystem
C-h t Tutorial
   

 

Reguläre Ausdrücke
. jedes Zeichen außer \n
* 0 oder mehr Wiederholungen
+ 1 oder mehr Wiederholungen
? 0 oder 1 Wiederholung
\| oder
\( ... \) Gruppierung
^, $ Zeilenanfang, ende
\< \> Wort
\` \´ Buffer
[ ... ] Zeichenmenge
[^ ... ] Negation der Zeichenmenge
   

 

AucTeX und LaTeX Shortcuts
C-c C-m (oder C-c Ret) LaTeX Macro einfügen
C-c-s Gliederungsebene einfügen
C-c-t-p Umschaltung LaTeX/pdfLaTex
C-c-t-i Umschaltung Interaktiver Modus
C-c-e Umgebung einfügen
C-c-] akt. Umgebung schließen
C-c-f-b fettgedruckten Text einfügen
C-c-f-i kursiven Text einfügen
C-c-f-e hervorgehobenen Text einfügen
C-c-f-s geneigten Text einfügen
C-c { geschw. Klammer einfügen
   
   

durch unsere Extrapakete definierte Tastenkombinationen

w32-symlinks.el
font-menus.el
eol-conversion.el
edit-history.el
dired-sort-menu.el
dired-explore.el
htmlize.el
M-x htmlize-buffer
aktuellen Buffer umwandeln
M-x htmlize-file
Datei umwandeln
M-x htmlize-many-files
mehrere Dateien umwandeln
M-x htmlize-many-files-dired
mehrere Dateien im dired Modus umwandeln

 

AucTeX und RefTeX Shortcuts

Literatur