Editoren

Ein System wäre nicht brauchbar, wenn es nicht möglich wäre, Dateien zu bearbeiten. Neben besonderen Werkzeugen zur Manipulation von Textdaten wie z.B. awk, sed, perl, ed, tr etc. bieten Editoren die Möglichkeit gesamte Dateien interaktiv zu bearbeiten.

Ähnlich wie bei DOS, wo es einen Standardeditor (nämlich edit) und eine Vielzahl komfortablerer Editoren gibt, sieht die Situation auch unter Linux aus. Auf fast jedem Unix-System existiert ein vi (gesprochen: "Wie Ei", Abkürzung für Visual Editor). Wem dieser Editor nicht zusagt - und das wird gerade bei Einsteigern der Fall sein - der kann sich aus einer Vielzahl von verfügbaren Editoren (siehe Tabelle) einen passende aussuchen.

Die meisten Linux-Distributionen bieten während der Installation eine Vielzahl von Editoren an. Sollten Sie sich mit all diesen nicht so recht anfreunden können, dann haben Sie immer noch die Möglichkeit einen passenden aus einem Software-Archiv im Internet zu holen.

Der wichtigste FTP-Server für Linux-Software ist SunSITE.unc.edu (an der University of North Carolina), der weltweit auf vielen Servern gespiegelt wird (z.B. ftp.gwdg.de). Dort sind im Verzeichnis /pub/Linux/apps/editors verschiedene Editoren archiviert. Hier ist für jeden Geschmack etwas dabei.

Welche Funktionen bieten Editoren

An dieser Stelle werden wir nicht jeden Editor einzeln vorstellen, sondern die Grundfunktionen beschreiben und die wichtigsten Vertreter genauer untersuchen. Dabei wird dem vi als Standard-Editor für Unix besondere Aufmerksamkeit gewidmet.

Die verschiedenen Editoren bieten eine Vielzahl von Möglichkeiten sowie unterschiedliche Arten der Steuerung. So hat der vi z.B. drei Modi, in denen man Eingaben vornehmen kann, der Emacs zwei und die meisten anderen Editoren nur einen.

Maussteuerung
Editoren, die unter X11 laufen, können natürlich mit der Maus gesteuert werden. Auf der Textkonsole sieht das ganze jedoch schon schwieriger aus. Hier wird die Maus nicht wie ein eigenes Eingabegerät betrachtet. Um dort ebenfalls Mausunterstützung zu erhalten, wurde das Programm gpm (General Purpose Mouse Interface) entwickelt. Als Basisfunktionalität bietet es Cut & Paste auf der Konsole, in Erweiterung jedoch auch eine Bibliothek, mit deren Hilfe Programme die Maus als Eingabegerät unterstützen können. Emacs und jed können davon z.B. Gebrauch machen.
Context-Highlightning
Text wird in unterschiedlichen Farben dargestellt, je nachdem, ob es sich um normale Zeichenketten, Schlüsselworte, Klammern, Funktionen etc. handelt. Durch unterschiedliche Einfärbung von Passagen wird die Lesbarkeit von Programmen gefördert. Diese Technik wird übrigens auch bei den Borland-Programmier-Editoren eingesetzt. Einige Vertreter unter Linux sind: Emacs, jed, fte etc.
Multi-Document
Bei vielen Aufgaben ist es wichtig, daß man mehrere Dateien gleichzeitig bearbeiten und Text zwischen ihnen austauschen kann. Diese Möglichkeit bietet jedoch nicht jeder Editor, z.B. sind der originale vi oder xedit nur in der Lage, eine einzige Datei zu bearbeiten. Die größeren Editoren bieten jedoch alle diese Möglichkeit.
Blockbearbeitung
Oft ist nötig einzelne Blöcke (z.B. die nächsten 10 Zeilen) auszuschneiden, zu kopieren oder getrennt vom restlichen Dokument zu behandeln (z.B. durch Ersetzen von Zeichenketten). Vi und höherwertige Editoren bieten dieses. Einige können jedoch nur die wichtigsten Operationen wie Löschen, Kopieren und Einfügen anbieten, jedoch kein Suchen-und-Ersetzen in einem Block.
Undo-Funktion
Dieses ist eine ziemlich wichtige Funktion. Sie ermöglicht es, Fehler wieder rückgängig zu machen. Hier unterscheiden sich die Editoren ebenfalls. Während einige Vertreter, z.B. Emacs und vile, einen unendlich großen Undo-/Redo-Puffer bieten, haben andere lediglich mehrere, eine oder keine Ebene, die sie rückgängig machen können.
Programmierung
Wenn sich der Editor frei programmieren läßt, wie es z.B. beim Emacs und jed der Fall ist, dann läßt er sich bis zum i-Tüpfelchen auf die Bedürfnisse des Anwenders anpassen - entsprechendes Wissen über die verwendete Sprache vorausgesetzt.
Automatisches Formatieren
Wer strukturierte Texte schreiben möchte, der macht von Einrückungen und Zeilenumbrüchen Gebrauch. Bessere Editoren bieten daher die Möglichkeit, Zeilen während der Eingabe ab einer gewissen Position automatisch umzubrechen und in der nächsten weiterzuschreiben (auto-fill). Viele Editoren erleichtern einem das Schreiben zusätzlich mit der Möglichkeit automatisch richtig einzurücken (auto-indent).
Programmier-Modi
Für Programmierer interessant sind spezielle Modi, welche die Strukturierung der Programme erleichtern. Neben Anweisungen wie bestimmte Programmfragmente zu färben sind, enthalten sie meist Algorithmen, den Programmcode automatisch passend einrücken.
Textbearbeitung umfaßt mehrere Aufgabenbereiche. Viele Leute setzen unterschiedliche Editoren für verschiedene Aufgaben ein. Es macht durchaus Sinn, den Editor gemäß der zu erledigenden Aufgaben auszusuchen. Für Kleinigkeiten wie z.B. das Ändern von Konfigurationsdateien eignet sich ein kleiner Editor wie ae, vi oder ee. Hier werden normalerweise nur Basisfunktionen benötigt.

