Skip navigation

Linux User Group Oldenburg [Tux]

Emacs als Entwicklungsumgebung

Der Emacs ist wohl in jeder GNU/Linux-Distribution enthalten und meist vorkonfiguriert. Neben dem eigentlichen Editor enthält das Paket eine Reihe von Erweiterungen (in Emacs-LISP geschrieben), mit deren Hilfe sich Emacs hervorragend als Entwicklungsumgebung für die C/C++ Programmierung eignet.

Im folgenden sind die wohl wichtigsten Tastaturbefehle und Arbeitsweisen zusammengefaßt, die man für diesen Verwendungszweck braucht.

M-x steht dabei für ALT-x bzw. für ESC-x, C-x für Control-x

Definitionen und Vorbereitung

Ein Puffer ist ein Speicherbereich von Emacs, der Dateiinhalte, Ausgaben etc. aufnimmt. Jeder Puffer hat einen Namen, der Name eines Dateipuffers ist gleich dem Dateinamen. Es können zwei Puffer gleichzeitig angezeigt werden. Besäße der Emacs eine GUI Oberfläche, würde man wohl von einem Fenster sprechen.

Der Ringpuffer nimmt als Minipuffer beim Löschen von Blöcken diese auf und kopiert den Inhalt auf Wunsch. Der Start des Compilers unter Emacs setzt eine Makefile vorraus, da der Compiler über make -k gestartet wird. Eine minimale Makefile für die Datei demo.cpp ist

demo:
(TAB)c++ -Wall -o a.out demo.cpp

wobei (TAB) für ein Tabulatorzeichen steht. Mit einem kleinen bash-Skript lassen sich Mini-Makefiles auch automatisch erzeugen:

Datei cppemacs (mit chmod ausführbar setzen)


cflags="-Wall"
echo $1:> Makefile
echo -e "\tc++ $cflags -o a.out $1.cpp">> Makefile
emacs $1.cpp

Aufruf mit cppemacs Sourcedatei OHNE die Extension .cpp


Allgemeine Befehle

Emacs beenden                                   C-x C-c

Aktuellen Puffer speichern                      C-x C-s
Datei in neuen Puffer laden                     C-x C-f
Datei in aktuellen Puffer einfügen              C-x i

Zeilenanfang                                    C-a
Zeilenende                                      C-e


Puffer

Puffer löschen                                  C-x k

Zum anderen angezeigten Puffer wechseln         C-x o
Aktueller Puffer auf volle Größe                C-x 1

Namen aller Puffer anzeigen                     C-x C-b
Zum Puffer name wechseln                        C-x b name


Blockbefehle

Blockanfang                                     C-LEERTASTE
Blockende                                       Cursorposition

Block in Ringpuffer löschen                     C-w
Block in Ringpuffer kopieren                    M-w
Block aus Ringpuffer an Cursorpos. einfügen     C-y


Der c-mode und c++-mode

Diese Modi führen während der Eingabe des Quellcodes bereits einen einfachen Syntaxcheck durch. Klammerebenen werden überwacht und die zu einer schließenden Klammer gehörende offene Klammer angezeigt und Klammerverwechselungen bemerkt. Logische Blöcke werden erkannt und Zeilen mit der TAB Taste automatisch eingerückt. Dabei werden {} Blöcke, if, while, for, switch, case etc erkannt.

Laden des c-  Modus                             M-x c-mode
Laden des c++-Modus                             M-x c++-mode
Zeile unter Cursor einrücken                    TAB-Taste

Compilieren unter Emacs

Den als Vorgabe erscheinenden Befehl make -k kann man mit der Eingabetaste bestätigen (siehe oben). Die Aus- gaben des Compilers werden in einen eigenen Puffer ge- schrieben.
Compilerlauf starten                            M-x compile

In den Compile- Puffer wechseln                 C-x o
Cursor auf eine Fehlermeldung plazieren         Pfeiltasten
Sourcezeile zur Fehlermeldung anzeigen          C-c C-c
Nächste Fehlermeldung                           M-n
Vorhergehende Fehlermeldung                     M-p
Im Sourcepuffer: Nächster Fehler                C-x `
        (Shift-"Taste-neben-Backspace"!)

GNU Debugger unter Emacs

Damit der GNU-Debugger richtig arbeitet, muß das Programm mit den Optionen -g -O0 ("Oh null") übersetzt werden.

Für den gdb wird ein eigener Puffer geöffnet, in dem die gdb- Kommandos benutzt werden können.

GNU Debugger und Programm a.out starten         M-x gdb a.out
Breakpoint an einer Stelle im Source setzen     C-x LEERTASTE
Breakpoint löschen                              C-x C-a C-d