- Updates
- 2014-08-02: AutoHotkey-Konfiguration von Keith
- 2019-05-17: Warnung vor ac'tivAid und AutoHotkey als Ersatz
- 2021-08-05: Kommentar von Johannes zu Hammerspoon (macOS)
Diesen Tipp kann wirklich jeder Computerbenutzer (selbstverständlich immer auch die weiblichen Computerbenutzer einschließend!) in der täglichen Computerarbeit brauchen: das automatische Einfügen von Textbausteinen (Englisch: snippet).
Einsatzbeispiele
Als Klassiker schlechthin wird in diesem Zusammenhang die Schlußformel "Mit freundlichen Grüßen" genannt. Wenn man die nicht ohnehin schon in seiner Email-Vorlage fix mitgespeichert hat, ist das durch ein Textbaustein-Programm sehr einfach erledigt. Aus dem eingegebenen Kürzel "mfg" wird automatisch die Langform "Mit freundlichen Grüßen" erstellt.
Oftmals belassen es Anwender auch bei diesem Anwendungsfall, was ich sehr schade finde. Gibt es doch so viel praktische Dinge, die mit Textbausteinwerkzeugen effizienter und lustiger gestaltet werden können.
Zum Beispiel brauche ich oft meine Emailadresse in Dokumenten und so weiter. Mir ist das zu dumm, sie jedes Mal händisch zu tippen. Weiters finde ich Textbausteinwerkzeuge hierfür auch sehr ratsam, da gerade bei solchen Dingen Tippfehler fatal sein können. Deshalb habe ich auf das Kürzel "$$email" meine Email in der Form "Karl.Voit@Example.com" (Serviervorschlag!) in korrekter Groß- und Kleinschreibung parat.
Warum das doppelte Dollar-Zeichen in "$$email"? Ich definiere gerne Kürzel, die auch unter Umständen in normalem Text vorkommen können. Würde ich "email" auf meine Emailadresse vervollständigen lassen, könnte ich das Wort "email" nicht mehr tippen. Deshalb das "$$" davor, das nie in normalem Text vorkommt.
Ebenso praktisch sind Textbausteine für lange Bezeichnungen wie beispielsweise "Univ.-Prof. Dipl.-Ing. Dr.techn. Hans Wurst". Die Postanschrift habe ich mit "$$adr" getippt. Meine Bankverbindung per "$$bank".
Aber auch kurze Dinge sind mit Textbausteinen praktisch umzusetzen. Wer Arbeitskollegen hat, deren ausländischen Namen Dinge wie Hatscheks beinhalten weiß, dass das auf einer deutschen Tastatur einfach nicht funktioniert. In so einem Fall kopiert man sich ein Mal den korrekt geschriebenen Namen in den Textbaustein und setzt ein Kürzel dafür.
Meine Kreditkartennummer muss ich bei Online-Bestellungen eingeben. Spätestens hier sollte der Vorteil von Textbausteinwerkzeugen klar sein: diese lange Nummer möchte niemand gerne öfters abtippen wollen. Deshalb: "$$kkn" auf die Kreditkartennummer ändern lassen.
Sehr oft brauche ich das aktuelle Datum oder die aktuelle Uhrzeit in Form vom ISO 8601-Format wie "2014-05-15" oder eben "2014-05-15T09.01.36". Dies habe ich auf "$$dd" (Datum) und "$$tt" (Zeit) gemappt. Herrlich zum Einleiten von Dateinamen, wie ich sie gerne verwende.
Doch auch ganze Emails lasse ich gelegentlich von meinem Textbausteinwerkzeug schreiben: immer wiederkehrende Standardantworten auf häufig vorkommende Standardfrage "Wo finde ich XY?" werden mit Textbausteinen deutlich weniger lästig.
In die selbe Kerbe schlägt das Verwenden von Textbausteinen für komplette Vorlagen wie Gesprächsprotokolle, Workflows, und so weiter. Hier kann man sehr kreativ werden und sich das Leben deutlich erleichtern.
Je nach Anwendungsfall ergeben sich sehr viele Möglichkeiten. Beispielsweise können Software-Tester von Textbausteinwerkzeugen profitieren, wenn sie sich auf deren Standardfälle jeweils ein Kürzel definieren: Text mit vielen Umlauten und Sonderzeichen; sehr langer Text; Text mit bösen Scripts drinnen; und so weiter. Programmierer werden die Möglichkeit schätzen, Vorlagen für Klassen, Funktionen, Scripts, und so weiter nutzen zu können.
Gundbegriffe
Um die Werkzeuge schneller einteilen zu können, möchte ich kurz ein paar Begrifflichkeiten einführen, die ich mir mal definiert habe.
Grundsätzlich unterscheide ich zwischen statischen, dynamischen und interaktiven Textbausteinwerkzeugen. Statische Textbausteine ersetzen eine bestimmte Zeichenfolge mit einer anderen, die immer gleich ist. Im Gegensatz dazu können dynamische Textbausteine eine bestimmte Zeichenfolge wie "$$dd" mit dem aktuellen Datum ersetzen, das bekanntlich jeden Tag anders ist.
Noch einen Schritt weiter gehen interaktive Textbausteine, die den Anwender während des Einfügens diverse Dinge fragen. Damit sind beispielsweise Textbausteine für Protokolle möglich, wo der Anwender nach dem Ort, die beteiligten Personen, das aktuelle Thema und so weiter gefragt wird und damit das Protokoll interaktiv vorausgefüllt wird. Mit dieser Methode ist es möglich, Teile wie das Thema an mehreren Stellen einzufügen, ohne, dass man sie mehrfach tippen muss.
Eine andere Art, Textbausteinwerkzeuge zu unterscheiden ist über deren Wirksamkeitsbereich: Einige Lösungen funktionieren nur in einem bestimmten Programm. Andere Lösungen bieten die Funktionalität in allen Programmen an und arbeiten somit auf Betriebssystem-Ebene.
Empfehlungen
Für Textbausteinlösungen gibt es viele Produkte. Das bekannteste wird wohl die AutoText-Funktion von Microsoft Word. Ich persönlich halte davon jedoch nichts, da ich Lösungen bevorzuge, die mir auf Betriebssystem-Ebene in jeder Anwendung zur Verfügung stellen.
Windows: HotStrings
Update 2019-05-17: ac'tivAid ist leider seit vielen Jahren tot. Aus diesem Grunde kann ich HotStrings, das Teil vom ac'tivAid-Paket war, keinesfalls mehr empfehlen. Ich bin vor kurzem selbst auf AutoHotkey umgestiegen, das von HotStrings unter der Haube verwendet wurde. Mehr dazu im folgenden Kapitel.
Windows: AutoHotkey
AutoHotkey ist ein sehr praktisches Werkzeug für Windows um Dinge zu automatisieren. Es ist etwas "geeky" zu konfigurieren, da man seine Befehle in eine Textdatei "programmieren" muss. Doch für simple Snippets sollte diese Anleitung helfen.
Nach der Installation von AutoHotkey findet man in seinem Benutzerordner unter Dokumente
die Datei AutoHotkey.ahk
. Das ist die Datei, wo AutoHotkey beim Starten die Konfiguration ausliest. Diese Datei kann man beispielsweise in Notepad laden, ändern und speichern.
Hier wird erklärt, wie man AutoHotkey bei jedem Systemstart automatisch starten lässt.
Meine Konfiguration enthält beispielsweise die Definition für das aktuelle Datum mit dem Kürzel $$dd
und die aktuelle Uhrzeit mittels $$tt
:
:c*:$$dd:: ; This hotstring replaces "$$dd" with the current date via the commands below. FormatTime, CurrentDateTime,, yyyy-MM-dd SendInput %CurrentDateTime% return :c*:$$tt:: ; This hotstring replaces "$$tt" with the current date via the commands below. FormatTime, CurrentDateTime,, yyyy-MM-ddTHH.mm.ss SendInput %CurrentDateTime% return
Einfache Wörter oder einzeilige Phrasen definiere ich case-sensitive (mit dem c
) wie folgt:
:c*:$$email::K.Voit@example.com :c*:$$handy::0043/123/456 789 012 :c*:$$str::Meine Straße 42a :c:todd::Todd Belilankowytsch
Der fehlende Stern bei der letzten Definition sagt AutoHotkey, dass für das Ausführen der Ersetzung ein Wort-Ende-Zeichen (Leerzeichen) erforderlich ist.
Mehrzeilige Phasen definiert man etwas anders:
; Meeting template :c*:$$mt:: datum = %A_Now% FormatTime, datum, %datum%, yyyy-MM-dd Send, %datum% Meeting for FIXXME{ENTER}{ENTER} Send, Attendees: (remove non-attending persons){ENTER} Send, - Peter{ENTER} Send, - Paul{ENTER} Send, - Mary{ENTER} Send, - Karl Voit{ENTER} Send, {ENTER} Send, Meeting Minutes:{ENTER}{TAB}- return
Doch nicht nur Snippets liefert mir AutoHotkey. Mit dem folgenden Teil meiner Konfiguration kann ich beliebige Fenster mittels Alt-F1
bis Alt-F3
auf meine drei Monitore im Büro platzieren, deren gewünschte Zielposition ich mittels AutoHotkey Windows Spy vorher ausgelesen habe:
!F1::WinMove, A, ,-1927, 633, 1550, 848 !F2::WinMove, A, ,-8, -8, 1216, 1906 !F3::WinMove, A, ,1192, 651, 1696, 1036
Keith Andrews hat mir per Email seine Konfiguration von AutoHotkey zukommen lassen, die ich hier gerne etwas gekürzt als Update einfügen möchte:
; ; Keith Andrews main ahk script ; ; +q means Shift-q ; ^q means Ctrl-q ; !x means Alt+x ; #g means Win+g ; ;; ::em1::kandrews@example.com ;; ::lgk::{Enter}{Enter}lg{Enter}{Enter}Keith{Enter} ; Some useful hotkeys ^F3:: ; Ctrl-F3 IBAN SendInput AT28380000000xxxxxxx return ^F4:: ; Ctrl-F4 BIC SendInput RZSTATxx return ^F7:: ; Ctrl-F7 office phone number SendInput {+}43-316-873-xxxx return ^F8:: ; Ctrl-F8 mobile phone number SendInput {+}43-664-xxxxxxx return ^F9:: ; Ctrl-F9 iso date stamp FormatTime, CurrentDate,, yyyy-MM-dd SendInput %CurrentDate% return ^F10:: ; Ctrl-F10 iso date+time stamp FormatTime, CurrentTime,, yyyy-MM-dd HH:mm SendInput %CurrentTime% return ^F11:: ; Ctrl-F11 SendInput kandrews@example.com return ^F12:: ; Ctrl-F12 SendInput lg{Enter}{Enter}Keith{Enter} return
GNU/Linux: AutoKey
AutoKey bietet unter GNU/Linux statische und dynamische Textbausteine auf Betriebssystem-Ebene. So ungefähr alle zwei Monate muss ich es neu starten weil es nicht mehr reagiert. Ansonsten funktioniert es wunderbar.
Für GNU/Linux gibt es auch noch TextSuggest, das ich allerdings noch nicht selbst ausprobiert habe. Es scheint aber nur ein statisches Textbausteinwerkzeug zu sein.
macOS: (derzeit keine Empfehlung)
Am Apple benutzte ich vormals ein Tool, das mittlerweile leider kostenpflichtig geworden ist. Ich habe bislang noch keinen freien Ersatz gefunden. Ich freue mich über Kommentare und Emails, wenn du einen Tipp für mich hast!
Würde ich mehr auf macOS arbeiten, würde ich natürlich auch keine kostenpflichtige Lösung überlegen. Derzeit habe ich dazu keine wirkliche Notwendigkeit.
Wem statische Textbausteine ausreichen, der kann sie mittels "Systemsteuerung" → "Tastatur" → "Text" definiert werden.
GNU Screen
In der Textkonsole verwende ich gerne GNU Screen als Terminal-Multiplexer. Dieser bietet mit bindkey
eine Funktion für Textbausteine innerhalb von allen GNU Screen Shells:
Beispiel-Textbaustein aus meiner .screenrc
bindkey -t "$$url" stuff "http://Karl-Voit.at/"
Dynamische Textbausteine sind ebenso möglich mit einer Indirektion über externe Scripts:
bindkey "$$dd" eval "screen /home/karl/bin/datestamp"
Das hier aufgerufene Script datestamp
schaut so aus:
#!/bin/bash TEMPFILE_RAW=/var/tmp/datestamp_raw_$$_$USER TEMPFILE_FINAL=/var/tmp/datestamp_final_$$_$USER /bin/date +%Y-%m-%d > "$TEMPFILE_RAW"; \ cat "$TEMPFILE_RAW" | tr -d '\n' > "$TEMPFILE_FINAL"; \ screen -X bufferfile "$TEMPFILE_FINAL"; \ screen -X readbuf rm "$TEMPFILE_RAW" "$TEMPFILE_FINAL" #end
Weil ich ohnehin auf allen meinen Rechnern, mit denen ich ernsthaft arbeite, ein Textbausteinwerkzeug auf Betriebssystem-Ebene betreibe, verwende ich bindkey
auf GNU Screen nicht mehr.
Emacs: yasnippet
Die bislang mächtigste Lösung für Textbausteine, die ich benutzen durfte, war yasnippet am Emacs Editor. Es ist zwar "nur" auf Programm-Ebene, aber dafür mit seinen statischen, dyanmischen und interaktiven Textbausteinen extrem mächtig. Da ich selber ohnehin meistens im Emacs "lebe", verwende ich für alle komplexen Textbausteine yasnippet: Packlisten, interaktive Vorlagen für komplette Kursorganisationen, und so weiter. Es liefert mir einfach alles, was ich mir hier wünschen kann.
Mittels yankpad kann man die Textbausteine auch in einer Org mode Datei verwalten.
Android: Inserty
Auch am Android-Smartphone gibt es so etwas ähnliches in Form von Inserty. Es ist allerdings etwas anders gestrickt: man wählt in der App Inserty aus einer Liste von Bausteinen einen aus, der in die Android-Zwischenablage geschrieben wird. Danach wechselt man wieder in die Anwendung, wo man den Baustein einsetzen möchte und holt sich den Textbaustein aus der Zwischenablage. Verwende ich eigentlich nicht mehr.
Vermutlich gibt es auch einige Android-Tastaturen, die eine Textbausteinfunktion eingebaut haben. Ich freue mich über Kommentare und Emails mit Tipps hierzu.
Fazit
Textbausteine erleichtern das tägliche Leben auf so vielen Ebenen, sodass sich jeder bei der Nase nehmen sollte, wenn noch keine Lösung hierzu im Einsatz ist.
Weniger Zeit für dumme, fehleranfällige Dinge und mehr Zeit für spannende Sachen!
Kommentar Johannes Marbach zu Hammerspoon
Hi Karl,
Super Artikel. Für macOS gibt es Hammerspoon als AutoHotKey-Alternative. Ist aber glaube ich nicht ganz so mächtig und braucht etwas mehr händischen Aufwand.
Viele Grüße Johannes
Ich fand Hammerspoon auf GitHub. Installierbar offenbar auch per Homebrew.