Sollen Mails oder News-Artikel geschrieben werden, dann kommt es vor, daß man Passagen aus anderen Dateien einfügen oder seinen Text mit einem anderen vergleichen muß. Hier eigenen sich kleine Editoren, die mehrere Dateien gleichzeitig bearbeiten können wie z.B. jed, vim oder elvis.

Für Programmierer sind die großen Editoren von Vorteil, die alle oben aufgezählten Fähigkeiten vereinen. Daher verwenden viele Leute einen der verschiedenen Emacs-Varianten zum Programmieren oder sogar als Allround-Umgebung.

Der Visual Editor vi

Auf fast jedem Unix-System ist per se ein vi zu finden. Allein deshalb sollten die wichtigsten Befehle bekannt sein. Da dieser Editor zudem noch recht klein ist, bietet er sich auch zur Systemadministration an. Aufgrund seiner geringen Anforderungen an das System und Terminal, ist der vi auch unter ungünstigen Bedingungen benutzbar.

Sollte er sich über fehlende Terminal-Einstellungen beschweren, dann setzen Sie die TERM-Variable auf 'linux', 'xterm' oder 'vt100', je nachdem, wo sie sich gerade befinden. Meistens paßt die Emulation dann - insbesondere, wenn Sie sich von Linux aus auf einem anderen Unix-System einloggen.

Intuitive Bedienung

Der vi sieht zwar recht spartanisch aus, bietet dafür jedoch einen erstaunlichen Funktionsumfang. Da dieser Editor auf den ersten Blick jedoch alles andere als intuitiv zu bedienen ist, verzweifelten in der Vergangenheit viele Einsteiger daran. Wer sich jedoch länger mit Unix beschäftigt, wird einige im vi enthaltenen Konzepte in anderen Programmen wiederfinden - und diese intuitiv bedienen können.

VI-Modi

Abbildung 1: Die Modi vom VI

Um den vi zu verstehen, muß man sich zuerst vor Augen führen, daß er drei Modi besitzt, in denen er unterschiedliche Eingaben von der Tastatur erwartet. Im Standardmodus piept er einfach bei ungültigen Eingaben. Abbildung 1 zeigt diese drei Modi sowie Übegänge von einem in den anderen.

Wenn der vi gestartet wird, befindet man sich im Befehlsmodus. In diesem können keine Eingaben vorgenommen werden, weshalb es vorkommen kann, daß auf Eingaben mit unmotiviertem Gepiepse geantwortet wird. Sie haben die Möglichkeit auf sechs Arten Text einzufügen. Folgende Tabelle gibt Aufschluß über die Unterschiede.

a Text rechts vom Cursor einfügen
A Text am Zeilenende einfügen
i Text an Cursurposition einfügen
I Text am Zeilenanfang einfügen
o Eine neue Zeile nach dieser einfügen und am Anfang der Zeile Text einfügen
O Eine neue Zeile vor der aktuellen einfügen und dort am Zeilenanfang Text einfügen
Tabelle 1: Bedeutung der Einfügebefehle

