Der Textexpander Espanso arbeitet plattformübergreifend und kann weit mehr, als einfach nur Textbausteine zu ersetzen.
Ein Textexpander ersetzt vordefinierte Kürzel durch hinterlegte Textbausteine. Das wohl bekannteste Beispiel ist mfg, das nach der Eingabe des Kürzels zu mit freundlichen Grüßen expandiert. Das von mir bis vor einem Jahr genutzte Werkzeug Autokey [1] genügte nicht mehr, da es lediglich unter Linux und dort nur unter X11 funktioniert – Wayland bleibt außen vor.
Als Alternative steht seit 2019 Espanso [2] bereit, das über das einfache Ersetzen von Textkürzeln hinausgeht. Der in Rust verfasste Textexpander läuft unter Linux, MacOS und Windows. Sie installieren die Anwendung unter Linux für Debian, Ubuntu und weitere Derivate über ein DEB oder als selbst erstelltes Binärpaket. Außerdem gibt es Appimages und Pakete für Snap. Nur über das Arch Linux User Repository (AUR) erstellen Sie Espanso direkt. Für alle nicht direkt unterstützten Distributionen nutzen Sie das Appimage oder ein selbst erstelltes Paket. Hier wollen die Entwickler mit der Zeit noch nachbessern.
Zunächst sollten Sie mithilfe des Befehls echo $XDG_SESSION_TYPE überprüfen, ob das System X11 oder Wayland als Sitzungsart verwendet. Je nach Ergebnis müssen Sie jeweils andere Pakete oder einen anderen Quelltext auswählen, wie die Installationsanweisung [3] beschreibt. Listing 1 zeigt das Einrichten des DEB-Packages unter X11. Dazu laden Sie das Paket zunächst herunter, installieren es dann via Apt und testen, ob die Installation glatt über die Bühne ging (Zeile 1 bis 3). Zuletzt machen Sie Espanso noch als Dienst bei Systemd bekannt (Zeile 4ff.).
Listing 1
Espanso installieren
$ wget https://github.com/federico-terzi/espanso/releases/download/v2.1.7-beta/espanso-debian-x11-amd64.deb $ sudo apt install ./espanso-debian-x11-amd64.deb $ espanso status $ espanso service register service file already exists, this operation will overwrite it creating service file in "~/.config/systemd/user/espanso.service" enabling systemd service service registered correctly
Anschließend rufen Sie das Tool mit dem Kommando espanso start auf. Nachdem das Begrüßungsfenster geschlossen ist, gibt es unter Linux kein weiteres Zeichen von Espanso auf dem Desktop, während bei MacOS und Windows ein Icon in der Bedienleiste erscheint. Einen Überblick über die Befehle, mit denen Sie Espanso steuern können, liefert espanso -h (Abbildung 1).

Abbildung 1: Mit den Aufrufparametern -h oder --help werfen Sie einen Blick auf die verfügbaren Optionen.
In seiner Funktion als Textersetzer erkennt das Werkzeug, wenn Sie ein Schlüsselwort in der Form :Schlüsselwort eingegeben haben, und tauscht es gegen den hinterlegten Text aus. Geben Sie beispielsweise :espanso ein, lautet die korrekte Antwort Hi there!. Espanso ersetzt Kürzel überall dort, wo Sie sie schreiben können, auch in der Shell.
Sie konfigurieren die Anwendung in mehreren Dateien unterhalb von ~/.config/espanso. Die Datei default.yml im Ordner config/ enthält globale Einstellungen, die Sie durch Entfernen des vorangestellten Rautezeichens aktivieren. Aber Vorsicht: YAML verzeiht keine Fehler, was Einrückungen angeht.
Konfiguration in YAML
Über den Befehl espanso edit öffnen Sie die Konfigurationsdatei. Allerdings sollten in der zu ersetzenden Zeichenkette möglichst weder Umlaute noch das Eszett (“ß”) vorkommen: Deren Ersetzung funktioniert zwar in einigen Apps, in anderen aber nicht. Nachdem die Konfigurationsdatei ebenfalls in YAML geschrieben ist, müssen Sie erneut auf die Einrückungen achten. Halten Sie sich dabei einfach an die vorgegebenen Beispiele.
Beim Speichern von Änderungen zeigt Espanso ein Popup-Fenster, in dem Sie die Aktion noch einmal bestätigen müssen. Ist Ihnen ein Fehler unterlaufen, informiert Sie eine entsprechende Meldung darüber, an welcher Stelle und in welcher Zeile er sich eingeschlichen hat (Abbildung 2).

