Discussion:
[vim] Syntax Highlighting erweitern
(zu alt für eine Antwort)
Martin
2012-02-23 01:06:13 UTC
Permalink
Hallo zusammen,

ich möchte das Syntax Highlighting in vim erweitern.

Dabei geht es um xml Dateien, in die Skripte in GDL eingebettet sind.
GDL ist eine parametrische Programmiersprache für 3-dimensionale
Objekte, aber das spielt hier eigentlich keine Rolle.

Ich weiß (einigermaßen), wie man mit "syntax keyword" und "highlight"
umgeht und wie man eine entsprechende Datei läd.

Ich habe eine xml.vim Datei angelegt und in einem Ordner
~/.vim/after/syntax abgelegt.
Inhalt:
syn keyword gdl_objects SLAB CWALL_ CROOF_
syn match myComments "^\s*!.*"

Mein colorscheme habe ich um die folgenden Zeilen erweitert:
highlight gdl_objects ctermfg=red
highlight myComments ctermfg=grey

Wenn ich eine Datei mit reinem GDL Code editiere, werden meine
Einstellungen auch angewendet.

Wenn ich aber eine xml Datei mit eingebetteten GDL Skripten editiere,
wird das Highlighting nicht angewendet.

Woran liegt das und wie kann ich das beheben, ohne das Highlighting für
xml zu verlieren?

Danke im Voraus
Gruß
Martin
--
perl -e '$S=[[73,116,114,115,31,96],[108,109,114,102,99,112],
[29,77,98,111,105,29],[100,93,95,103,97,110]];
for(0..3){for$s(0..5){print(chr($S->[$_]->[$s]+$_+1))}}'
Martin
2012-02-23 16:03:20 UTC
Permalink
Post by Martin
...
Wenn ich eine Datei mit reinem GDL Code editiere, werden meine
Einstellungen auch angewendet.
Woran liegt das und wie kann ich das beheben, ohne das Highlighting für
xml zu verlieren?
Woran es liegt, konnte ich mittlerweile herausfinden.

In der xml Datei sind die entsprechenden GDL Code Bereich zusätzlich zu
den XML Tags in eine Klammerung eingebettet:

<![CDATA[
SLAB ...
! weiterer GDL Code
]]>

Innerhalb dieser Bereiche wird das Highlighting nicht angewendet.
Warum weiß ich nicht.

Sowie ich wieder Zeit dafür habe, möchte ich versuchen, das Problem mit
syn-region zu beheben. Müsste eigentlich gehen, aber ich habe keine
Erfahrung damit.

Gruß
Martin
--
perl -e '$S=[[73,116,114,115,31,96],[108,109,114,102,99,112],
[29,77,98,111,105,29],[100,93,95,103,97,110]];
for(0..3){for$s(0..5){print(chr($S->[$_]->[$s]+$_+1))}}'
Markus Wichmann
2012-02-26 09:48:55 UTC
Permalink
Post by Martin
Post by Martin
...
Wenn ich eine Datei mit reinem GDL Code editiere, werden meine
Einstellungen auch angewendet.
Woran liegt das und wie kann ich das beheben, ohne das Highlighting für
xml zu verlieren?
Woran es liegt, konnte ich mittlerweile herausfinden.
In der xml Datei sind die entsprechenden GDL Code Bereich zusätzlich zu
<![CDATA[
SLAB ...
! weiterer GDL Code
]]>
Innerhalb dieser Bereiche wird das Highlighting nicht angewendet.
Warum weiß ich nicht.
Kurze Suche in der xml.vim:

Da steht unter anderem drin:

syn region xmlCdata
\ start=+<!\[CDATA\[+
\ end=+]]>+
\ contains=xmlCdataStart,xmlCdataEnd,@xmlCdataHook,@Spell
\ keepend
\ extend

Und weiter unten:

hi def link xmlCdata String

Damit ist dein GDL-Code Teil einer Syntax-Region, in der kein GDL-Code
auftauchen kann (steht ja nicht im contains drin). Wie du das Problem
löst, weiß ich aber nicht. Die einzige einfache Möglichkeit, die ich
sehe, ist die xml.vim zu verändern, sodass dein GDL-Zeug auch in einem
xmlCdata contained sein kann.
Post by Martin
Gruß
Martin
HTH,
Markus
Martin
2012-02-26 21:04:20 UTC
Permalink
Auf die Idee in der xml.vim zu suchen, bin ich gar nicht gekommen.
Danke für den Hinweis.
Post by Markus Wichmann
syn region xmlCdata
\ start=+<!\[CDATA\[+
\ end=+]]>+
\ keepend
\ extend
Ich kenne mich mit XML zu wenig aus, als dass ich gewusst hätte, dass
"<!\[CDATA\[" eine übliche Sache in XML ist. Ich hatte angenommen, das
wäre eine Besonderheit von GDL.
Post by Markus Wichmann
hi def link xmlCdata String
Damit ist dein GDL-Code Teil einer Syntax-Region, in der kein GDL-Code
auftauchen kann (steht ja nicht im contains drin). Wie du das Problem
löst, weiß ich aber nicht. Die einzige einfache Möglichkeit, die ich
sehe, ist die xml.vim zu verändern, sodass dein GDL-Zeug auch in einem
xmlCdata contained sein kann.
Auf die Idee eine region in .vim/after/syntax/xml.vim zu konfigurieren,
bin ich zwischenzeitlich selbst gekommen.
Bei mir steht halt drin:
contains=gdl_comments,gdl_objects,gdl_params,gdl_transform,gdl_control

Damit ist mein Problem gelöst, wenn auch vielleicht nicht auf die
sauberste Art und Weise.

Freundlicher Gruß
Martin
--
perl -e '$S=[[73,116,114,115,31,96],[108,109,114,102,99,112],
[29,77,98,111,105,29],[100,93,95,103,97,110]];
for(0..3){for$s(0..5){print(chr($S->[$_]->[$s]+$_+1))}}'
Loading...