2010-03-01 19 views
6

मैं हैश के साथ किसी समस्या को हल करने के लिए cf.vim के लिए पैच बनाने की कोशिश कर रहा हूं। कोल्डफ्यूजन में, # संकेतों का उपयोग cfoutput ब्लॉक के अंदर एक अभिव्यक्ति को संलग्न करने के लिए किया जाता है।कोल्डफ्यूजन हैश अंकों के विम सिंटैक्स हाइलाइटिंग

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

समस्या खेलने में आता है जब एक अकेला # है वहाँ एक cfoutput ब्लॉक के अंदर नहीं:

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

यह जैसे कि यह एक cfHashRegion में थे vim # के बाद सब कुछ उजागर करने के लिए कारण होगा।

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

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

वहाँ कुछ जब तक आरंभ और अंत गुण दोनों पाए जाते हैं मैं cfHashRegion को जोड़ सकते हैं vim बताने के लिए "एक cfHashRegion दर्ज न करें है

सुपर बोनस: cfoutput है केवल सबसे आम तरीका । एक "cfOutputRegion" में होने की किसी भी cffunction उत्पादन के साथ = "true" के रूप में यदि अपने ब्लॉक के अंदर सब कुछ cfoutput टैग में लिपटे रहे थे व्यवहार करेगा।

उत्तर

2

आप syn region के बजाय syn match उपयोग करने की कोशिश की है? मैं ColdFusion पता नहीं है वाक्यविन्यास, इसलिए मुझे नहीं पता कि यह मैं हूं या नहीं एस संभव/सही है।

कुछ की तरह:

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

तुम भी कुछ मामलों के लिए contains=ALLBUT,{group-name},.. तर्क सूची के उपयोग पर विचार कर सकते हैं।

+0

मुझे + से बचना पड़ा, लेकिन यह काम किया। यह सही नहीं है, क्योंकि 'cfHashRegion' वास्तव में कई लाइनों पर विभाजित किया जा सकता है। अभ्यास में हालांकि, वे लगभग हमेशा एक पंक्ति पर हैं। धन्यवाद! – mwcz

+1

मैंने बेहतर सीएफ समर्थन के लिए इसे अपने विम प्लगइन में जोड़ा https://github.com/davejlong/cf-utils.vim –

संबंधित मुद्दे