Vorschläge für ein Universitäts- und Berufsleben in Emacs

In diesem Artikel möchte ich einige Möglichkeiten vorstellen, wie man sich dem 42 Jahre alten Editor Emacs etwas annähern könnte und was es für Vorteile bringt, Zeit in ein derart altes System zu investieren. Ich fokussiere mich hierbei lediglich auf einige Anhaltspunkte zur besseren Benutzbarkeit und zu häufigen Problemen gepaart mit einigen der häufigsten Wünsche und überlasse tiefere Recherchen den Leser/Innen, da dieser Artikel sonst zu einem Buch ausarten würde.

Ich richte mich also an jene, die eine bessere Schreiberfahrung an ihren Computern suchen. Jene, die sich denken, dass es doch bessere Methoden geben muss, große Mengen an Text zu manipulieren, Präsentationen mit Unmengen an internen Querverweisen zu bändigen und Übersicht über die Flut an Unterkapiteln zu behalten. Auch Softwareentwickler/innen oder Datenanalysten sollen hierbei nicht vergessen werden.

Eine Editorkonfiguration – Mehrere Rechner

Über Versionsverwaltungsprogramme wie beispielsweise git oder mit Synchronisationstools wie Dropbox kann man sich die gesamte Konfiguration samt aller Scripte, Tastenkürzel, Plugins und Wörterbücher immer mitnehmen. Sei es zum eigenen Arbeitsplatz, auf dem Laptop, den Desktop-PC oder andernorts: Nach dem ersten Aufsetzungsaufwand hat man nie mehr das Problem von fehlenden Editoreinstellungen und man benötigt keine Tage mehr, um den Arbeitsplatz genau so einzurichten, wie man ihn eigentlich haben will.

Dieses Ziel der verteilten Verwaltung der eigenen Editorkonfiguration benötigt folgende Komponenten:

  • Einen Datenspeicher
  • und einen verlinkten Editor, dessen Konfiguration auf diesen Datenspeicher, beziehungsweise auf einen enthaltenen Ordner, verweist.

Der Datenspeicher kann ein professionelles Programm zum Verwalten von Versionen sein, wie beispielsweise git. Dies hat den Vorteil, dass man jede einzelne Änderung manuell verfolgen kann und immer weiß, wann man was warum geändert hat. Durch diese Taktik verliert man nie den Überblick über die eigenen Einstellungen und sollte einmal etwas danebengehen, kann man jederzeit auf eine noch funktionierende Variante von früher zurückgreifen. Diese Systeme sind in vielen Aufgabenbereichen immens nützlich und können daher auch außerhalb dieser Anleitung zum organisierten Emacs-Gebrauch benutzt werden. Einen kurzen Einstieg kann man im Tutorial git – der einfache Einstieg gefunden werden, wer etwas umfassenderes will kann sich die auf Deutsch übersetzte Einführung in git durch die eigene Dokumentation ansehen.

Das Verlinken des Editors ist der einfachere Teil. Dies kann über sogenannte symbolische Verknüpfungen gemacht werden, welche einen Ordner an einem anderen Ort im System verlinken, sodass Programme in ihren normalen Pfaden nach Konfigurationsdateien suchen, diese auch finden, aber in Wahrheit an den jeweiligen Datenspeicher umgeleitet werden. Dies ist auch für Probleme wie andere Softwarekonfigurationen, oder aber auch einfach nur mehrerer Spielstände, welche zwischen mehreren PCs Synchronisiert werden sollen sehr nützlich. In diesem Fall für Emacs muss nur das .emacs.d Verzeichnis verlinkt werden. Die genaue Position dieses .emacs.d-Verzeichnisses kann für das jeweilige Betriebssystem im Wiki nachgelesen werden.

Weiters ist die Zusammenstellung der Konfigurationsdateien an sich auch noch sehr spannend, da man mit Projekten wie beispielsweise use-package die eigenen Konfigurationsdateien noch besser strukturieren und unter Kontrolle halten kann. Hält man sich an keine normalisierte Form für diese Dateien, landet man schnell bei einer mehrseitigen Lisp-Datei, welche nicht mehr zu Überblicken ist. Versucht man allerdings, sämtliche Teile zu strukturieren und alles so aufzubauen, dass die einzelnen Abschnitte thematisch getrennt sind, kann man jede neue Änderung dennoch weiterhin überblicken und wird nicht von der Mächtigkeit der Möglichkeiten überrumpelt.

