4

Direct3Dの構文ファイルを作成していますが、属性に問題があります。

[unroll]
for(int i = 0...)

ここで、「展開」は属性です。正規表現を使用して、角かっこ内のいくつかのキーワードを検索し、それらを属性として識別しています。私が使用している正規表現は、開き角括弧の前にスペースがない場合を除いて、機能します。

[unroll] // does not work
 [unroll] // works

少なくとも1つある限り、角括弧を開く前の空白(またはタブ)の数は関係ありません。

これは、私が使用している正規表現(展開のみに一致するように簡略化されています)です。

syn match hlslAttribute /^\s*\[unroll\]/

使用する場合も同じ問題:

syn match hlslAttribute /.*\[unroll\]/

編集:コメントで述べられているように:ファイルの検索中は機能しますが、構文の強調表示のパターンを一致させるときは機能しません。

現在の構文強調表示ファイルは次の場所にあります:http://pastebin.com/zr1bGLt0

.fxまたは.hlslファイルの構文ハイライトを有効にするには、hlsl.vimファイル(pastebinにあるファイル)をVimインストールの構文ファイルの場所(/ syntax:/ usr / share / vim / vim73 /)にコピーする必要があります。構文/)そしてこの行を.vimrcに追加します:

autocmd BufNewFile,BufRead *.fx,*.fxc,*.fxh,*.hlsl set ft=hlsl

次に、前の拡張子の1つを使用してファイルを作成し、次のように記述します。

[unroll]
 [unroll]

2番目の線はすべて同じ色になりますが、最初の線は同じ色になりません。どちらも2番目のようにする必要があります。

4

1 に答える 1

2

コメントで理解しているように、多くの場合、原因は別の構文グループの干渉です(あなたの場合、別のプラグイン、RainbowParenthesisによる)。これが同じ構文の一部である場合、ネスト階層を変更することで問題を修正できることがよくありますが、外部プラグインを使用すると、おそらく運が悪いでしょう。

問題は、Vimがハイライト:syntax(バッファにバインドされている)とウィンドウにバインドされている:match/の2つのメカニズムしか提供していないことです。matchadd()したがって、バッファのカスタム強調表示が必要な場合は:syntax、ファイルタイプの構文を使用して干渉のリスクを冒すか、matchadd()複雑なautocmdを使用して使用し、現在のバッファにのみ適用する必要があります。

于 2012-12-28T00:34:28.270 に答える