Im Eingabemodus sollten die normalen Cursortasten funktionieren. Mit ESC gelangt man wieder zurück in den Befehlsmodus. Dort kann man den Cursor mit den VI-typischen Befehlen bewegen (siehe Abb. 2). Da der vi aus der Zeit einfacher Text-Terminals ohne spezielle Cursortasten stammt, kann er auch komplett ohne diese gesteuert werden. Wer das 10-Finger-System beherrscht, der hat im Befehlsmodus unter dem rechten Zeigefinger die Taste "Cursor down" und unter dem Mittelfinger "Cursor up". Jeweils eine Taste weiter links bzw. rechts liegen die Tasten für Cursorbewegungen nach links bzw. nach rechts. Eigentlich ganz einfach, oder? Mit den Tasten 'w' und 'b' kann wortweise vor und zurück gesprungen werden.

VI-Cursor

Abbildung 2: Cursor-Steuerung im VI

Den Kommandos zur Cursorsteuerung können Zahlen vorangestellt werden. In diesem Fall wird der Befehl entsprechend oft ausgeführt. 10j positioniert den Cursor demnach 10 Zeilen weiter unten.

j Eine Zeile nach unten
k Eine Zeile nach oben
h Ein Zeichen nach links
l Ein Zeichen nach rechts
^ Zum Anfang der Zeile
$ Zum Ende der Zeile
0 Zum ersten Zeichen der Zeile Zum Ende der Zeile
( Zum Anfang des aktuellen oder vorherigen Satzes
) Zum Ende des aktuellen oder nächsten Satzes
{ Zum Anfang des aktuellen bzw. vorherigen Absatzes
} Zum Ende des aktuellen bzw. nächsten Absatzes
Tabelle 2: Cursorsteuerung im vi

Zum Löschen sind die Tasten 'd' und 'x' vorgesehen. 'x' löscht das Zeichen unter dem Cursor, während 'X' links neben dem Cursor löscht. 'D' löscht bis zum Zeilenende und 'd' löscht einzelne Zeilen, benötigt jedoch zusätzlich ein Richtungsargument, ein zweites 'd' für die aktuelle Zeile oder ein Zeichen zur vertikalen Cursorsteuerung (siehe Tabelle 2). Den Befehlen 'x', 'X' und 'd' können zusätzlich die Anzahl der zu löschenden Zeilen/Zeichen vorangestellt werden.

Der Kommandozeilenmodus

Vom Befehlsmodus gelangt man mit einem Doppelpunkt in den Kommandozeilenmodus, in dem z.B. Dateioperationen vorgenommen und Optionen geändet werden können. Die wichtigsten Befehle sind hier :write, :quit und :quit!. Der erste speichert die aktuelle Datei, der zweite beendet den vi und der dritte beendet ihn sofort, ohne zu speichern.

Im Komandozeilenmodus können die meisten Befehle abgekürzt werden. Hinter einige Befehle kann ein Ausrufezeichen gesetzt werden, um den vi dazu zu "überreden", die Operation sogar dann auszuführen, wenn er sich normalerweise weigern würde, insbesondere, wenn eine Datei nicht gespeichert wurde. Damit ist vorsichtig umzugehen.

Mit :write wird der aktuelle Puffer gespeichert. Wird zusätzlich ein Dateiname angegeben, dann wird eine neue Datei angelegt. Wenn diese bereits existiert, verweigert der vi seinen Dienst - es sei denn, es wurde zusätzlich ein Ausrufezeichen angegeben.

Der Befehl :read liest die als Parameter angegebene Datei ein und fügt sie in der nächsten Zeile in den aktuellen Puffer ein. Fängt der Dateiname mit einem Ausrufezeichen an, so wird er wie ein Shell-Befehl aufgefaßt, dessen Ausgabe in den aktuellen Puffer eingefügt werden soll.

Mit dem vi kann man mehrere Dateien gleichzeitig bearbeiten. Werden ihre Dateinamen in der Kommandozeile angegeben, dann merkt er sie sich. Mit :args kann diese Liste eingesehen werden, wobei die aktuelle Datei besonders gekennzeichnet wird. Zwischen den Dateien kann mit den Befehlen :next und :previous gewechselt werden.

Will man eine zusätzliche Datei konsultieren, so kann sie mit :edit eingelesen werden. Die ursprüngliche Datei im Puffer muß dazu allerdings erst gespeichert werden. Auf die alte Datei kann man jederzeit mit Ctrl-^ zurückschalten.

Wichtig für die Manipulation von Textdateien ist auch die Möglichkeit Zeichenketten durch andere zu ersetzen. Dieses geschieht mit dem Befehl :substitute, der als Parameter zwei Zeichenketten erwartet. Diese werden voneinander und von dem Befehlsnamen bzw. dessen Kürzel durch ein beliebiges Zeichen getrennt - es muß jedoch beide Male das gleiche sein.

