我正在尝试为cf.vim创建补丁,以解决哈希问题。在ColdFusion中,使用#符号将表达式括在cfoutput块内。

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

当存在一个单独的#而不是cfoutput块内部时,该问题就起作用了:
<a href="#x">an anchored link</a>

这将使vim突出显示#之后的所有内容,就像在cfHashRegion中一样。
syn region cfHashRegion start=+#+ skip=+"[^"]*"\|'[^']*'+ end=+#+ contained containedin=cfOutputRegion contains=@cfExpressionCluster,cfScriptParenError

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

我可以添加一些内容到cfHashRegion中,告诉vim“除非找到start和end属性,否则不要输入cfHashRegion吗?

super 奖励:cfoutput是“cfOutputRegion”中最常见的方式。任何带有output =“true”的cffunction的行为都将好像其块中的所有内容都包裹在cfoutput标记中一样。

最佳答案

您是否尝试过使用syn match而不是syn region?我不知道ColdFusion语法,所以我不知道这是否可能/正确。

就像是:

syn region cfHashRegion "L\=#[^#]+#" containedin=cfOutputRegion  contains=@cfExpressionCluster,cfScriptParenError

在某些情况下,您可能还想研究contains=ALLBUT,{group-name},..参数列表的使用。

10-05 19:41