関数が次の形式に従う DSL の vim 構文の強調表示を作成しています。
# A function with no arguments
<function>
# A function with arguments
<function(arg1, arg2)>
# A function with text
<function block of normal text>
# A function with args and text
<function(arg1,arg2) text>
# Line breaks are allowed pretty much everywhere.
<function(
arg1,
arg2)
a block of text>
# As is nesting
<function(<subfunc>) Some text with <another(subfunction) etc.>>
# Backslash escape
<function(single arg with a comma: "\,") contained bracket between quotes: "\>">
これはテキスト処理言語 (ステロイドのマークダウンを考えてください) であるため、テキスト ブロックは非制限的でなければなりません。
このためのvim構文ファイルを書くのに苦労しています。
できます
syn region myFunction start='<' end='>' skip='\\>'
syn region myArgs start='(' end=')' skip='\\)'
ただし、次の例では括弧が誤って強調表示されているため、をmyFunction
含めることはできません。myArgs
<function(arg) some text (with parenthesis) that aren't arguments>
具体的には、関数名と引数リストをリージョンのすぐ先頭でのみ強調表示したいと考えています。しかし、私はできません
syn region myFunction start='<(regex to match name and arg list)' ...
恐ろしいことではなかったとしてもregex to match name and arg list
、これにより、ネストされた関数を構文で強調表示する能力が損なわれるためです。
私が欲しいnextgroup
のはstart
a のようなものですがsyntax region
、見つかりません。
これは可能ですか?vimscriptでこれを行うにはどうすればよいですか?