Normalerweise wird dieser Befehl nur ein einziges Mal ausgeführt. Er kann erweitert werden, wenn vor dem Befehlsnamen ein Bereich in der Form "von,bis" angegeben wird. Anstelle der zweiten Zeilennummer kann das Dollarzeichen verwendet werden, welches das Dateiende repräsentiert. Wird vor den Befehl ein Prozentzeichen gesetzt, so bezieht er sich auf die gesamte Datei. Soll die Zeichenkette ggf. mehrfach in einer Zeile ersetzt werden, dann muß der Befehl mit dem Trenner und einem 'g' (g wie global) beendet werden.

":%s/Martin/Joey/g" ersetzt dann in der gesamten Datei die Zeichenkette "Martin" durch "Joey", auch wenn sie mehrfach in einer Zeile vorkommt.

Um Zeichenketten im Text zu suchen, reicht es, dieser einen Schrägstrich bzw. ein Fragezeichen für die Suche rückwärts voranzustellen. Der vi versteht reguläre Ausdrücke, entsprechende Sonderzeichen wie '/', '\', '^' etc. müssen daher gesichert eingegeben werden, indem ihnen ein Backslash vorangestellt wird.

Befehl Kurz Beschreibung
:help :h Zeige Hilfedatei
:write :w [file][!] Datei speichern
:wq Speichern und beenden
:quit :q [!] VI beenden
:read :r datei Datei einlesen
:args :r Zeige Argumentliste
:next :n [!] Zur nächsten Datei wechseln
:previous :prev Zur vorherigen Datei wechseln
:rewind :rew Zur ersten Puffer wechseln
:last :la Zur letzten Datei wechseln
: In Zeile n springen
:substitute :s/s1/s2 Zeichenkette s1 durch s2 ersetzen
:global :g Zeichenkette suchen
:set :se Optionen ändern
:abbrev :ab Abkürzung definieren
Tabelle 3: Die wichtigsten Befehle

Das Verhalten wird mit Optionen kontrolliert

Mit dem Befehl ":set" können verschiedene Optionen geändert werden. Diese bestimmen das Verhalten des Editors. Damit können z.B. Zeilennummern oder automatisches Einrücken ein- und ausgeschaltet werden. Die Liste aller Optionen samt ihrer Werte kann mit ":set all" eingesehen werden.

Mit ":set

Wie die Befehle können die Namen der Optionen ebenfalls abgekürzt werden. Um automatisches Einrücken einzuschalten kann sowohl ":set autoindent" als auch ":set ai" eingegeben werden. Ausgestellt wird es z.B. mit ":set noai". Ist diese Option gesetzt, so rückt der vi den Text in der nächsten Zeile automatisch soweit ein, wie in der aktuellen. Das birgt jedoch eine kleine Gefahr in sich, wenn man nämlich einen Text mit der Maus aus einem anderen Terminal einfügen möchte und die Zeilen mit Leerzeilen anfangen. Dann erhält man den berühmten Treppeneffekt. In einem solchen Fall muß die Option kurzzeitig ausgeschaltet werden.

Für Einsteiger von großer Wichtigkeit ist die Möglichkeit, Backups von Dateien anzulegen. Oft passiert es aus Versehen, daß man aus Verseheneine wichtige Datei ändert. Wurde die Option "backup" angestellt, dann wird die ursprüngliche Datei vor erneutem Schreiben in .bak umbenannt.

Allerdings ist hier auch Vorsicht geboten, denn es gibt Verzeichnisse in einem Linuxsystem, in denen keine weiteren Dateien liegen dürfen außer den schon vorhandenen. Ansonsten kann das System verwirrt werden und Befehle mehrfach ausführen. Wenn z.b. in /etc/rc2.d/ solche Backup-Dateien liegen, dann werden die entsprechenden Programme beim Hochfahren des Systems mehrfach gestartet.

Einige Optionen beeinflussen den substitute-Befehl. Normalerweise wird zwischen Groß- und Kleinschreibung unterschieden, das kann jedoch mit der Option ignorecase unterdrückt werden

Wer viele Texte schreibt, der wird sich über den automatischen Zeilenumbruch freuen. Die Option wrap schaltet ihn ein und die Option wrapmargin bestimmt die Position des Umbruches. Allerdings wird vom rechten Rand an gezählt. "wrapmargin=66" bewirkt demnach bei 132 Spalten, daß an der Spalte 66 umgebrochen wird, bei einem 80-Spalten breiten Terminal hingegen würde bei Spalte 14 umgebrochen werden.