Ist diese Herausforderung erst einmal geschafft, kann man sich voll und ganz den Möglichkeiten des neuen Spielzeugs widmen. Wenn man die Einstellungsdateien oft genug sichert, muss man nie Angst haben, die erarbeiteten Optionen wieder zu verlieren. Als Starthilfe biete ich auch einen Ausschnitt aus meinem .emacs.d-Verzeichnis zum Download an, der als Zusammenstellungsbeispiel dienen sollte. Außerdem sind in diesen Konfigurationsdateien einige Fehlerbehebungen enthalten, welche eventuell nützlich werden könnten, sollten sie zu einem Problem werden.

Vollkommen eigene Tastenkürzel

Ein waschechter Editor wäre kein Editor ohne Keybindings. Anders als alle anderen derartigen Programme (außer höchstens Vi/m), bietet Emacs allerdings weitaus komplexere und vielseitigere Optionen an, als lediglich einige fertige Programmkomponenten auf andere Strg-C Kombis zu legen.

Was Emacs in diesem Gebiet so besonders macht, ist die Reihenfolge in der die Tasten gedrückt werden. Man muss nicht sämtliche Tasten gleichzeitig gedrückt halten, sondern drückt die Kombinationen alle nacheinander um zum gewünschten Ziel zu gelangen. Dies wird mit der Zeit immer natürlicher, da die verschiedenen Unterfunktionen wie eine Art Baum von einigen gleichbleibenden Kommandos abstammen. Natürlich ist dies nach belieben umstellbar und auch auf völlig andere Systeme umstellbar, wie Projekte wie beispielsweise spacemacs eindrucksvoll zeigen.

In Emacs ist es außerdem möglich, vollkommen eigene Kommandos zu erstellen und diesen Kommandos jeweils eigene Plätze auf der Tastatur zuzuteilen. Dies mag am Anfang vielleicht noch etwas beängstigend klingen, mit der Zeit wird dieses Wissen allerdings immer normaler und wenn man einmal einen Wunsch hat, der ausnahmsweise noch nicht auf genau die weiße wie man ihn haben will von Dritten implementiert wurde, wird man sich an diese Möglichkeit auch erinnern.

Vim-Keybindings in dessen traditionellen Erzfeind

Durch Entwicklungen wie evil ist es nun möglich, in Emacs einem sehr weit entwickelten Vi-Modus zu verwenden, der die eventuell gewohnten modalen Keybindings so gut umsetzt, dass man teilweise wirklich vergessen kann, gerade nicht in Vim zu schreiben.

Für diejenigen, die sich noch mehr mit den modalen Keybindings beschäftigen wollen, kann man mit evil sogar eigene neue Kombinationen definieren, die sich in das bereits bestehende Shortcut-Konstrukt ohne Probleme einfügen. Man kann also eigene Modi erfinden oder bereits bestehende erweitern, um sich so die gewohnten Keybindings noch mehr nach den eigenen Präferenzen umzubauen.

Projektbasiertes Arbeiten

Das Konzept eines Projektes ist bei vielen Aufgaben sehr angenehm zu verwenden. Mit diesem Konzept kann man gewisse zusammengehörige Dateien besser gliedern und mit einigen sinnvollen Shortcuts auf Dateien in einer Ordnerstruktur zugreifen, beziehungsweise quer durch das gesamte Projekt suchen. Noch spannender wird das alles durch die Integration des magit-Pakets, welches git in diesen projektbasierten Arbeitsablauf eingliedert und sämtliche Dateien mit allen gemachten Änderungen komfortabel über eine einzelne Anzeige übersichtlich darstellt.

Zum Projektbasierten Arbeiten kann ich also auf die folgenden Projekte verweisen:

Organisieren, Präsentieren und Rechnen mit Orgmode

Um mit den vielen Informationen des Alltags, der Arbeit oder der Ausbildung besser zurecht zu kommen, gibt es in Emacs den sogenannten org-mode. Mit diesem Werkzeug kann man sich alle möglichen Informationen zu Dateien zusammenfassen, in Überschriften gruppieren und mit so vielen Tags versehen, wie man sich ausdenken kann. Das praktische ist die Integration des Orgmodes in die vielen Unterbereiche des Programms, da man auch alles was man will verlinken kann und so beliebig komplexe Arbeitsumgebungen möglich sind.

