Texteditor für Windows nachrüsten Notepad++ erweitern und anpassen

Von Mirco Lang

Anbieter zum Thema

Unter Windows gehört Notepad++ zu den beliebtesten Code-Editoren. Open Source sei Dank, lässt sich das Multitalent nahezu beliebig erweitern. Zwei Möglichkeiten stellen wir hier vor.

Notepad++ lässt sich beliebig mit Kommandozeilenwerkzeugen erweitern.
Notepad++ lässt sich beliebig mit Kommandozeilenwerkzeugen erweitern.
(Bild: Notepad++ / Augsten)

Notepad++ klingt nach einem simplen Texteditor und in der Tat: Es ist ein hervorragender Ersatz für das Windows-eigene Notepad, das im Grunde gar nichts kann. Der quelloffene Editor ist ähnlich fix, lässt sich systemweit als transparenter Notepad-Ersatz einrichten und kann darüber hinaus mit wesentlich mehr Funktionalität überzeugen.

Wie sich Notepad++ grundlegend für Programmierzwecke einrichten lässt, haben wir schon verraten. Aber trotz aller Features und verfügbarer Plug-ins begegnen uns im Alltag immer wieder Aufgaben, für die es keine fertigen Lösungen gibt.

Im Folgenden stellen wir zwei simple Möglichkeiten vor, Notepad++ beliebig (!) mit Kommandozeilenwerkzeugen zu erweitern, um Inhalte mit externen Werkzeugen manipulieren zu können. Tipp: Bevor Sie eine Funktion selbst umsetzen, sollten Sie immer erst im Plug-in-Manager vorbeischauen, dort warten rund 200 Erweiterungen auf ihren Einsatz.

Pork2Sausage

Mit Pork2Sausage gibt es eine Erweiterung, mit der Sie Funktionen nachrüsten können, für die es eben keine Erweiterung gibt. Sinn des Plugins: Markierter Text wird an einen externen Konverter weitergeleitet, dort verarbeitet und anschließend durch das Ergebnis ersetzt.

Als Konverter eignet sich jedes Skript oder Programm, das Argumente als Dateien oder von STDIN annimmt und als Datei oder via STDOUT ausgibt – also zum Beispiel Skripte, die auf die üblichen CLI-Werkzeuge setzen, etwa sed, awk und so weiter. Hier ein triviales Beispiel: Ein markierter Text soll durch seinen Hash ersetzt werden. Das Ganze lässt sich in drei Schritten umsetzen: Funktion definieren, Kontextmenüeintrag anlegen, Konverter schreiben.

Beginnen Sie am besten mit dem Konverter selbst, sonst bindet man etwas in Notepad++ ein, das noch gar nicht existiert – fühlt sich immer irgendwie falsch an. Hier soll es ein simples Batch-Skript sein, das schlicht ein Argument von STDIN aufnimmt, eine Checksumme daraus erstellt und diese ohne weitere Angabe per STDOUT ausgibt. Hier die „konverter.bat“:

@echo off
echo %* | sum | gawk "{printf $1}"

Die erste Zeile ist wie immer wichtig, damit Batch-Dateien sich nicht gleich selbst mit ausgeben. In der zweiten Zeile sehen Sie sofort, dass die CLI-Tools sum und gawk eingesetzt werden –, die unter Windows freilich nicht standardmäßig zur Verfügung stehen und erst installiert werden müssen, beispielsweise über die GNU utilities for Win32, die die meisten Linux-Standardwerkzeuge als native Binaries für Windows beinhalten.

Das „echo“ gibt hier einfach den gesamten übergebenen/markierten Text an „sum“ weiter, das das eigentliche Hashing übernimmt – mit einer Ausgabe in der Art „667788 1“. Die abgetrennte 1 ist dabei nicht erwünscht, also sorgt „gawk“ dafür, dass nur die erste Spalte, also der Hash, ausgegeben wird. Hinweis für Linuxer: Die Anführungszeichen sind in dieser awk-Variante unter Windows in der Tat anders als beim „normalen“ awk-Aufruf in der Bash.

Pork2Sausage konfigurieren

Dann müssen Sie Pork2Sausage selbst installieren, das im Plug-Verwalter als „Pork to Sausage“ erscheint. Anschließend können Sie via „Erweiterungen/Pork to Sausage/Edit User Commands“ die Datei „pork2sausage.ini“ aufrufen, in der die Funktion, hier „meinkonverter“, definiert wird.

[meinkonverter]
progPath=D:\tools\konverter.bat
workDir=D:\tmp
progCmd=konverter.bat $(SELECTION)

Zunächst kommt der Name in eckigen Klammern – der in genau diesem Wortlaut später noch für das Kontextmenü gebraucht wird. Es folgen der Pfad zum eigentlichen Skript (konverter.bat) sowie zu einem Arbeitsverzeichnis. Der eigentliche Programmaufruf läuft dann über „progCmd“ und hier wird einfach nur die Variable „$(SELECTION)“ übergeben, die eben den markierten Text beinhaltet.

Um die Funktion aufrufen zu können, muss sie noch in einem Menü in Notepad++ hinterlegt werden. Das geht in der Notepad++-eigenen Datei „C:\Users\%USERNAME%\AppData\Roaming\Notepad++/contextMenu.xml“. Um nun die Funktion über den Bereich „Plugin commands“ des Kontextmenüs zu erreichen, hinterlegen Sie folgenden Eintrag:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung
<Item FolderName="Plugin commands" PluginEntryName="Pork to Sausage" PluginCommandItemName="meinkonverter" ItemNameAs="HashMich" />

