Problem
Syntax-Highlighting ist eine praktische Sache. Notepad++ bringt dem Entwickler tatsächlich eine ganze Menge gehighlighteter Sprachen mit. Und wenn doch eine fehlt?
Ein derart offenes System müsste doch leicht nachzurüsten sein, z.B. auch mit eigenen oder exotischen Syntax-Vorgaben.
Im konkreten Fall: ich möchte FTP-Uploads auf einen Debian-Server automatisieren. Dafür gibt es sogenannte FTP-Makros. Konkret: in einem bestimmten Verzeichnis muss eine Datei namens „.netrc “ liegen, die einfach die gewünschten FTP-Logins einerseits und die Pfade zu den hochzuladenden Dateien auflistet. Dazu müssen die Inhalte ein paar Schlüsselworte bereithalten. De facto eine ganz kleine Programmierung also.
So sieht ein Ziel-Layout aus:
machine ftp.someserver.com
login SomeLogin
password SomeCleverPassword
macdef MacroName
tick
!echo SomeTextforDebugPurpose:
binary
put „./Some_Folder/This_is_the_Source_File.pdf“ „This_is_how_it_lands_on_target.pdf“
quit
Es gibt also die typischen Syntax-Komponenten, die Notepad++ durchaus auch kennt und verwalten kann:
- drei Sorten von Keywords, die unterschiedlich dargestellt werden sollen
- die Makro-Auslöser machine und macdef
- die Makro-Meta-Terme login und password
- die makrofizierten FTP-Befehle
- einfache Token für Benutzerterme, einfach gesagt: Zeichenketten
- explizite Strings, d.h. Zeichenketten, die via Anführungszeichen eröffnet und terminiert werden
Mehr braucht man für diesen Zweck nicht, obwohl Notepad++ natürlich auch Ziffern, Sonderzeichen und weitere Syntax-Komponenten verarbeiten und highlighten kann.
Der naheliegende Menüpunkt Einstellungen -> Stile liefert zwar eine Dialogbox mit Einstellungsmöglichkeiten. Diese beschränken sich aber auf die Nutzung vorhandener Schemen. So kann man einem vorhandenen Schema wie z.B. SQL tatsächlich leicht noch eine weiter Extension wie database anhängen. Weil die gesuchte Funktion hier nicht ist und sich auch kein anderer so recht anbietet, liegt aus meiner Sicht ein Usability-Problem vor. Davon zeugt auch eine recht hohe Trefferanzahl ähnlicher Suchen bei Google zum Thema.
Lösung
Die für mich einfachste Lösung geht über einen Blick unter die Haube. Notepad++ verwaltet Nutzer-Syntax-Schemen in einer Datei namens userDefineLang.xml. Diese kann an zwei Orten sein:
- \Dokumente and Einstellungen{your profile name}\Anwendungsdaten\Notepad++\ oder
- Notepad++ installation folder
Der folgende Code muss in dieser Datei stehen bzw. an zwischen den NotepadPlus-Tags eingefügt sein:
<NotepadPlus> <UserLang name="netrc" ext="netrc"> <Settings> <Global caseIgnored="no" /> <TreatAsSymbol comment="no" commentLine="no" /> <Prefix words1="no" words2="no" words3="no" words4="no" /> </Settings> <KeywordLists> <Keywords name="Delimiters">"00"00</Keywords> <Keywords name="Folder+"></Keywords> <Keywords name="Folder-"></Keywords> <Keywords name="Operators"></Keywords> <Keywords name="Comment"></Keywords> <Keywords name="Words1">machine macdef </Keywords> <Keywords name="Words2">login password</Keywords> <Keywords name="Words3">tick echo binary put quit !echo</Keywords> <Keywords name="Words4"></Keywords> </KeywordLists> <Styles> <WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="FOLDEROPEN" styleID="12" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="FOLDERCLOSE" styleID="13" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="KEYWORD1" styleID="5" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" /> <WordsStyle name="KEYWORD2" styleID="6" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" /> <WordsStyle name="KEYWORD3" styleID="7" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="1" /> <WordsStyle name="KEYWORD4" styleID="8" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="COMMENT" styleID="1" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="COMMENT LINE" styleID="2" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="NUMBER" styleID="4" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="OPERATOR" styleID="10" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="DELIMINER1" styleID="14" fgColor="800000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="DELIMINER2" styleID="15" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> <WordsStyle name="DELIMINER3" styleID="16" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" /> </Styles> </UserLang> </NotepadPlus>
Einige Tags sprechen eigentlich ganz gut für sich. Anpassungen für eigene Zwecke sollten damit kein Problem sein. Die Verkettung mit den Datei-Endungen geschieht in der zweiten Zeile dieses Codes. Extension werden immer ohne den Punkt eingetragen. Der Eintrag für Word-Dokument wäre also einfach „doc“ und nicht „.doc“.
Nicht ganz selbsterklärend: Fontstyle
- 0 = normaler Schriftschnitt
- 1 = fett
- 2 = kursiv
- 3 = fett + kursiv
- 4 = unterstrichen