【问题标题】:How can I syntax highlight a custom self closing script tag in vim?如何在 vim 中语法突出显示自定义的自关闭脚本标记?
【发布时间】:2012-06-29 20:25:58
【问题描述】:

我知道 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

我遇到的问题是突出显示区域“溢出”直到文件结尾或下一个结束脚本标记。

我已尝试将 start 更改为:+&lt;is:PageComponents:Script[^&gt;]*\(\\\)\@&lt;!&gt;++&lt;is:PageComponents:Script[^&gt;]*[^\\]&gt;+,两者都没有区别。据我了解正则表达式,消极的lookbehind应该是一个理想的解决方案,一个字符匹配应该迫使贪婪的明星退出一个字符,导致失败。将 * 替换为 \{-} 以获得相同的结果。我错过了什么?

如果相关,我在 Cygwin 的 mintty 中运行 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>

【问题讨论】:

  • 您忘记了您的语言示例。

标签: vim syntax-highlighting dsl


【解决方案1】:

当我在比赛中切换到使用 / 而不是 \ 时,我的两种模式都能正常工作。

修正后的模式是: +&lt;is:PageComponents:Script[^&gt;]*\(/\)\@&lt;!&gt;++&lt;is:PageComponents:Script[^&gt;]*[^/]&gt;+.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多