Der schlanke Konsolen-Texteditor Dte überrascht mit interessanten Funktionen und Konzepten.
Kleine Texteditoren, die auf der Konsole oder im Terminal laufen, sind schnell, effektiv und manchmal auch erstaunlich leistungsfähig. Besonders unter widrigen Umständen, etwa wenn der Rechner gerade über kein laufendes X-Window-System verfügt oder wichtige Bibliotheken fehlen, erweisen sie sich als nützlich, um Konfigurationsdateien zu reparieren und damit das System wiederzubeleben.
Zu den wichtigsten Vertretern zählt heute der auf dem legendären Pico basierende Nano, den wir schon verschiedentlich vorgestellt haben [1]. Alternativen wie etwa Tilde [2] überraschen oft mit interessanten Eigenschaften, wie in diesem Fall mit Menüs, ausgefeiltem Syntax-Highlighting und mehr. Viele der Programme können in mehreren Puffern verschiedene Dateien geöffnet halten, um beispielsweise eine Zeile aus der /etc/mtab in die Datei /etc/fstab zu übertragen.
Ganz besonders komfortabel geht das mit Dte [3]. Als einer der jüngsten Vertretern der Gattung findet es sich bisher nur in den Repositories weniger Distributionen, etwa in dem von Arch Linux. Sie müssen das Programm daher in der Regel selbst konfigurieren und kompilieren. Der Kasten “Installation” zeigt, wie einfach das klappt.
Installation
Die Installation von Dte wirft keinerlei Probleme auf. Unter Arch Linux genügt dazu der Aufruf yay -S dte oder das Pendant in einem anderen AUR-Helper. Auf vielen anderen Systemen funktioniert das Kompilieren und Installieren mit den vier Zeilen aus Listing 1. Trotz minimaler Abhängigkeiten kann es vorkommen, dass für das Linken die Header der Curses-Library fehlen. Die installieren Sie unter Debian und dessen Ablegern inklusive Ubuntu und Derivaten mit apt install libncurses-dev.
Listing 1
$ curl -LO https://craigbarnes.gitlab.io/dist/dte/dte-1.8.2.tar.gz $ tar xzf dte-1.8.2.tar.gz $ cd dte-1.8.2 $ make && sudo make install
Dte orientiert sich an mehreren, in der Unix-Welt seit Langem bewährten Konzepten. So erinnert die Syntax für die Konfiguration an die der Sh und Bash. Der eingebaute Command Mode ähnelt jenem von Emacs, einige Git-spezifische Funktionen stammen aus demselben Umfeld. Ebenfalls Unix-typisch zeigt sich die Dokumentation, die in Form dreier Manpages sowie von Kommentaren in den Quelltexten beziehungsweise Konfigurationsdateien erfolgt.
Das alles macht die Arbeit mit dem Editor für Linux-erfahrene Anwender einfach und effektiv. Es gibt im Grunde wenig Neues zu lernen, die Konzepte sind im Wesentlichen einfach und klar.
|
Funktion |
Details |
|---|---|
|
Multiple Puffers/Reiter |
Dte kann viele Puffer als Reiter gleichzeitig öffnen. Nur die Größe des Terminalfensters beziehungsweise des zur Verfügung stehenden Speichers begrenzen die Anzahl. |
|
Unbegrenztes Undo/Redo |
Das Rückgängigmachen von Änderungen (Undo) ist ebenso wie das Aufheben des Rückgängigmachens (Redo) nicht eingeschränkt. |
|
Regex-Support |
Dte unterstützt beim Suchen und Ersetzen reguläre Ausdrücke. |
|
Syntax-Highlighting |
Für viele Programmiersprachen gibt es eingebaute Regeln zum Hervorheben. Für bisher nicht unterstützte Programmiersprachen erlaubt Dte, entsprechende Regeln manuell zu ergänzen. |
|
Konfigurierbare Optik |
Farbschemata und Tastenkombinationen lassen sich anpassen. |
|
Konfigurierbare Shortcuts |
Alle vom Terminal unterstützten Sondertasten lassen sich in Tastenkombinationen einbauen. |
|
Skripting |
Eine eingebaute Programmiersprache mit automatischer Komplettierung erlaubt das Ausführen aller intern vorhandener Funktionen. |
|
Encoding |
Dte unterstützt diverse Kodierungen für die Textdarstellung, inklusive Unicode 12.1. |
|
Ctags |
Zum Auffinden von Definitionen in Programmiersprachen greift Dte auf sogenannte Ctags zurück (siehe Kasten “Ctags”). |
|
Fehlersuche |
Dte wertet Compiler-Fehler aus und erlaubt, die fehlerhaften Codestellen direkt anzuspringen. |
Praxis
Nach dem Start sehen Sie ein leeres Editorfenster, wenn Sie das Programm ohne Argumente gestartet haben. Puffer entstehen als Kopien der in den Argumenten angegebenen Dateien (Abbildung 1). In der obersten Zeile sehen Sie die aktuell geöffneten Puffer in Form nummerierter Reiter. Beim Speichern überschreiben die Puffer die entsprechenden Dateien wieder.
![Abbildung 1: Geladene Dateien hält der Dte in Puffern vor, die er als Reiter darstellt. Mit [Alt]+[<span class="ui-element">Nummer</span>] wechseln Sie zwischen den Puffern.](/wp-content/uploads/2019/09/b01-buffers-300x165.jpg)
Abbildung 1: Geladene Dateien hält der Dte in Puffern vor, die er als Reiter darstellt. Mit [Alt]+[Nummer] wechseln Sie zwischen den Puffern.
Jeder Puffer ist durch einen nummerierten Reiter im Terminal gekennzeichnet. Ein Pluszeichen vor dem Puffernamen kennzeichnet veränderte Puffer. Sie wechseln mit der Tastenkombination aus [Alt] und der Puffernummer zwischen den Reitern. Den Inhalt der Zwischenablage nimmt das Programm dabei mit.
Bei der Texteingabe unterstützt Dte Unicode in der Version 12.1 und verwendet Iconv, um zwischen verschiedenen Textkodierungen zu übersetzen. In Unicode lassen sich viele spezielle Sonderzeichen direkt verwenden und bearbeiten (Abbildung 2).
Command-Modus
Eine der Besonderheiten von Dte ist der Command-Mode, als der Befehlszeilenmodus. Er ähnelt dem von Emacs und erlaubt den direkten Zugriff auf alle internen Funktionen. Viele dieser Funktionen sind bereits via bind an Tasten gebunden, allerdings bei Weitem nicht alle. Wollen Sie diese Funktionen nutzen, aktivieren Sie zunächst mit [Alt]+[X] den Command Mode. Am unteren Fensterrand öffnet sich nun ein Mini-Puffer zur Eingabe.
Dort komplettiert Dte Ihre Eingaben automatisch beim Betätigen der Tabulatortaste. Gibt es mehrere Funktionen, deren Name mit den bisher eingegebenen Buchstaben kompatibel sind, erscheint bei jedem [Tab] eine weitere Variante. Bereits aufgerufene Funktionen speichert Dte, sodass Sie sie mit den Pfeiltasten erneut auswählen und aufrufen können.
Die erste, invertiert dargestellte Zeile am unteren Bildschirmrand (Listing 2) enthält die Informationen zum aktuellen Puffer. Sie umfassen aus Dateinamen, die Position des Cursors im Puffer, den Code des Zeichens unter der Schreibmarke, die im Puffer verwendete Kodierung, die Art der Zeilenumbrüche, das für das Syntax-Highlighting verwendete Schema und eine der beiden Angaben Top und Bot. Letzteres erscheint nur, wenn sich der Cursor unmittelbar am Pufferende (“bottom”) befindet.
Listing 2
tst.tex 17,3 U+0025 UTF-8 LF tex Top :
Bedeutsam ist die Zeile darunter: Dort symbolisiert ein Doppelpunkt die Eingabeaufforderung und zeigt an, dass Sie nun interne Funktionen aufrufen können. Eine ganze Reihe intern vorhandener Funktionen ist gar nicht an Tasten gebunden, sodass Sie diese nur über diese Schnittstelle verwenden können.
So erscheint beim Beenden des Editors die Meldung Save modified files or run ‘quit -f’ to quit without saving., wenn noch ungesicherte Änderungen an einem oder mehreren Puffern vorliegen. [Alt]+[X] gefolgt von [Q]+[Tab] führt zu einem quit in der Eingabezeile. Das ergänzen Sie noch um [-]+[F] und beenden dann das Programm durch einen Druck auf die Eingabetaste, ohne den Puffer zu speichern.
Die Komplettierung der Funktionen implementiert Dte auf eine interessante Weise. Mit mindestens einem eingegebenen Buchstaben ergänzt der Editor alles, was er eindeutig aufgrund der Funktionsnamen erkennen kann. Ohne einen Buchstaben einzutippen, erhalten Sie dagegen nach jedem [Tab] eine weitere Funktion, wobei Dte die Liste alphabetisch durchgeht.
Die vom Dte bereitgestellten internen Funktionen decken einen weiten Bereich ab. Neben dem einfachen Öffnen (open) und Schließen (close) von Dateien – unter Berücksichtigung der verwendeten Kodierung – gibt es Möglichkeiten, Funktionen an Tasten zu binden (bind), alternative Namen durch Alias-Konstruktionen zu erzeugen (alias), externe Befehle auszurufen (filter) und vieles mehr. Alle Dte-Funktionen samt deren Optionen und Argumenten finden Sie im Syntax-Manual [4].
Man merkt Dte anhand der internen Funktionen an, dass das Programm primär für die Softwareentwicklung konzipiert wurde. An vielen Stellen finden sich interne Funktionen, die das unterstützen oder überhaupt erst ermöglichen. So bindet etwa include zusätzliche Dateien ein, und über compile übersetzen Sie den Pufferinhalt, wobei Dte auch die Ausgaben des Compilers analysiert. Die Funktion pass-through führt externe Befehle aus und fügt die Eingaben in den aktuellen Puffer ein; repeat führt Befehle mehrmals aus, und mit run setzen Sie direkt externe Befehle ab.
Viele von Dtes internen Funktionen führen eine eigene History. So behält Dte einmal eingegebene Suchmuster, ausgeführte Befehle und manuell aufgerufene Funktionen. Dasselbe gilt auch für die geladenen Dateien.
Das Programmieren unterstützt Dte noch auf andere Weise. Für viele Programmiersprachen gibt es ein vorkonfiguriertes Syntax-Highlighting. Daneben beherrscht der Editor das automatische Komplettieren angefangener Schlüsselwörter (Auto-Completion) für eingebaute Funktionen. Beim Suchen und Ersetzen lassen sich reguläre Ausdrücke verwenden. Definitionen, wie sie ctags findet, lassen sich im Dte verwenden. Treten beim Kompilieren Fehler auf, lässt sich der Cursor direkt zu der korrespondierenden Stelle im Quelltext versetzen.
Das alles bringt Dte bereits vorkonfiguriert mit. Zusätzlich lassen sich schnell eigene Funktionen entwickeln. Dazu stehen zwei interne Variablen zur Verfügung: $FILE repräsentiert die im aktuellen Puffer geladene Datei, $WORD steht für die durch Trennzeichen begrenzte Zeichenkette unter dem Cursor.
Auch bei normalen Textarbeiten erweist sich Dte als große Hilfe. Meist genügen die voreingestellten Tastenkürzel, um alle wesentlichen Arbeiten schnell zu erledigen. Die Tabelle “Voreingestellte Tastenkombinationen” fasst die wichtigsten Tastenkürzel zusammen.
|
Kürzel |
Funktion |
|---|---|
|
[Alt]+[X] |
Befehlszeilenmodus |
|
[Strg]+[Q] |
Dte beenden |
|
[Alt]+[Z] |
Dte suspendieren ( |
|
[Strg]+[N] |
neuen Puffer erzeugen |
|
[Strg]+[S] |
aktuellen Puffer speichern |
|
[Strg]+[W] |
aktuellen Puffer löschen |
|
[Alt]+[Nummer] |
zum entsprechenden Puffer wechseln |
|
[Alt]+[0] |
zum letzten Puffer wechseln |
|
[Alt]+[B] |
zum Pufferanfang springen |
|
[Alt]+[E] |
zum Pufferende springen |
|
[Alt]+[F] |
Wort unter dem Cursor finden |
|
[Strg]+[F] |
Suche |
|
[Strg]+[G] |
Suchen fortsetzen |
|
[F4] |
Rückwärtssuche |
|
[Umschalt]+[Pfeil-links] |
nach links auswählen |
|
[Umschalt]+[Pfeil-rechts] |
nach rechts auswählen |
|
[Umschalt]+[Strg]+[Pfeil-links] |
Wort links auswählen |
|
[Umschalt]+[Strg]+[Pfeil-rechts] |
Wort rechts auswählen |
|
[Umschalt]+[Pfeil-oben] |
vorige Zeile auswählen |
|
[Umschalt]+[Pfeil-unten] |
nächste Zeile auswählen |
|
[Strg]+[C] |
Auswahl kopieren |
|
[Strg]+[X] |
Auswahl ausschneiden |
|
[Strg]+[V] |
Zwischenablage einfügen |
|
[Strg]+[Z] |
Undo |
|
[Strg]+[Y] |
Redo |
|
[Alt]+[J] |
Absatz formatieren |
|
[Alt]+[T] |
Tabulator einfügen |
|
[Alt]+[Umschalt]+[0] |
Einrücktiefe erhöhen |
|
[Alt]+[-] |
Einrücktiefe verringern |
Befehlszeilenoptionen
Als terminalbasiertes Programm lässt sich Dte über Befehlszeilenoptionen steuern. Der Parameter -r Konfiguration bewirkt, dass Dte die im Argument angegebene Konfigurationsdatei anstelle der voreingestellten Datei ~/.dte/rc einliest und auswertet. -R verhindert das Einlesen und Ausführen einer Konfigurationsdatei, -B listet alle bekannten Konfigurationen auf (Listing 3).
Listing 3
$ dte -B
rc
compiler/gcc
compiler/go
binding/default
binding/shift-select
[...]
color/default
color/light
[...]
syntax/vala
syntax/xml
Der Schalter -b Konfiguration schreibt eine der bekannten Konfigurationen in die Standardausgabe, wo sie sich dann editieren oder als Template für eigene Konfigurationsdateien verwenden lässt. Die in den Ausgaben verwendeten Konfigurationsdateien nutzen interne Dte-Befehle und gehören in verschiedene Kategorien (siehe Tabelle “Kategorien für Konfigurationsdateien”).
|
Kategorie |
Konfiguration |
|---|---|
|
|
Definiert die Standard-Konfigurationsdatei und zeigt, welche weiteren Konfigurationen das Programm einliest. Hier lässt sich beispielsweise die Syntax für reguläre Ausdrücke erkennen, so wie sie Dte versteht. |
|
|
Steuert Compiler und definiert zumeist nur das Format von Fehlermeldungen sowie deren Auswertung. |
|
|
Definiert die Tastenbindungen, analog zur Shell. |
|
|
Legt die beim Highlighting verwendeten Farben und Muster fest. |
|
|
Definiert von der Syntax abhängige Muster. Diese Konfigurationen machen ausgiebigen Gebrauch von den eingebauten Dte-Befehlen |
Mit dem Schalter -c Kommando führen Sie nach dem Einlesen der Konfigurationsdatei zusätzlich den angegebenen Dte-Befehl aus und zeigen das Ergebnis an. -t Ctag Quellcode.c springt direkt zu einer über Ctag definierten Stelle im Code. Dafür braucht es allerdings die zuvor mittels ctags erzeugte Datei tags (siehe Kasten “Ctags”).
Bei Bedarf starten Sie mit -K den Editor in einen speziellen Debug-Modus, in dem er betätigte Tasten zusammen mit deren Tastaturcodes ausgibt. So binden Sie dann Funktionen an spezielle Tasten oder erzeugen trotz fehlender Konfiguration des Terminalemulators eigene Tastenbindungen. [Strg]+[D] beendet diesen Modus wieder (Listing 4).
Listing 4
$ dte -K
Press any key combination, or use Ctrl+D to exit
ä 0xE4
d 0x64
µ 0xB5
C-[ 0x100005B
[Strg][d]
EditorConfig
Bei EditorConfig [5] handelt es sich um ein abstraktes System aus Konfigurationsdateien, die es für verschiedene IDEs und Editoren gibt [6]. Es versucht, identische Kodierungsstile bereitzustellen, um die Arbeiten verschiedener Entwickler auf unterschiedlichen Plattformen so konsistent zu vereinen, dass sie nahtlos zusammenpassen. Als Basis für EditorConfig dient die spezielle Konfigurationsdatei ~/.editorconfig. Findet Dte diese Konfigurationsdatei, bindet es sie ein und passt sein Verhalten entsprechend an. Verbreitete Editoren wie Emacs und Vi gehen allerdings in Sache Konfiguration eigene Wege – dort müssen Sie das entsprechende Feature via Plugin nachrüsten.
Fazit
Klein, fein, sehr leistungsfähig – diese Liste beschreibt Dte ziemlich gut. Der Editor stellt in vielen Details sowohl Nano als auch Tilde in den Schatten. Sowohl in der Oberfläche als auch intern kennzeichnet eine klare Struktur das Programm. Mit seinen eingebauten Schnittstellen für Unicode und Git zeigt Dte, dass sich auch ein moderner Editor klein und effektiv bauen lässt.
Infos
- Nano: Karsten Günther, “Kleiner Spezialist”, LU 02/2018, S. 58, https://www.linux-community.de/40566
- Tilde: Karsten Günther, “Anpassungsfähig”, LU 07/2013, S. 60, https://www.linux-community.de/29328
- Dte-Homepage: https://craigbarnes.gitlab.io/dte/#dte
- Eingebaute Syntax-Regeln: https://gitlab.com/craigbarnes/dte/tree/master/config/syntax
- EditorConfig: https://editorconfig.org
- Unterstützte Editoren: https://github.com/editorconfig/editorconfig/wiki/Projects-Using-EditorConfig






