GeekzeugWindows

Notepad++: HTML-Hyperlinks aus Auswahl erstellen – jetzt einfach

URLs werden vielerorts automatisch in a-href-Links übersetzt - in Notepad++ geht es fast so einfach.

Vor einiger Zeit hatte ich mal eine Lösung für das Problem gebastelt: Man konnte ein Wort markieren und dann über ein Popup eine URL eingeben – und daraus wurde dann ein HTML-Link gebaut. Das Ganze war recht kompliziert, sollte aber unbedingt per GUI laufen und war nach Boris‘ Wünschen designt. Hier wird es etwas einfacher: URL und Linktext markieren, Tastenkürzel verwenden und schon landet die HTML-Notation in der Zwischenablage. Nichts für jeden, aber für mich ;) Und natürlich anpassbar.

Notepad++, sed, echo, clip

Die Funktion steckt in einem 1-Zeiler-Batch-Skript, in dem die Tools echo, clip und sed vorkommen. Und den CLI-Texteditor sed müsst Ihr unter Windows erst noch installieren, beispielsweise über die Unix utilities for Win32, die eine ganze Reihe nützlicher Linux-Standardwerkzeuge unter Windows bereit stellen. Dazu haben wir auch einen Artikel.

In Notepad++ wird das Skript später über das Ausführen-Menü aufgerufen, das wir neulich auch schon mal für das Einbinden einer Stack-Overflow-Suche verwendet haben.

Achtung: sed und selbst echo verhalten sich nicht immer in jeder Shell gleich – hier geht es um die Versionen aus den UnxUtils und Windows‘ Standard-Terminal cmd. Die Tools sind leider ziemlich pingelig, was Klammern, Escape-Zeichen, Anführungszeichen und so weiter angeht, von daher ist das Frustpotenzial groß. Achtet also auf Kleinigkeiten! Und bevor Ihr Euch in die Bastelhölle begebt – so funktioniert das Ganze danach (hier zur Veranschaulichung über ein Menü, später dann via Tastenkürzel):

Hpyerlink-Macher einrichten

Beginnt mit dem einfachen Part, dem Einrichten des – natürlich noch nicht existierenden – Skripts in Notepad++, Ihr braucht das sowieso zum späteren Testen des Skripts. Öffnet die Notepad++-Konfiguratinsdatei C:\Users\%USERNAME%\AppData\Roaming\Notepad++\shortcuts.xml und fügt folgenden Eintrag in den userdefinedcommands-Bereich:

<command name="ML_Linker" Ctrl="no" Alt="yes" Shift="no" Key="0"/>&quot;D:\meinverzeichnis\meinskript.bat&quot; $(CURRENT_WORD)

Wichtig ist hier die Variable CURRENT_WORD ganz hinten, mit der der markierte Text gemeint ist. Dieser Text wird dann gleich vom Skript aufgenommen. Name und Link zum Skript müsst Ihr natürlich anpassen. Das Tastenkürzel (Key) wird hier schlicht auf Null gesetzt, das könnt Ihr später in der GUI bequemer festlegen. Speichert die shortcuts.xml und startet Notepad++ neu.
Wichtig: Natürlich muss der command-Tag wie alle anderen in der shortcuts.xml mit SPITZE-KLAMMER-AUF /command SPITZE-KLAMMER-ZU geschlossen werden – das elende Wordpress kann das leider nicht ausgeben, weil es das für Anweisungen für sich selbst hält … sorry dafür.

Nun geht es ans Skript meinskript.bat mit folgendem Inhalt:

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

Die erste Zeile sorgt nur dafür, dass sich das Skript auf der Kommandozeile nicht gleich selbst ausgibt.

echo schreibt nun einen ganz normalen HTML-Link – und %1 und %2 werden durch die Werte von CURRENT_WORD ersetzt, also eine markierte URL und einen markierten Linktext. Und dann kommt die übliche Anführungszeichenproblematik ins Spiel: Ohne Anführungszeichen will echo den String nicht korrekt ausgeben, mit Anführungszeichen werden diese eben auch ausgebeben, die Alternative printf würde alle Anführungszeichen, also auch die gewünschten, vernichten … Also darf sed mit dieser wunderschönen Syntax schlicht und ergreifend das erste und letzte Anführungszeichen entfernen – mehr steckt nicht dahinter. Anschließend wird alles per | clip in die Zwischenablage kopiert.

Kurz zum sed-Statement mit dem regulären Ausdruck: In der ersten Anweisung wird der gesamte String vom Anfang bis zu /a> als Gruppe erfasst, daher in runden Klammern. Nur das finale Anführungszeichen fehlt in dieser Gruppe – die dann via \1 den gesamten String ersetzt, also das letzte Anführungszeichen löscht. Die zweite Anweisung findet schlicht das erste Anführungszeichen und ersetzt es durch nichts – löscht es also. Und für alle sed-Cracks: Ja, das sollte einfacher gehen, aber sed scheint hier (teils) die Anweisung für Zeilenenden ($) zu ignorieren und macht obskure Probleme mit spitzen Klammern – cmd ist leider keine Bash … Scripting unter Linux ist unendlich viel einfacher!
Wenn Ihr bei sed und sonstigen CLI-Tools Hilfe braucht, schaut bei unserer hauseigenen Linux-Hilfe cli.help vorbei – oder direkt im Terminal:

curl cli.help/sed

Um ein Tastenkürzel festzulegen, öffnet Ausführen/Shortcut ändern in Notepad++ und vergebt ein Kürzel, ich habe zum Beispiel ALT+L gewählt.

Der Workflow könnte dann so aussehen:

URL aus dem Browser kopieren und vor zu verlinkendem Wort einfügen:
https://www.tutonaut.de Meinsuperlink
URL und Linktext markieren
ALT+L drücken -> HTML-Link landet in der Zwischenablage
STRG+V drücken
URL wird überschrieben mit:
<a href="https://www.tutonaut.de" rel="noopener" target="_blank">Meinsuperlink</a>

Zur Verdeutlichung: Das Skript wird also aus Notepad++ so aufgerufen:

meinskript.bat https://www.tutonaut.de Meinsuperlink

Die Notepad++-Variable CURRENT_WORD beinhaltet also URL und Linktext – die vom Skript dann als Parameter 1 (%1) und Parameter 2 (%2) eingelesen und interpretiert werden.

Für meine Bedürfnisse passt das so recht gut, da ich auf diese Weise einfach Links für Wordpress-Artikel außerhalb von Wordpress und ohne grafisches Brimborium setzen kann. Für Euch ist es vielleicht nur ein Weg in die richtige Richtung. Wenn Ihr Hilfe für eigene Varianten braucht, einfach fragen.

Update 25.06.2021: Mit dem obigen Code lässt sich freilich nur ein einzelnes Wort verlinken. Mit beliebig vielen Wörtern wird es recht kompliziert, Scripting mit Batch ist halt nicht das Wahre. Aber für meine Zwecke habe ich mir eine Version für bis zu fünf Wörter geschrieben – beliebig erweiterbar:

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

Neu sind hier zum einen die weiteren Parameter-Variablen %3 etc. sowie die sed-Anweisung „s/ */ /g“, um doppelte Leerzeichen zu entfernen, wenn man mal weniger als fünft Wörter verlinkt. Ab sofort geht also auch ein Aufruf wie:

meinskript.bat https://www.tutonaut.de eins zwei drei vier fünf

Würdet Ihr ein sechstes Wort markieren, würde es bei der Operation verloren gehen – aber man soll ja auch nicht 20 Wörter verlinken …

Mehr zu Notepad++.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Schaltfläche "Zurück zum Anfang"