2010-03-01 4 views
6

J'essaye de créer un correctif pour cf.vim pour résoudre un problème avec des hachages. Dans ColdFusion, les signes # sont utilisés pour inclure une expression dans un bloc cfoutput.vim coloration syntaxique des marques de hachage ColdFusion

<cfset x = 1 /> 
<cfoutput> x is now #x# </cfoutput> 
<!--- outputs "x is now 1" ---> 

Le problème vient en jeu quand il y a un # seul, pas à l'intérieur d'un bloc cfoutput:

<a href="#x">an anchored link</a> 

Cela entraînera vim de mettre en évidence tout ce qui suit le # comme si elle était dans un cfHashRegion.

syn region cfHashRegion start=+#+ skip=+"[^"]*"\|'[^']*'+ end=+#+ contained containedin=cfOutputRegion [email protected],cfScriptParenError 

syn region cfOutputRegion matchgroup=NONE transparent start=+<cfoutput>+ end=+</cfoutput>+ contains=TOP 

Y at-il quelque chose que je peux ajouter à cfHashRegion dire vim « Ne pas entrer dans un cfHashRegion à moins que les propriétés de début et de fin sont tous deux trouvé

Super-Bonus: cfoutput est que la façon la plus commune être dans un « cfOutputRegion ». tout cffunction avec sortie = « true » se comportera comme si tout l'intérieur de son bloc ont été enveloppés dans cfoutput tags.

Répondre

2

Avez-vous essayé d'utiliser syn match au lieu de syn region? Je ne sais pas ColdFusion syntaxe, donc je ne sais pas si cela je s possible/correct.

Quelque chose comme:

syn region cfHashRegion "L\=#[^#]+#" containedin=cfOutputRegion [email protected],cfScriptParenError 

Vous pouvez également regarder dans l'utilisation de la liste des arguments contains=ALLBUT,{group-name},.. pour certains cas.

+0

J'ai dû échapper au +, mais ça a marché. Ce n'est pas parfait, car un 'cfHashRegion' peut être divisé sur plusieurs lignes. En pratique cependant, ils sont presque toujours sur une seule ligne. Merci! – mwcz

+1

J'ai ajouté ceci à mon plugin Vim pour un meilleur support des FC https://github.com/davejlong/cf-utils.vim –

Questions connexes