2017-11-14 2 views
2

Ich versuche, eine Syntax-Datei für diese Sprache Zuckerwürfel genannt zu erstellen 2. Sie können weitere Informationen finden Sie hier: http://www.motoslave.net/sugarcube/2/docs/macros.htmlVim Syntax: Vorlesen zwischen bestimmten Regionen überprüft

Im Allgemeinen, ich will nicht buchstabieren Überprüfen Sie zwischen den Makros (z. B. <<if $myVariable>>). Aber können Sie Ihre eigenen Makros zu machen, und ich zufällig eine gemacht zu haben, die wie folgt funktioniert:

<<myDescription "This is a string that should be in english">> 

Wie Sie sehen können, „Englisch“ groß geschrieben werden sollte, so wäre es nützlich, Zauber zu haben Einchecken dieser Fall.

Ich weiß bereits über vim syntax. Es ist keyword, match, region, @NoSpell usw. Aber ich habe wirklich Mühe, diese Konzepte zusammen zu bringen, um zu erreichen, was ich will: Rechtschreibprüfung zwischen einem bestimmten Makro, aber nicht alle Makros. Hier ist meine Idee, und es nutzt die beschriebenen Konzepte in syn-priority:

syn match macroDelimiter "\v(<<|>>)" 
" there's much more keywords than this 
syn keyword macroKeywords contained if elseif else myDescription 
syn region mostMacros matchgroup=macroKeywords start="<<" end=">>" [email protected] 
syn region myMacro matchgroup=macroKeywords start="<<myDescription" end=">>" 

ich meine ... ich versucht, und es funktioniert. Eine Sache, die ich nicht mag, ist, wie myDescription genau wie die abgewinkelten Klammern hervorgehoben wird. Ich mag auch nicht, wie das Wort myDescription selbst Rechtschreibprüfung ist, aber ich kann damit leben. Gibt es eine Möglichkeit, diese Probleme zu beheben?


Dadurch werden die oben genannten Probleme beheben:

set spell spelllang=en_us 
syn match macroDelimiter "\v(<<|>>)" 
" there's much more keywords than this 
syn keyword macroKeywords contained if elseif else myDescription 
syn region macroString start=+"+ end=+"+ skip=+\\"+ 
syn region mostMacros matchgroup=macroDelimiter start="<<" end=">>" [email protected],macroString 
"Notice how this is commented out 
"syn region myMacro matchgroup=macroDelimiter start="<<myDescription" end=">>" 

hi link macroKeywords Keyword 
hi link macroDelimiter Constant 

Aber es fügt ein großes Problem: Es gibt auch andere Makros mit Strings. Die <<link>> und <<goto>> Makros haben auch Strings. Aber ich möchte die Strings dort nicht buchstabieren.

syn region myMacro matchgroup=macroKeywords start="<<\zemyDescription" end=">>" [email protected] 

Dies ermöglicht Schreibweise für myDescription selbst:

Antwort

1

Zum von matchgroup Hervorhebung für myDescription, aber immer noch durchzusetzen, das Spiel, beenden sie den Beginn der Gruppe über \ze loszuwerden. Um zu vermeiden, dass haben Sie die Syntax für sie keyword-match zu drehen, um [email protected], um es hinzuzufügen:

syn match myDescription "myDescription" [email protected] 
syn region myMacro matchgroup=macroKeywords start="<<\zemyDescription" end=">>" [email protected],myDescription 
+0

Wo haben Sie erfahren, '\ ze'? Wo ist das in den Dokumenten? –

+0

': help/\ ze'. Alle Schlüsselwörter für reguläre Ausdrücke beginnen mit '/'. Interessant für Syntax-Highlighting ist auch die (hässlichere) Alternative '\ @ =' (positive Lookahead, wie Perl '(? = ...).) Im Gegensatz zu '\ ze' verhindert dies nicht weitere Syntax-Matches an diesen Positionen –

+0

Dies funktionierte perfekt.Danke! –