Option Küzel Beschreibung
autoindent ai Automatisches Einrücken
backup bk Automatisches Anlegen von Sicherheitskopien
cindent cin Automatisches Formatieren von C-Programmiercode
errorbells eb Gibt einen Ton bei einem falschen Befehl aus
expandtab et Füge Leerzeichen anstelle von Tabulatoren ein
ignorecase ic Unterscheide nicht zwischen Groß- und Kleinschreibung bei der Suche nach Zeichenketten
number nu Zeilennummern einblenden
readonly ro Dieser ist schreibgeschützt
shell sh Setze die Shell für externe Befehle
showmode smd Blende den aktuellen Modus links unten ein
tabstop ts Länge eines Tabulators (normalerweise 8 Zeichen)
undolevels ul Maximale Ebenen für die Undo-Funktion
wrapmargin wm Setzt den rechten Rand für Zeilenumbrüche
wrap Schaltet automatischen Zeilenumbruch ein
writeany wa Überschreibt Dateien auch ohne Ausrufezeichen
Tabelle 4: Die wichtigsten Optionen und ihre Bedeutung

Der vi liest seine Voreinstellungen aus der Datei .exrc im Heimatverzeichnis des Benutzers ein. Dort kann er mit den nötigen Optionen konfiguriert werden. Der Doppelpunkt kann dabei weggelassen werden. Folgender Ausschnitt zeigt eine übliche Initialisierung.

	set nobackup
	set autoindent
	set wrapmargin=66
	set wrap
	set tabstop=4
	set noeb
	ab gr Grüße... Joey
Die letzte Zeile ist neu, sie fügt den Text "Grüße... Joey" ein, sobald man "gr" gefolgt von einem Leerzeichen, Tabulatorzeichen oder Enter eingibt.

Als weiterführende Literatur sei an dieser Stelle ausdrücklich auf die Manual-Seiten sowie zusätzlicher Dokumentation in /usr/doc/ hingewiesen.

Die Eierlegende Wollmilchsau namens Emacs

Für komplexe Aufgaben ist der Emacs hervorragend geeignet. Die viel zu oft gestellte Frage "Kann ich ... mit dem Emacs machen?" ist jedoch völlig falsch formuliert. Richtig wäre: "Wie kann ich ... mit dem Emacs machen?" Dieses Programm, von denen viele Benutzer liebevoll behaupten, es sei ein Lisp-Interpreter, der rein zufällig einen Editor dabei hat, ist ein wahrer Tausendsassa.

Der Emacs ist vollständig programmierbar. Er besitzt eine eigene Programmiersprache, nämlich Emacs-Lisp oder kurz Elisp. In dieser können spezielle Modes und komplexe Programme geschrieben werden.

VI-Cursor

Abbildung 3: Emacs unter X11 mit Syntax-Highlightning

Für die meisten Anwendungen werden entsprechende Programme (in Elisp geschrieben) gleich mitgeliefert. Sollte eines fehlen, so ist die Wahrscheinlichkeit groß, daß sich im Elisp-Archiv eine passende Datei befindet.

Im Gegensatz zum vi besitzt der Emacs neben dem eigentlichen Eingabepuffer (bzw. mehreren, wenn der Bildschirm aufgeteilt wird) lediglich noch den Minibuffer, in dem Befehle und zusätzliche Texteingaben gemacht werden können. Zwischen allen Puffern kann beliebig gesprungen und kopiert werden.

Die Cursorsteuerung vom Emacs ist ebenso typisch wie die vom vi. Sie findet sich genauso in verschiedenen anderen Programmen wieder. Der Emacs ist berühmt für seine Art Tastenkombinationen zu beschreiben. Ctrl-a wird durch C-a dargestellt. M-x steht für Meta-x und kann auf zwei Arten eingegeben werden. Wenn das Terminal die linke Alt-Taste richtig unterstützt, entspricht Alt-x der Beschreibung M-x. Bei der zweiten Art wird zu erst die ESC-Taste gedrückt (und wieder losgelassen) und anschließend das 'x' eingegeben.

C-f Ein Zeichen nach rechts
C-b Ein Zeichen nach links
C-p Eine Zeile nach oben
C-n Eine Zeile nach unten
C-a An den Zeilenanfang springen
C-e An das Zeilenende springen
M-a An den Satzanfang springen
M-e An das Satzende springen
C-v Eine Seite weiterblättern
M-v Eine Seite zurückblättern
Tabelle 5: Cursorsteuerung im Emacs

