1

私は、通常のスクリプト タグが自分で閉じることができないことを知っています。私は、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 を+<is:PageComponents:Script[^>]*\(\\\)\@<!>+、 、およびに変更しようとしまし+<is:PageComponents:Script[^>]*[^\\]>+たが、どちらも違いはありません。私が正規表現を理解している限り、否定的な後読みは理想的な解決策であるはずであり、1文字の一致により、貪欲なスターが1文字を後退させ、失敗に終わったはずです。貪欲でない振る舞いの*をに置き換えても、同じ結果になります。\{-}私は何が欠けていますか?

関連する場合、Cygwin の mintty (タイプは xterm-256color) で vim を実行しています。シェルは 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>
4

1 に答える 1

0

試合/の代わりに使用に切り替えたとき、両方のパターンが正しく機能しました。\

修正されたパターンは +<is:PageComponents:Script[^>]*\(/\)\@<!>+、 および +<is:PageComponents:Script[^>]*[^/]>+です。

于 2012-08-20T20:02:44.760 に答える