Nim mit SciTE - Ein Experiment

  • Mir fehlen im VSCode/VSCodium - Editor so einige in SciTE lieb gewonnene Konfigurationsmöglichkeiten. Sicher kann man Einiges mit JS - Funktionen nachbilden, wenn man da fit ist. Aber einige Dinge sind aufgrund der Architektur auch generell nicht möglich. Z.B. gibt es nicht die Möglichkeit auf das Ereignis "BeforeSave" zu reagieren. Das ist aber für viele Tools, die ich nutze Bedingung. Reaktion auf z.B. "AfterSave" würde entweder zu einem nicht gespeicherten neuen Inhalt oder zu einem Speicher-Loop führen, wenn man jede Änderung wieder speichert.

    Deshalb habe ich mal getestet, inwieweit sich SciTE zur Nim-Programmierung eignet.

    Das ist jetzt also eine Erprobungsphase. ;)

    Was mir wichtig war:

    Ich benötige i.d.R. für die Programme unterschiedliche Compileranweisungen. Der Code Runner ist da nicht sehr flexibel (oder ich habe noch nicht alle Konfigurationsmöglichkeiten entdeckt).

    Ich habe mir angewöhnt in eine der ersten Programmzeilen als Kommentar die Kompilierzeile zu speichern, z.B. # compile: nim c --app:gui TestGui.nim .

    Nun wäre es natürlich schick, wenn ich das nicht händisch ins Terminal kopieren muss, sondern per Hotkey.

    Das habe ich hier mit dem Lua-Skript CompileNimByUserline.lua umgesetzt.

    Wie geht's?

    Zwei Schritte sind erforderlich:

    1. Ein Hotkey eurer Wahl ruft "CompileNimByUserline.lua" auf. (Im Bsp. "Ctrl+1")
      Die Kompilierzeile wird extrahiert und als Property "nim.compile.line" gespeichert
    2. Ein weiterer Hotkey ("F5") ruft den Befehl "Go" auf.
      "Go" führt nun die in der Property "nim.compile.line" gespeicherte Anweisung aus

    Ist keine benutzerdefinierte Kompilierzeile vorhanden, wird als Standard: nim c -r "$(FileNameExt)" verwendet.

    Die erforderlichen Anpassungen für die SciTEUser.properties sind im Lua-Skript aufgeführt.

    Natürlich ist Nim mit SciTE noch deutlich entfernt von der Funktionsvielfalt in VSCode. Ich weiß auch nicht, ob es wirklich sinnvoll ist, die Anpassung zu versuchen. Aber ein Aspekt spricht deutlich für SciTE: Die Ausführungsgeschwindigkeit. Ich habe nim check für dasselbe Programm (mit vielen Includes) einmal in VSCode und einmal in SciTE ausgeführt. Ergebnis: 21 s : 14 s - SciTE benötigt also 30% weniger Zeit, DAS spricht deutlich für SciTE.

    Ich halte euch auf dem Laufenden, sofern ich hier weiter bastele (das Farbschema ist per default nicht so der Brüller :D - aber das ist eher zweitrangig, Funktionalität geht vor).

  • Ich habe jetzt eine eigene Properties Datei für Nim erstellt: nim_user.properties (Einträge für Nim sind dann aus der SciTEUser.properties zu entfernen)

    Die vorhandene nimrod.properties ist unvollständig und verweist auch auf den nimrod Lexer.

    • nim_user.properties abspeichern (bei mir: C:\CODE\nim\SciTE_Nim\nim_user.properties)
    • import-Anweisung dafür mit relativem Pfad! an den Anfang der SciTEUser.properties einfügen, z.B. import \..\..\..\..\..\..\CODE\nim\SciTE_Nim\nim_user

    Ich habe alle Properties umbenannt auf .nim statt .nimrod

  • Hast Du ein vernünftiges Syntax-Highlighting für Nim gefunden?

    Ich habe mal etwas geschraubt (kann man sicher noch verfeinern, wenn man den Lua-Lexer ans Laufen bringt).

    Einige der Styles sind gar nicht verfügbar. Mit dem was geht, hab ich aber was Brauchbares hinbekommen. (Nicht vergessen: Lexer von nimrod auf nim stellen.)

    Wichtig! - Es kann nur Dark-Theme oder Light-Theme für alle Sprachen genutzt werden, ein Switch zwischen verschiedenen Sprachen klappt nicht, da es einige Globale Darstellungen gibt (caret.line, selection).

    Hier mal meine Dark und Light Themes: