Vim で reStructuredText 用の軽量な構文ファイルを作成しようとしています。まず、リテラル ブロックは、行末に "::" があると開始します。
I'll show you some code::
if foo = bar then
do_something()
end
Literal blocks end when indentation level is lowered.
ただし、リテラル ブロックは、インデントされているがリテラルではない他の構造内にある場合があります。
.. important::
Some code for you inside this ".. important" directive::
Code comes here
Back to normal text, but it is indented with respect to ".. important".
問題は、インデントを検出する領域をどのように作成するかです。私は次のルールでそれを行いました:
syn region rstLiteralBlock start=/^\%(\.\.\)\@!\z(\s*\).*::$/ms=e-1 skip=/^$/ end=/^\z1\S/me=e-1
これはかなり問題なく動作しますが、問題があります。「開始」によって一致する必要がある行に表示される一致または領域は、構文規則を引き継いでしまいます。例:
Foo `this is a link and should be colored`_. Code comes here::
状況を引き継ぐ「リンク」ルールがあるため、私のルールは機能しません。これは、ms
およびme
一致するパラメーターが、行全体に色を付けるだけなので、それらを取り除くことができないためです。
それについて何か助けはありますか?
ありがとう!