Der allerwichtigste Befehl für Einsteiger in die Bedienung des Emacs ist jedoch die Help-Taste C-h. Wird nicht sofort eine weitere Taste gedrückt, so wird eine kurze Hilfestellung in der untersten Bildschirmzeile angezeigt. Hier sollte zuerst die mitgelieferte Anleitung (engl. Tutorial) studiert werden, zu der man von dort mit 't' gelangt.

Der Emacs hat viele Textpuffer, die in einem Ring angeordnet sind. Jede zu bearbeitende Datei wird in einen solchen Puffer geladen. In einigen Situationen sind es allerdings schreibgeschützte Puffer, die nur Informationen anzeigen sollen. Einige Programmteile rufen z.B. externe Programme auf (C-Compiler, LaTeX-Compiler, ftp, SQL-Frontend etc.), dessen Ausgaben werden in einen neuen Puffer geleitet, der teilweise schreibgeschützt ist.

Mit C-x b kann man den aktuellen Puffer wechseln und C-x C-b zeigt eine Liste aller Puffer an. Diese kann man auch mit C-x b ? erhalten. Wurde der Bildschirm in mehrere Fenster aufgeteilt, so kann das aktuelle Fenster mit C-x 1 wieder zur Originalgröße vergrößert werden. Mit C-x o wird das jeweils nächste Fenster zum aktuellen erklärt.

Wer doch lieber einen anderen Editor ausprobieren möchte, der kann den Emacs mit C-x C-c wieder beenden. Wurde eine Datei bis dahin bearbeitet, jedoch nicht gespeichert, dann wird man gefragt, ob sie gespeichert werden soll. Die aktuelle Datei kann jederzeit mit C-x C-s auf die Platte geschrieben werden. Mit C-x s geht der Emacs die Liste der Puffer durch und fragt bei jedem veränderten, ob er gespeichert werden soll.

Eine neue Datei wird mit C-x C-f geladen. Beginnt der Dateiname mit einem Schrägstrich, dann springt ange-ftp an und überprüft, ob das folgende Wort ein Rechnername ist. In diesem Fall wird ftp angeworfen und ggf. nach Login und Paßwort gefragt.

~/der.text Eine Datei im Benutzerverzeichnis
/etc/profile Eine Datei im Konfigurationsverzeichnis
/tapiola:~/mein.text Eine Datei im Benutzerverzeichnis des gleichen Benutzers auf dem Rechner tapiola
/artis@finlandia:~/dein.text Eine Datei im Benutzerverzeichnis des Users artis auf dem Rechner finlandia
Tabelle 6: Interpretation von Dateinamen

Von großen und kleinen Modi

Die Programmierbarkeit vom Emacs spiegelt sich in den vielen Major- und Minor-Modes sowie zusätzlichen Elisp-Programmen wieder. Es gibt wahrscheinlich nichts im Emacs, das sich nicht umprogrammieren ließe. Das Konzept sieht vor, daß für jeden Puffer ein sogenannter Major-Mode und beliebig viele Minor-Modi aktiviert sind.

Der Name des aktuellen Major-Modes wird in der invers dargestellten Zeile am unteren Bildschirmrand angezeigt wie folgende Abbildung verdeutlicht.

  --**-Emacs: Editoren (Indented Text latin-1 Fill)--L461--80%--------------
      \          \              \         \      \       \    \ Position im Puffer
       \          \              \         \      \       aktuelle Zeile
	\          \              \         \      Minor-Mode: auto-fill-mode
	 \          \              \         Minor-Mode: iso-accents-mode
	  \          \              Major-Mode: indented-text-mode
	   \          Dateiname
	    Flag: ** = Datei wurde seit letztem Speichern verändert
		  %% = Datei ist schreibgeschützt
Abb. 4: Bedeutung der Statuszeile im Emacs

Ein Major-Mode definiert spezielle Funktionalitäten für bestimmte Aufgaben, die mit dem Inhalt dieses Puffers in Verbindung stehen. Diese umfassen oftmals spezielle Tastaturanpassungen. Ein solcher Mode kann sich die Tastaturbelegung komplett neu definieren. Daher muß man bei Tastaturkürzeln aufpassen, aus welchem Mode sie entstammen - in einem anderen müssen sie nicht automatisch das gleiche bewirken. Ein Major-Mode kann durch mehrere Minor-Modi ergänzt werden. Diese verhalten sich meist wie Ein-/Aus-Schalter, werden sie ein zweites Mal aufgerufen, dann deaktivieren sie sich wieder.

Meistens bieten die Modi zusätzliche Funktionen an, die sich auch in der neuen Tastaturbelegung wiederfinden. Diese Funktionen sind z.B. einfache Abkürzungen (siehe html-mode), teilweise kontext-abhängige. Ein Mode kann eine Syntax definieren und sein Verhalten davon abhängig machen, so rücken z.B. der C++- und Perl-Mode automatisch abhängig vom Kontext ein.

