2010-03-01 17 views
6

Estoy tratando de crear un parche para cf.vim para resolver un problema con hash. En ColdFusion, los signos # se utilizan para encerrar una expresión dentro de un bloque cfoutput.vim resaltado de sintaxis de las marcas de hash ColdFusion

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

El problema entra en juego cuando hay una solitaria #, no dentro de un bloque cfoutput:

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

Esto hará que vim para resaltar todo después de la # como si se tratara de una 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 

¿Hay algo que puedo añadir a cfHashRegion para contar vim "No entrar en un cfHashRegion menos que las propiedades de inicio y final ambos se encuentran

Super-bono:? cfoutput es sólo la forma más común estar en una "cfOutputRegion". Cualquier cffunction con la salida = "true" se comportará como si todo el interior de su bloque se envuelve en cfoutput etiquetas.

Respuesta

2

¿Ha intentado utilizar syn match en lugar de syn region? no sé el ColdFusion sintaxis, entonces no sabré si esto s posible/correcto.

Algo así como:

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

También puede que desee ver en el uso de la lista contains=ALLBUT,{group-name},.. argumento para algunos casos.

+0

Tuve que escapar del +, pero funcionó. No es perfecto, porque un 'cfHashRegion' en realidad se puede dividir en varias líneas. En la práctica, sin embargo, casi siempre están en una sola línea. ¡Gracias! – mwcz

+1

Agregué esto a mi plugin Vim para una mejor compatibilidad con CF https://github.com/davejlong/cf-utils.vim –

Cuestiones relacionadas