私が使用しているカスタムフォーマット用に新しいvim構文ファイルを修正しようとしています。そのほとんどは理解できますが、キーワード「含まれています」が問題になっています。Vimの構文ファイル... "contains"を理解しようとしています
ここには、彼がそれを木に説明しているかのように、私はそれが何をしているのか説明してもらえますか?
私が使用しているカスタムフォーマット用に新しいvim構文ファイルを修正しようとしています。そのほとんどは理解できますが、キーワード「含まれています」が問題になっています。Vimの構文ファイル... "contains"を理解しようとしています
ここには、彼がそれを木に説明しているかのように、私はそれが何をしているのか説明してもらえますか?
一般に、1つの構文強調表示方法は1か所にしかありません。したがって、Cのような構文を例として使用するには、開始中括弧 '{'で始まり閉じ括弧 '}'で終わる領域を定義すると、その領域の構文強調表示は同じになります。
contains=
を使用すると、他の構文強調表示グループを外部グループに含めるように設定できます。前の例に従うには、外側の領域にある場合でも、int
を強調表示する必要があります。
syn keyword Keyword int
syn region BraceBlock start='{' end='}' contains=Keyword
これは、後で含まれるキーワードのリストに項目を追加する必要があることはよくあります。これを行うにはいくつかの方法があります。まず、contains=ALL
またはcontains=ALLBUT,Error
を使用して、領域内に何かを許可することができます。
syn region BraceBlock start='{' end='}'
syn keyword Keyword int containedin=BraceBlock
第三に、あなたはこのグループで有効なものとして、「含まれる」何も定義することができます:
最後にsyn region BraceBlock start='{' end='}' contains=CONTAINED
syn keyword Keyword int contained
、あなたを第二に、あなたは別の領域から含まれているに何かをプッシュするcontainedin
を使用することができますどこに行くかを決めるために、それは非常に簡単にするクラスター、使用することができます:あなたが理解したい正確に何を知らない
syn region BraceBlock start='{' end='}' [email protected]
syn keyword Keyword int
syn cluster MyCluster contains=Keyword
syn keyword Conditional if else
syn cluster MyCluster add=Conditional
" Now conditionals and keywords can appear in a BraceBlock
を、私が言って他に何かわからない - 何あなたは達成しようとしているのですか、何が問題を引き起こしていますか?
それで、私が正しく理解するならば、それは言わばルール内の明確なルールの方法です。たとえば、角括弧の間にあるものすべてを一致させてから、角括弧内の選択肢内の「何か」を一致させるための別のルールですか? (私は正しいトレイルにいても)? – Rook
@ldigas:それは良い要約です。内部の "somethings"は、外部グループ内にあることができます(上記の3番目の例のように、内部項目に "contained"キーワードを追加した場合)か、外部グループ内であれ、 「包含」キーワード)。 – DrAl
私に '含有物 'の使用を説明してください。第3のポイントでは、 'syn region BraceBlock start = '{' end = '}'は= CONTAINED'とその下の行を含み、 – Harshiv
$ VIMRUNTIME /構文の既存の構文ファイルを見てください。それらの多くは 'contains'キーワードを使用しています。 –