Abbildung 2: Tritt bei einer Änderung ein Fehler auf, erhalten Sie nach dem Speichern eine Meldung mit Hinweis auf die Zeile und Position des Fehlers.
Im Ordner match/ legen Sie fest, was Espanso wie ersetzen soll. In der Datei /match/base.yml gibt Ihnen das Tool einige einfache Beispiele für Ersetzungen vor (Abbildung 3). Deren Definition erfolgt über das Wertepaar trigger und replace. Dabei bezeichnet trigger den String, der den Austausch anstößt, während replace die Ersetzung selbst enthält. Ein einfaches Beispiel sieht etwa so aus:
- trigger: ":hg" replace: "Herzliche Grüße,"

Abbildung 3: Die Datei base.yml enthält einige Beispiele. Sie können sie mit eigenen Ersetzungen erweitern oder selbst themenbezogene Dateien anlegen.
Ein weiteres Beispiel, das häufig am Ende von Briefen und E-Mails vorkommt, zeigt eine Ausgabe auf zwei Zeilen.
- trigger: ":lg" replace: "Liebe Grüße,/nPeter"
Neben /n zum Erzeugen einer neuen Zeile kommen bei YAML die beiden Operatoren | und > zum Einsatz, sobald mehr als zwei Zeilen ins Spiel kommen. Mit | als erstem Operand hinter replace gibt Espanso den Text genauso aus, wie Sie ihn schreiben. Die drei Zeilen aus Listing 2 erscheinen dementsprechend auch als drei Zeilen. Ersetzen Sie hier | durch >, bildet die Anwendung den Ersetzungstext als eine Zeile ab. Mehr zu diesen sogenannten Skalaren bei YAML erfahren Sie auf Stackoverflow [4].
Listing 2
Operand |
- trigger: "drei"
replace: |
so wie es hier steht,
wird es auch
ersetzt
Statisch oder dynamisch?
Espanso unterscheidet zwischen statischen und dynamischen Ersetzungen. Die bisher beschriebenen Beispiele zählen zur Kategorie statisch, ihre Ausgabe bleibt immer gleich. Ein typisches Beispiel für eine dynamische Ersetzung ist dagegen die Ausgabe der aktuellen Tageszeit. Dazu erweitert Espanso das Konzept um Variablen.
Das Beispiel aus Listing 3 führt in der Ersetzung die von mir so benannte Variable zeit ein, deklariert sie im Weiteren als vom Typ date und versieht sie mit entsprechenden Parametern für die Ausgabe. Ein ähnliches bereits in /match/base.yml vorhandenes dynamisches Beispiel ist die Ausgabe des Datums. Die Ersetzung lässt sich schnell an das deutsche Standardformat anpassen. Dazu ändern Sie den String format: "%m/%d/%Y" zu format: "%d/%m/%Y". Geben Sie nun :date ein, erhalten Sie Tag und Monat in der gewohnten Reihenfolge.
Listing 3
Variablen nutzen
- trigger: ":now"
replace: "Es ist {{zeit}}"
vars:
- name: zeit
type: date
params:
format: "%H:%M"
Mit Espanso definieren Sie neben kurzen Ersetzungen auch ganze Sätze oder längere Texte. Damit die Standardkonfiguration nicht zu unübersichtlich wird, empfiehlt es sich, bei steigender Zahl der Textbausteine mehrere YAML-Dateien wie match/emails.yml oder match/code.yml anzulegen.
Globale Variablen
Ein Anlass, eine neue YAML-Datei zu erstellen, bieten globale Variablen, die Sie dann in mehreren Ersetzungen verwenden können. Sie legen globale Variablen zuoberst in einer YAML-Datei fest. Anschließend stehen sie für alle Ersetzungen zur Verfügung, die in dieser Datei und ihren Unterdateien definiert sind. Espanso erweist sich außerdem als nützlich, wenn Sie bestimmte Worte häufig mit einem Buchstabendreher tippen, also zum Beispiel oft eilsaufen anstatt eislaufen schreiben. Hier kommt der Parameter true zum Einsatz, wie Sie der ausführlichen Dokumentation entnehmen können [5].
Schreiben Sie gern Code, unterstützt Sie Espanso auch dabei. Wie Sie etwa das HTML-Tag-Paar <div></div> ersetzen, finden Sie anhand des bisher Gesagten sicher alleine heraus. Aber wie bekommen Sie den Cursor in die Mitte anstatt ans Ende? Dazu dient das Kürzel $|$, wie die ersten beiden Zeilen in Listing 4 zeigen.
Listing 4
Beispiele für Trigger
- trigger: ":div" replace: "<div>$|$</div>" - trigger: ":quote" replace: "Tue, was dir Spaß macht und du arbeitest keinen Tag in deinem Leben." - trigger: ":quote" replace: "Was du heute kannst besorgen, das verschiebe nicht auf morgen." - trigger: ":quote" replace: "Was immer du tust, mach es gut." - trigger: ":cat" image_path: "/Pfad/zum/Bild.png"
Nützlich ist zudem, dass Sie mithilfe des Parameters quote mehrere Ersetzungen mit identischem Auslöser festlegen können (Listing 4, Zeilen 3 bis 8). Geben Sie den Trigger :quote ein, können Sie auswählen, welches Zitat Sie nutzen möchten (Abbildung 4). Damit setzen Sie zum Beispiel mehrere Grußformeln in verschiedenen Sprachen um. Bei Bedarf kann Espanso zudem Bilder triggern (Zeile 9 und 10) sowie verschiedene Formulare erstellen [6].