Mit Agenda-Views kann man sich zusätzlich auch noch ganze Aufgabenlisten erstellen, die als Quelle und Datenspeicher die Dokumente verwenden, die man bereits benutzt. Durch das simple hinzufügen eines TODOs vor einer Überschrift wird diese markiert und in der Agenda-Ansicht hervorgehoben. Es ist also auch sehr empfehlenswert, sich diese Werkzeuge zumindest einmal angesehen zu haben.

Ein weiteres sehr mächtiges Werkzeug ist org-babel, welches die direkte Integration von Software oder anderen textbasierten Medien mit dem restlichen Text ermöglicht. Hiermit kann man beispielsweise Programme wie SAT-Solver (wie zum Beispiel limboole, wie es auch in meiner Konfiguration eingebunden wird), ipython, SQL (sogar mit Abfrageergebnissen als Tabellen) oder R im Fließtext einbetten und später im Export mit dem richtigen Syntax-Highlighting (und auf Wunsch auch in der eigenen LaTeX-Umgebung) einbetten. Hierdurch können komplexe Verarbeitungspipelines vermieden werden und stattdessen alles mit einem einzelnen Softwarepaket regeln, das man schließlich sogar in der Komanndozeile ausführen kann, um automatische Exports durchzuführen. Findige

Leser/Innen sehen hier eventuell auch bereits das Potenzial, das hinter der Kombination einer Projektverwaltung, Versionsverwaltung, Magit, Org-Mode und diesen Exports steckt: Man kann an einem Projekt gemeinsam arbeiten und sich stets den aktuellsten Export automatisch generieren lassen, ohne lange Zeit mit der Verantwortung der Datenaktualisierung kämpfen zu müssen. Zusammen an größeren Texten zu Arbeiten geht durch dieses System und die damit einhergehende Vereinheitlichung der Datensätze erstaunlich gut. Sei es nur zwischen dem eigenen Ich einen Tag zuvor auf einem anderen Rechner ohne Internetzugang und der versehentlich nicht synchronisierten Arbeit an der heimischen oder dienstlichen Workstation, die man am nächsten Tag vollautomatisiert mit einem Merge (aus der Welt der Softwareentwicklung) zusammenführen kann. Auch Folien können auf diese Weise erstellt werden, oder vor einer Gruppe von Studenten können Befehle mit den gewohnten Tastaturkürzel ausgeführt werden, wodurch man sich weniger mit dem Schreiben an sich beschäftigen muss und ein größeres Ohr für die Fragen der Studenten haben kann.

Schreiben, Dokumentieren, Kreieren: Alles in einem Paket

Mit Emacs kann man im gleichen Programm schreiben, Software erstellen, LaTeX-Dokumente bearbeiten und neue Grafiken mit einigen Hilfswerkzeugen bauen. Dies alles wird durch die vielseitigen Konfigurationsmöglichkeiten und die Optionen mit erweiterten Plugins möglich.

Mit Hilfe der umfassenden Konfigurationsmöglichkeiten des Orgmodes und der Option, eigene LaTeX-Klassen für den Export zu definieren (für ein Beispiel, siehe meine persönliche Emacs Konfiguration und die Datei scripts/org-loader.el), kann man sich eigene Publishing-Pipelines kreieren, welche exakt den eigenen Wünschen und Bedürfnissen entsprechen. Bietet Orgmode nicht genug Anpassungsmöglichkeiten, kann man auch noch immer auf reines LaTeX umsteigen und mit dem AUCTeX-Paket auf eine schnellere und einfachere Art direkt LaTeX-Quelltexte bearbeiten. Diese Werkzeuge vertragen sich hierbei natürlich auch wieder mit den oben genannten Methoden, Projekte zu verwalten und Versionen zu synchronisieren.

