我知道normal script tags can't self close,而且我对vimscript的了解比我少。我一直在使用与HTML非常相似的自定义XML模板语言,并且一直使用HTML模式和文件~/.vim/after/syntax/html.vim
:
syn region javaScript start=+<is:PageComponents:Script[^>]*>+ keepend end=+</is:PageComponents:Script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
syn region htmlScriptTag contained start=+<is:PageComponents:Script+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
我遇到的问题是突出显示区域的“溢出”,直到文件结束或下一个结束脚本标记。
我尝试将开始更改为:+<is:PageComponents:Script[^>]*\(\\\)\@<!>+
和+<is:PageComponents:Script[^>]*[^\\]>+
,两者都没有区别。据我了解正则表达式,负面的后视应该是一个理想的解决方案,并且一个字符匹配应该迫使贪婪的明星退出一个角色,导致失败。将*
替换为\{-}
以获取不合理的行为会产生相同的结果。我错过了什么?
如果它是相关的,我在Cygwin的薄荷中运行vim(类型是xterm-256color),shell是bash,颜色方案是solarized。
编辑:添加我们的标记语言样本
<is:PageComponents:Template title="Page Title" controller="controller">
<is:PageComponents:Script src="/path/jsfile.js" />
<is:PageComponents:Style src="cssfile.css" />
<is:Containers:Box label="Box Label">
<is:DataGridComponents:DataGrid id="data_grid_id" data_provider="data_provider" keep_state="true">
<is:DataGridComponents:DataGridHeader />
<is:DataGridComponents:Columns strip_placeholders="false" id="%%id%%_row">
<is:DataGridComponents:Column header_title="Links Header">
<span class="popup-link popup-link-type1" id="type1_%%id%%">Type 1</span> |
<span class="popup-link popup-link-type2" id="type2_%%id%%">Type 2</span>
</is:DataGridComponents:Column>
<is:DataGridComponents:Column header_title="Data1">%%data1%%</is:DataGridComponents:Column>
<is:DataGridComponents:Column header_title="Data2">%%data2%%</is:DataGridComponents:Column>
</is:DataGridComponents:Columns>
<is:DataGridComponents:DataGridFooter>
<is:DataGridComponents:Pager id="pager_id" data_provider="pager_data_provider" for_component="data_grid_id" />
<is:Containers:Box id="footer_box_id" data_provider="footer_box_data_provider">Text: %%data%%</is:containers:box>
</is:DataGridComponents:DataGridFooter>
</is:DataGridComponents:DataGrid>
</is:Containers:Box>
<is:PageComponents:Script location="onready">
{literal}
// Insert literal JavaScript code here for the page
{/literal}
</is:PageComponents:Script>
{include file="path/file1.tpl"}
{include file="path/file2.tpl"}
</is:PageComponents:Template>
答案 0 :(得分:0)
当我在比赛中使用/
代替\
时,我的两种模式都能正常运作。
更正的模式是:
+<is:PageComponents:Script[^>]*\(/\)\@<!>+
和
+<is:PageComponents:Script[^>]*[^/]>+
。