Auf den ersten Blick scheint Geany nur ein Texteditor zu sein. Bei genauerem Hinsehen bringt das Programm besondere Fähigkeiten für das Bearbeiten von einfachen Skripten und Programmen mit.
Zu den zahllosen für Linux verfügbaren Texteditoren gehört auch Geany [1]. Das Tool beherrscht fast alles, was ein Editor leisten soll, bietet darüber hinaus aber eine einfache integrierte Entwicklungsumgebung (IDE). Einige Zusatzfunktionen erleichtern die Arbeit mit Texten aller Art. Diejenigen, die auch unter Windows arbeiten müssen, brauchen sich nicht umzugewöhnen: Geany läuft dort ebenfalls.
Der Texteditor öffnet nur Dateien, die er auch darstellen kann. Binärdateien mit Null-Bytes ignoriert er ohne Fehlermeldung. Beim ersten Aufruf einer Textdatei macht sich vermutlich zunächst Unbehagen breit: Ein langer Text scheint auf wenige Zeilen geschrumpft. Das liegt an der Standardeinstellung des Programms, in der es jeden Absatz in einer Zeile anzeigt. Für eine schnelle Übersicht genügt das; zum Bearbeiten empfiehlt es sich allerdings, auf einen automatischen Zeilenumbruch umzustellen. Den Schalter dafür finden Sie unter Document | Line Wrapping.
Dieses Menü rettet außerdem so manche Datei, deren Umlaute vermeintlich durcheinandergekommen sind. Die meisten Systeme verwenden heute UTF-8 als Standardkodierung für Zeichen. Es stellt ASCII-Zeichen durch ein Byte dar, alle anderen durch zwei oder mehr Bytes. Erscheint statt eines Buchstabens wie dem Ö ein unerwartetes Symbol, typischerweise ein Fragezeichen auf schwarzem Grund, handelt es sich nicht um eine UTF8-Kodierung. Dann hilft ein Blick auf Document | Set Encoding. Indem Sie auf Ein-Byte-Kodierungen wie Western European (ISO 8859-1) umstellen, können Sie die Darstellung korrigieren.
Abbildung 1 zeigt die typische Aufteilung des Editors in drei Bereiche. Der Text rechts im Fenster zeigt sowohl Umlaute als auch unerkannte UTF8-Symbole – kein gutes Omen für eine Wiederherstellung des Texts. Auf Details dazu gehen wir später ein.