Der SQL-Mode interpretiert jede Zeile als SQL-Abfrage, nimmt beim Zeilenabschluß automatisch Kontakt zum SQL-Server auf und stellt das Ergebnis der Datenbankabfrage in einem anderen Fenster dar.

Eine Spezialität, die ich bisher bei keinem anderen Editor wiedergefunden habe, ist die o.g. Möglichkeit, Dateien zu bearbeiten, die auf einem anderen Rechner liegen. Dazu wurde für den Emacs ange-ftp programmiert. Ist diese Bibliothek geladen, dann wird jeder Dateiname einer zu ladenden Datei zusätzlich nach entsprechenden Schlüsselworten durchsucht und ggf. ein FTP-Programm gestartet, welches die Datei von einem anderen Rechner lädt bzw. auf diesen schreibt. Als Clou kann man im Ausgabefenster des FTP-Programms ebenfalls Eingaben machen, die an den FTP geschickt werden. Somit erhält man zusätzlich eine bequeme Oberfläche für FTP.

Eine weiterere Spezialität ist die Bibliothek crypt++ aus dem Elisp-Archiv. Wird diese geladen, dann setzt sie an der gleichen Stelle wie obige Bibliothek an. Auf diese Weise ist man in der Lage, komprimierte Dateien zu lesen, zu bearbeiten und wieder zu speichern. Das Komprimieren bzw. Dekomprimieren übernimmt der Emacs automatisch. Natürlich arbeiten die beiden Bibliotheken auch gleichzeitig. Sie sollten beim Start vom Emacs gleich geladen bzw. aktiviert werden.

Ein weiteres oft benutztes Programm ist gnus. Hierbei handelt es sich um einen Newsreader und ein Mailprogramm. Zusammengehörige Artikel werden dabei gruppiert und bei Bedarf können sie auch eingefärbt werden.

Diese Beispiele zeigen nur einen kleinen Auschnitt dessen, was der Emacs zu bieten hat. Die mitgelieferten Elisp-Bibliotheken, -Programme und Modi sind meistens so geschrieben, daß sie ohne Änderungen im Lisp-Code an die Bedürfnisse der Benutzer angepaßt werden können.

changelog-mode Bearbeitet ChangeLog-Dateien zur Beschreibung von Änderungen im Programmcode
indented-text-mode Komfortabler Mode zum Bearbeiten von Texten
html-mode Hilft bei der Erstellung von HTML-Dateien
latex-mode Intelligenter Assistent zum Schreiben von LaTeX-Dokumenten
sql-mode SQL-Frontend
perl-mode Unterstützt die Programmierung von Perl-Skripten
c++-mode Erleichtert C-/C++-Programmierung
shell-script-mode Hilft bei der Erstellung von Shellskripten
mail-mode Verschickt eine Mail
gnus Kombinierter Mail- und Newsreader
picture-mode Vereinfacht das Generieren von ASCII-Grafiken
Tabelle 7: Ausgewählte Major-Modi

iso-accents-mode Unterstützt die Eingabe von ISO-Umlauten auf Tastaturen, auf denen sie normalerweise nicht eingegeben werden können
line-number-mode Zeigt die aktuellen Zeilennummer in der Statuszeile an
auto-fill-mode Automatischer Zeilenumbruch ab Spalte n
auto-save-mode Speichert alle n Minuten eine Sicherheitskopie der aktuellen Datei
overwrite-mode Neu eingegebener Text überschreibt den vorhandenen.
Tabelle 8: Ausgewählte Minor-Modi

Mit M-x gelangt man in den Minibuffer, in dem man nun Funktionen eingeben kann. Das eingegebene Wort wird durch Eingabe des Tabulators oder Fragezeichens soweit ergänzt wie es eindeutig ist. Der Emacs präsentiert anschließend eine Liste der Funktionen, die mit diesem Wort anfangen. Ihr Aufruf läßt sich natürlich auch auf freie Tasten legen, was besonders dann sinnvoll ist, wenn sie oft benutzt werden.

doctor Der berühmt berüchtigte Psychiater Eliza
replace-string Ersetzt beliebige Zeichenketten
replace-regexp Ersetzt reguläre Ausdrücke
query-replace-regexp Fragt vor dem Ersetzen regulärer Ausdrücke
goto-line Springt in Zeile n
Tabelle 9: Nützliche Funktionen

Initialisiert wird der Emacs über die Datei ~/.emacs. Diese enthält natürlich Elisp-Anweisungen.