Außerdem gibt es für viele Programme, Web-Applikationen und Publishing-Pipelines eigene Versionen, welche sich sehr gut in Emacs integrieren. Beispielsweise kann man Inhalte eines WordPress-Blogs mit Werkzeugen wie org2blog direkt verfassen und sogar veröffentlichen, ohne den eigenen Editor zu verlassen. Durch die Integration mit dem Orgmode ist es sogar möglich, sich TODO-Einträge in diese Blogartikel zu legen, welche dann in der generellen Agenda-Ansicht wiederum aufscheinen, sollte man dies so konfiguriert haben. Es kommt am Ende also immer alles zusammen und man kann sich die Umgebung schaffen, die für einen selbst und mit der eigenen Arbeit am besten zusammenpasst.

Softwareentwicklung

Für Emacs gibt es die verschiedensten Erweiterungen für alle Sprachen die man sich nur wünschen kann. Für praktisch jede Programmiersprache gibt es bereits Erweiterungen, die genau der gewünschten Funktionalität entsprechen, die man für eine zu erledigende Aufgabe braucht. Beispielsweise gibt es den web-mode, welcher versucht, die komplexen Anforderungen der Webentwicklung, mit den vielen verschiedenen Scripting-Umgebungen und Sprachgrammatiken in einer einzelnen Datei, in einem einzelnen Editor zu vereinen.

Auch gibt es sehr gute Erweiterungen für die Entwicklung von C++ Projekten, welche sich sogar mit Build-Systemen wie CMake integrieren können. Ein großes Schlüsselwort ist hier die Erweiterung cmake-ide. Auch die automatische Vervollständigung der geschriebenen Schlüsselwörter ist möglich, sowohl rein textuell, als auch mit einer vollständigen Integration in den Clang-Compiler, mit der Verwendung von company-mode und den dort vorgestellten Erweiterungen. Da die Konfiguration hier sehr komplex werden kann, verweise ich auch hier wieder auf meine persönliche Emacs Konfiguration und auf die Datei scripts/c-development.el.

Generell gesagt gibt es also für so ziemlich alle Wünsche was Sprachsupport angeht eine Erweiterung, die auch meistens gut genug für die normale Verwendung funktioniert. Falls es nichts gibt, kann man sich natürlich auch immer eine bereits bestehende Erweiterung kopieren und so lange modifizieren, bis die gefundene Lücke im eigenen Werkzeuggürtel dennoch noch gefüllt werden kann.

Zusammenfassung und Anregungen

Zusammenfassend zu diesem langen Artikel, der eigentlich eher einer Referenz oder einem Vorschlagkatalog gleicht, möchte ich einen Ratschlag zum erforschen der Möglichkeiten hinter dem ganzen hier geben. Es gibt mittlerweile viele Gemeinschaften, die sich mit der Erweiterung und ständigen Verbesserung von Emacs beschäftigen. Diese haben sowohl generelle Websites mit Informationen über den Editor hervorgebracht, wie beispielsweise die oft verlinkten Wiki-Artikel, wikiemacs und emacs.sexy. Zusätzlich sind aber auch ganze Distributionen von Emacs entstanden, die eine gewisse Erfahrung oder ein gewisses Bedienungskonzept verkörpern. Eines dieser Projekte ist spacemacs, welches versucht, die Ideen der modalen Textbearbeitung aus Vim auch in Emacs einzuführen, wobei ein sehr interessanter Bedienansatz mit faszinierenden Ideen zur Konfigurationsverwaltung und zur Zusammenarbeit entstanden sind.

Ich möchte mit diesem Artikel mehr Aufmerksamkeit auf derartige Alternativen zu anderen, selbsternannt moderneren Werkzeugen lenken. Werkzeuge wie Emacs wurden bereits seit vielen Jahren entwickelt und beherrschen Fähigkeiten, die in dieser Form in vielen anderen Editoren noch lange nicht implementiert werden könnten, und das alles bei einem vergleichsweise minimalen Ressourcenverbrauch. Die Zeiten in denen Emacs humoristisch als Abkürzung für Eight megabytes and constantly swapping interpretiert wurde, haben sich mittlerweile nach dem Anbruch des Web-Zeitalters selbst eingeholt. Ein Editor mit diesen Fähigkeiten, der kostenlos für alle zur Verfügung steht und zur gleichen Zeit noch weniger Ressourcen verbraucht als ein einziger offener Tab im Firefox, verdient meiner Meinung nach etwas Neugierde. Am Ende weiß man ja nie, was einen vielleicht am Ende erwarten könnte.