Hier werden also das Plug-in „Pork to Sausage“ und der oben verwendete Name „meinkonverter“ hinterlegt, plus einem beliebigen Namen für den Kontextmenüeintrag. Damit ist Pork2Sausage fertig konfiguriert und Sie können die Funktion testen – nach einem Neustart von Notepad++.

Markieren Sie dazu einen beliebigen Text in einem Dokument, rufen Sie die Funktion auf und schon wird der markierte Text mit seinem Hash ersetzt. Statt mit STDIN und STDOUT können Sie auch mit Dateien arbeiten, die genauen Bezeichnungen finden Sie direkt in der pork2sausage.ini-Datei.

Erweiterung ohne Erweiterung

Pork2Sausage ist ein tolles, mächtiges Plugin, keine Frage. Aber zum einen gibt es damit durchaus Problemchen, wie zum Beispiel Fehlermeldungen auf Chinesisch. Zum anderen möchte man vielleicht einfach ohne zusätzliche Plug-ins arbeiten. Auch das geht. Bleiben wir bei der obigen Funktion, mit einem winzigen Unterschied im Konverter:

@echo off
echo %* | sum | gawk "{printf $1}" | clip

Einziger Unterschied: Der Konverter gibt nicht einfach nach STDOUT aus, sondern kopiert die Checksumme via „| clip“ in die Zwischenablage. Der Grund dafür ist simpel; es gibt kein Pork2Sausage, das das Ersetzen in Notepad++ übernimmt.

Für das Einlesen des markierten Texts und den Einbau in ein Notepad++-Menü braucht es ebenfalls andere Lösungen – genauer gesagt nur eine. Notpad++ hat ein Menü „Ausführen“ und dort können eigene Shortcuts hinterlegt werden, und zwar über die Datei „C:\Users\%USERNAME%\AppData\Roaming\Notepad++\shortcuts.xml“.

Das Beste daran: Notepad++ hat eine eingebaute Variable für einen markierten String, nämlich „$(CURRENT_WORD)“, die in den Shortcut-Aufrufen genutzt werden kann. So könnte dann der Eintrag aussehen:

<Command name="MeinKonverter" Ctrl="no" Alt="no" Shift="no" Key="0">"D:\tools\konverter.bat" $(CURRENT_WORD)</Command>

Der Teil „Ctrl="no" Alt="no" Shift="no" Key="0"“ gibt lediglich an, dass für diesen Shortcut kein Tastekürzel definiert ist – das lässt sich bei Bedarf besser über den grafischen Editor in Notepad++ lösen, da dann auch gleich Konflikte angezeigt werden. Ansonsten wird auch hier wieder lediglich ein beliebiger Name („MeinKonverter“) für den Menüeintrag angegeben und das Skript mit dem markierten Text als Argument aufgerufen.

Im Gegensatz zu der Pork2Sausage-Lösung wird der markierte Text nicht ersetzt – das müsste dann mit STRG+V manuell geschehen.

Mit oder ohne Plug-in?

Wenn es wirklich um das Ersetzen von markiertem Text geht, ist Pork2Sausage eine schöne Erleichterung. Der Weg über die Shortcuts ist allerdings deutlich flexibler und vor allem gibt es eben keine Abhängigkeit von einem Drittwerkzeug.

Zudem verarbeitet Pork2Sausage den gesamten markierten Text in einem Rutsch. Mit dem Shortcut-Weg kann ein Skript auch so aussehen:

@ECHO OFF
echo "<a href="%1" rel="noopener" target="_blank">%2 %3 %4 %5 %6</a>" | sed " s/\(.*<\/a>\)\"/\1/ ; s/^\"// ; s/ */ /g " | clip

Erraten Sie, was passiert? Hier werden bis zu 6 markierter Wörter separat verarbeitet, die allesamt über „$(CURRENT_WORD)“ an das Skript als Argumente weitergeleitet werden. Das erste „Wort“ (%1) wird bei „href“ eingebaut, die Wörter 2 bis 5 (%2 bis %6) landen innerhalb des <a>-Tags. Das sed-Statement korrigiert lediglich ein paar Anführungszeichen und kann hier vernachlässigt werden.

Mit diesem Konverter könnte man also zum Beispiel folgenden Text markieren:

https://www.dev-insider.de Mein Link

Wirft man dann den Konverter über das Ausführen-Menü oder ein Tastenkürzel an, landet Folgendes in der Zwischenablage:

<a href="https://www.dev-insider.de" rel="noopener" target="_blank">Mein Link </a>

HTML-Links lassen sich also aus URL und Text erstellen – ein eigentlich typisches Editor-Feature, das Notepad++ vermissen lässt. Und so ist selbst dieses Trivialbeispiel durchaus schon nützlich. Oder wie wäre es mit einer StackOverflow-Suche?

Ob nun Pork2Sausage oder simpler Shortcut, beide Varianten sind sehr simpel zu nutzen – mit den entsprechenden Skripten im Hintergrund bieten sie aber endlose Möglichkeiten, Notepad++-Inhalte mit externen Programmen zu manipulieren.

(ID:47554647)