Die Haupt-Konfigurationsdateien für den Emacs sind:

	/etc/emacs/site-start.el
	~/.emacs
	/etc/emacs/default.el
Statt /etc/emacs wird oft auch das Verzeichnis /usr/lib/emacs/site-lisp verwendet. Die Dateien werden in dieser Reihenfolge abgearbeitet. Insbesondere können also die Einstellungen in der Datei `default.el' die Einstellungen aus ` /.emacs' und `site-start.el' überschreiben.

	(if (not (eq window-system 'x))
	  (menu-bar-mode nil))
	(setq suggest-key-bindings nil)
	(setq make-backup-files 't)
	(define-key global-map "\M-g" 'goto-line)
	(define-key global-map "\M-s" 'save-buffer)
	(define-key text-mode-map "\M-s" 'save-buffer)
	(define-key global-map "\M-i" 'iso-accents-mode)
	(define-key text-mode-map "\M-i" 'iso-accents-mode)
	(require 'crypt++)
	(setq text-mode-hook 'turn-on-auto-fill)
Diese Initialisierung schaltet die Menüzeile aus, wenn der Emacs auf der Textkonsole gestartet wird. Der neue GNU-Emacs (19.34) hat die nervige Eigenschaft, daß er sekundenlang Informationen anzeigt, wie man einen über M-x eingegebenen Befehl auch über Tastenkürzel erreichen kann. Diese Eigenschaft wird in der dritten Zeile ausgeschaltet. Wenn eine Datei geändert wird, legt der Emacs eine Sicherheitskopie von der alten an, indem er die Tilde (~) an den Dateinamen anhängt.

Anschließend werden drei Tastenkürzel geändert. Mit M-g (also auf der Konsole mit Alt-g) springt der Emacs in die angegebene Zeile, M-s speichert die aktuelle Datei und mit M-i wird ein Minor-Mode eingeschaltet, mit dessen Hilfe man z.b. auf einer amerikanischen Tastatur deutsche Umlaute eingeben kann. Dabei wird die LaTeX-Schreibweise verwendet ("a -> ä). Zudem wird die bereits erwähnte Bibliothek crypt++ geladen.

Viele Major-Modi haben spezielle Schnittstellen über sogenannte Hooks. Das sind Ansatzpunkte für erweiterte Benutzerkonfiguration. Diese können weitere Funktionen bezeichnen, die aufgerufen werden, wenn dieser Mode aktiviert wird. In obigem Beispiel wird der auto-fill-mode aktiviert, sobald für einen Puffer ein text-mode aktiviert wird.

Weitere Editoren

Debian GNU/Linux enthält auf den Bootdisketten den ae. Sein großer Vorteil liegt in der einfachen Bedienbarkeit für Einsteiger. Die wichtigsten Tastenkürzel werden dabei im oberen Bildschirmfenster angezeigt.

Für Umsteiger von DOS, die bereits Borland-Produkte kennengelernt haben, ist der joe möglicherweise die richtige Wahl. Ein Teil der von Borland bekannten Tastenkürzel haben hier die gleiche Wirkung.

ae Alternativer Editor, kleiner als vi
aXe Komfortabler Editor für X11
beav Binary Editor and Viewer
ce Chet's Editor, Emacs Clone
Crisp Komfortabler Editor für X11
ed Klassischer zeilenorientierter Unix-Editor
ee Einfacher Editor
elvis,nvi VI-Clones
vile VI-Clone
emacs GNU Emacs
jade Texteditor für Programmierer
je Jerome's Editor
jove Emacs-Clone
fte Editor für Programmierer
le Lukyanov's Editor
lemacs Lucid Emacs
me Micro Emacs
nedit Komfortabler Editor für X11
Point Point Editor für X11
pico Editor von PINE
sam Erweiterter ed
Scriptum Motif-basierter Allround-Editor
Sex Simple Editor for X11
TeD Komfortabler Editor für X11
vim VI Improved
jed Editor für Programmierer
joe Joe's own editor, klein, WordStar-kompatibler Befehlssatz
textedit Editor für OpenView (ursprünglich von Sun)
xcoral Komfortabler Editor für X11, Emacs-ähnlicher Befehlssatz
xedit Einfacher Editor für X11, Emacs-ähnlicher Befehlssatz
xemacs X-Emacs
xwpe WordPerfect Editor
Tabelle 10: Liste einiger verfügbarer Editoren

Literatur

[1] Deb Cameron, Bill Rosenblatt; Learning GNU-Emacs, O'Reilly
    ISBN 0-937175-84-6b

[2] Elisp-Archive
    ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/
Martin Schulze

Quelle: Linux-Special vom Toolbox-Verlag '97

© Joey, 26 Dec '97