2

ネスト可能な構文と一致させるための一連の構文規則を作成しようとしています。基本的に、最も単純なレベルでは、すべてがトークンまたはブラケットのいずれかです。このような構文の例を次に示します。

[
    [a b c]
    [1 2 3]
    [foo
        [bar baz]]
]

各「リスト」の最初の要素に色を付けたいので、この場合a1、、、、、fooおよびbar。また、各リストの2番目の要素に色を付けたいのですが、方法は異なります。この場合b、、、、2およびbaz。私は他に何も気にしません。空白以外の項目間に区切り文字はありません。

vimパターンシステムでこれを行うにはどうすればよいですか?単純なシステムを機能させることができましたが、ネストされたリストの処理が不十分です。私が抱えている問題は、各リストの最初の項目と2番目の項目を、他の項目とねじ込むことなく、確実に個別に一致させることです。

何か助けはありますか?

4

1 に答える 1

2

次の一連のルールは、構文を強調しています。

highlight       FirstToken      ctermfg=green       guifg=green
highlight       SecondToken     ctermfg=red         guifg=red

syntax region   FirstTuple      start="\(\[\_s*\)\@<=\["    end="]"
            \ containedin=FirstTuple,OtherTuple
            \ nextgroup=SecondToken
            \ skipwhite skipnl skipempty
syntax region   OtherTuple      start="\(\[\_s*\)\@<!\["    end="]"
            \ containedin=FirstTuple,OtherTuple

syntax match    FirstToken      "\(\[\_s*\)\@<=[^ [\]]\+"
            \ containedin=FirstTuple,OtherTuple
            \ nextgroup=SecondToken
            \ skipwhite skipnl skipempty
syntax match    SecondToken     "[^ [\]]\+"
            \ contained

リージョンは、トークンまたは他のタプルのいずれかのタプルと一致します。これらFirstTupleは、親タプルの最初のものです。OtherTuple他のすべてのタプルに使用されます。これは相互に排他的な後読みを介して行われ、適切なネストは自動的に処理されます。FirstTokenポジティブルックビハインドを使用して、リージョンの先頭でのみ一致します。FirstTokenそしてFirstTuple、属性を使用して、空白、改行、および空の行を無視して、直後nextgroupに一致を試みます。属性を使用して、それ自体でどこでも一致しないようにします。SecondTokenSecondTokencontained

于 2013-01-18T23:00:43.587 に答える