Abbildung 1: Der Inhalt des Textbereichs rechts lässt auf eine gescheiterte Textkodierung mit gemischten UTF-8- und ISO-8859-1-Zeichen schließen.
Wagenrücklauf
Schreibmaschinen und alte Teletypes erwarteten zwei Steuerbefehle, um eine neue Zeile anfangen zu lassen: einen für den Wagenrücklauf (Carriage Return, CR) und einen für Papiervorschub (Linefeed, LF). Diese Zwei-Zeichen-Kodierung für eine neue Zeile war unter Windows lange Standard, während Linux sich seit jeher mit einem einfachen Linefeed begnügt – eines der Hauptprobleme, warum in der Vergangenheit der Dateiexport von Linux zu Windows Probleme bereitete. Die Einstellung dazu finden Sie im Menü Document | Set Line Endings.
Durch einen Klick im Menü View | Show Line Endings erscheinen in Geany die Zeilenende-Marker. Die anderen Einstellungen unter View erklären sich weitgehend von selbst. Das Aktivieren von Show Message Window und Show Sidebar scheint zunächst nichts zu bewirken. Bewegen Sie den Mauszeiger an den linken beziehungsweise unteren Rand des Programmfensters, ändert er sich zu einem senkrechten oder horizontalen Strich, mit dessen Hilfe Sie die genannten Bereiche auf die gewünschte Größe ziehen. Im Message Window unten erscheinen je nach Konfiguration Fehlermeldungen oder Notizen, in der Sidebar links andere übergeordnete Informationen und Links.
Textbearbeitung
Suchen und Ersetzen beherrschen nahezu alle Editoren, nicht aber das Bearbeiten senkrecht begrenzter Textblöcke. Über [Strg]+[Umschalt] und entsprechendes Markieren löschen oder kopieren Sie bei Geany Textspalten. Mit wenigen Handgriffen erhält beispielsweise jeder Absatz zu Beginn den Einschub “Absatz: “. Dazu erstellen Sie im ersten Schritt mehrere Hilfszeilen mit dem Inhalt “Absatz: “. Anschließend markieren Sie sie als Spalte statt als normalen Text, kopieren sie und fügen die kopierte Spalte am Anfang der ersten Zeile ein.
Auch reguläre Ausdrücke beherrscht Geany. Als Beispiel soll das Tool in Abbildung 2 alle Ausdrücke finden, die mit der Buchstabenfolge “mini” beginnen und mit einer Klammer oder einem Leerzeichen enden. Der entsprechende Regex mini(.*?)([( ]) bedeutet: Finde die Zeichenkette “mini”, gefolgt von beliebigen Zeichen, abgeschlossen mit einem Zeichen, das innerhalb der eckigen Klammern steht (hier eine runde Klammer oder ein Leerzeichen). Die runden Klammern um .*? und um die eckigen Klammern formen jeweils eine Gruppe, die sich beim Ersetzen mit \1 beziehungsweise \2 referenzieren lässt.
Der Non-Greedy-Operator .*? stellt sicher, dass die Suche nach beliebigen Folgezeichen nicht bis zum letzten Leerzeichen ausdehnt wird, sondern Geany sich mit der kürzesten Lösung zufriedengibt. Im Beispiel passen beispielsweise miniprog( und minidemo** auf die reguläre Suche. Hingegen ergibt minipro keinen Treffer, da dem Wort kein Leerzeichen folgt.
Im Beispiel aus Abbildung 2 ersetzt Geany die Fundstellen nicht einfach, sondern stellt den gefundenen Treffer um. Der Ausdruck zwischen mini und dem Leerzeichen oder einer öffnenden Klammer wird vorangestellt und mini durch maxi ersetzt.
Gemäß der Syntax für reguläre Ausdrücke übernehmen diese Aufgabe die beiden Klammern im Suchstring. Die erste Klammer erhält den Zwischenausdruck, die zweite Klammer das Abschlusszeichen. Im Ersetzungs-Regex steht die Abkürzung \1 für den Inhalt der ersten Klammer, \2 für den der zweiten. Der Ausgabe-Regex \1maxi\2 formt miniprog( zu progmaxi( und minidemo** zu demomaxi** um.
Plugins
Plugins erweitern die Fähigkeiten des Editors. Einige Erweiterungen bringt Geany bereits mit, andere beziehen Sie via Internet [2]. Um die Plugins zu verwalten, aktivieren Sie im Menü den Punkt Tools | Plugin Manager und nehmen gegebenenfalls unter Edit | Plugin Preferences Anpassungen vor. Der XML Pretty Printer beispielsweise erzeugt schöne Zeilenumbrüche in einem XML-Code. Die Erweiterung Export hingegen speichert farblich ausgezeichneten Text als LaTeX- oder HTML-Datei, File Browser holt eine Verzeichnisübersicht in die linke Fensterspalte. Von dort startet ein Programm wie der Hex-Editor Ghex [3] aus Abbildung 1. Die Einstellung des Programmnamens erwartet Geany in den Plugin-Präferenzen als ghex -g 1024x768 "%f".
Wie die Hexadezimaldarstellung aus Abbildung 3 veranschaulicht, kommt die Rettung für den oben gezeigten Demotext zu spät. Alle Umlaute wurden durch EF BF BD ersetzt, den UTF-8-Fehlercode für Symbole, die sich nicht im UTF-8-Zeichensatz darstellen lassen. Die ersten drei Bytes des Beispieltexts formen die Byte Order Mark (BOM) EF BB BF, die den Text als UTF-8-formatiert ausweist. Öffnet ein Benutzer die Datei in einem Editor, der UTF nicht kennt, zeigt er diese drei Bytes als ANSI-Umsetzung im Textfenster an.

Abbildung 3: Hier bleibt nichts mehr zu retten: der Hex-Dump zum Text aus Abbildung 1.
Wer keine eigenen Plugins in der Sprache C programmieren möchte [4], greift auf eine vereinfachte Schnittstelle zurück. Geany kann Textblöcke an ein Programm übergeben und sie durch die Rückgabewerte ersetzen. Um beispielsweise Zeilen zu sortieren, schreiben Sie wie in Abbildung 4 den Linux-Befehl sort [5] ins Feld Command unter Format | Send Selection to | Set Custom Command. Ein Druck auf [Strg]+[ 1] führt das Kommando aus, sofern Sie vorher den gewünschten Text markiert haben.
Alternativ wollen Sie Textabschnitte nicht nur wie oben mit dem Wort “Absatz” auszeichnen, sondern auch durchnummerieren. Diese Aufgabe übernimmt das Python-Skript aus Listing 1. Dazu speichern Sie das Progrämmchen innerhalb des Pfadbereichs und informieren Geany via Set Custom Commands über den Aufrufnamen. Behalten Sie die Standardtastaturbelegung bei, startet der Editor durch Eingabe von [Strg]+[ 2], wenn Sort wie im Beispiel schon den ersten Platz belegt (Abbildung 4).
Listing 1
Python-Skript
import fileinput
i = 0
with fileinput.input() as fp:
for line in fp:
i += 1
print(f"Absatz {i}: {line}", end="")

Abbildung 4: Geany schickt markierten Text an die Konsole und überschreibt ihn mit dem Rückgabewert.
Entwicklungsumgebung
Hinter Geany als Texteditor verbirgt sich zusätzlich eine einfache, aber dennoch leistungsfähige integrierte Entwicklungsumgebung (IDE). Die Programmiersprache erkennt das Tool an der Dateiendung (Abbildung 5) oder über einen Hinweis unter Document | Set File Type. Erst nachdem Geany die passende Sprache erkannt hat, steht das richtige Definitionsfenster unter Build | Set Build Command bereit (Abbildung 6). Dort erwartet das Programm Eingaben, wo es den zugehörigen Interpreter respektive Compiler findet.
Wenn der Schalter Build | Execute ([F5]) das Python-Programm in Textfenster nicht startet, liegt das vermutlich an den Einstellungen. Dort sollte Python 3 aufgerufen werden, nicht das alte Python aus der Versionsreihe 2.7. Ein Mausklick auf Compile erstellt einen Bytecode, führt das Programm aber nicht aus.
Für eine einfache Fehler- und Styling-Kontrolle ist Flake8 zuständig, aufgerufen über build | Check ([F9]). Um die Kommentare im unteren Fenster sehen zu können, müssen Sie sowohl die Fensteroption freigeben als auch das Fenster mit der Maus aufziehen. Ist Flake8 nicht installiert, holt das der Befehl pip3 install flake8 nach. Anders als bei Apt sollten Sie mit Pip Python-Bibliotheken immer ohne Administratorenrechte installieren.
Fazit
Können Sie einen anderen Texteditor bedienen, dann kommen Sie problemlos auch mit Geany zurecht. Die Erläuterungen der vielen Optionen und Hilfen wie Textvervollständigung oder Tooltipps haben wir bei dieser Einführung ausgelassen und uns eher auf die versteckten Optionen des Programms konzentriert.
Geany beherrscht zahlreiche Markup- und Programmiersprachen, für die es durch farbliches Hervorheben von Schlüsselbegriffen und Calltipps das Programmieren erleichtert. Haben Sie die Schalter korrekt gesetzt, starten Sie Python-Programme direkt aus dem Editor heraus in einem eigenen Programmfenster, Ähnliches gilt für C-Code nach dem Kompilieren. (csi/jlu)
Glossar
-
Calltipps
-
Fahren Sie mit dem Mauszeiger über ein Kommando in einem Programm, nennt diese Tooltipp-Variante die Syntax und die Parameter der jeweiligen Funktion oder Methode.
Infos
-
Geany: https://www.geany.org
-
Geany hacken: https://raw.githubusercontent.com/geany/geany/master/HACKING
-
Sort (Manpage): https://man7.org/linux/man-pages/man1/sort.1.html