Abbildung 4: Bei Espanso dürfen mehrere Ersetzungen denselben Auslöser haben. Der Trigger :quote zeigt dann ein Fenster, in dem Sie per Tastenkombination das Gewünschte auswählen.
Pakete
Von anderen Anwendern erstellte Ersetzungen verwenden Sie mithilfe des Konzepts der Espanso-Pakete wieder. Dazu bringt die Software einen eigenen Paketmanager mit, der vorrangig mit dem Espanso Hub (Abbildung 5) im Web zusammenarbeitet, aber auch andere Quellen akzeptiert. Die Espanso-Hub-Webseite [7] sortiert die Pakete, die Nutzer dort eingestellt haben, nach Anwendungen oder Einsatzzwecken. Dazu gibt es eine eigene Dokumentation [8]. Im einfachsten Fall installieren Sie ein Paket mit dem Befehl espanso install Paket.

Abbildung 5: Der Web-Dienst Espanso Hub ermöglicht, Pakete mit Ersetzungen zu verschiedenen Themenbereichen einzubinden, die von anderen Anwendern eingestellt wurden. Dafür bringt Espanso einen eigenen Paketmanager mit.
Neben dem Espanso Hub gibt es weitere Repositories von Anwendern [9]. Zunächst habe ich das Paket html-utils aus dem Hub installiert. Im Gegensatz zu selbst erstellten Ersetzungen triggern hier zwei Doppelpunkte die Ersetzung, wie in ::div. Die Konfiguration des Pakets findet sich unter ~/.config/espanso/match/packages.
Zudem habe ich das aus dritter Hand stammende Repository espanso-config [9] eingebunden. Hier fällt die Installation etwas aufwendiger aus. Zunächst müssen Sie das Repository von Github mit dem Befehl aus der ersten Zeile in Listing 5 ins eigene Heimatverzeichnis klonen. Danach findet sich dort das Verzeichnis espanso-config/, das Sie mittels eines symbolischen Links in Espanso einbinden (zweite Zeile). Dort liegt dann die YAML-Dateien mit teils recht nützlichen Ersetzungen.
Listing 5
Repo einbinden
$ git clone https://github.com/Lissy93/espanso-config.git $ ln -s ~/espanso-config ~/.config/espanso/match/packages
Fazit und Ausblick
Die Bezeichnung Textexpander greift für Espanso viel zu kurz. Das Programm bietet nicht nur funktional mehr als die Konkurrenz, sondern läuft plattformübergreifend und kommt unter Linux sowohl mit X11 als auch mit Wayland zurecht. Das Werkzeug ist hervorragend dokumentiert, eine einmal erstellte Konfiguration lässt sich mit anderen Systemen und Plattformen synchronisieren [10]. In rund einem Jahr Nutzung traten bei mir bisher keine Fehler zutage.
Angesichts der Tatsache, dass Espanso erstmals im September 2019 erschien und ein kleines Team das Tool in der Freizeit weiterentwickelt, wirkt die hier nur angerissene Funktionsfülle immens groß. Damit ist allerdings das Ende der Fahnenstange keineswegs erreicht, wie die Roadmap aufzeigt [11]. An oberster Stelle steht eine GUI. Sie soll Anwender ins Boot holen, die die Kommandozeile scheuen oder mit dem nörgeligen YAML nicht zurechtkommen. Danach steht eine Version für Android auf dem Plan.
In meinen Augen bietet Espanso ein Paradebeispiel dafür, was freie Software leisten kann. Die Software braucht den Vergleich mit kommerziellen Produkten nicht zu scheuen, ganz im Gegenteil. Wenn Sie Espanso einsetzen, dann unterstützen Sie das Projekt bitte nach Möglichkeit mit einer Spende. (csi/jlu)
Infos
-
Autokey: https://github.com/autokey/autokey
-
Espanso: https://espanso.org/
-
Installation: https://espanso.org/docs/install/linux/#choosing-the-right-install-method
-
Syntax: https://stackoverflow.com/questions/3790454/how-do-i-break-a-string-in-yaml-over-multiple-lines
-
Dokumentation: https://espanso.org/docs/matches/basics/
-
Formulare: https://espanso.org/docs/matches/forms/
-
Espanso Hub: https://hub.espanso.org/search
-
Repositories: https://github.com/Lissy93/espanso-config
-
Synchronisation: https://espanso.org/docs/sync/





