vim構文領域:文字列を開始/終了パターンとして使用するには?

vim構文領域:文字列を開始/終了パターンとして使用するには?

私の文法ファイルの1つに次の内容を追加したいと思います。

let s:mask1="some chars here"
let s:mask2="and some chars here"

syntax region MyOwnRegionName start=s:mask1 end=s:mask2

s:mask1(アイデアは、複数の地域定義に変数を使用することです。)

しかし、それは動作しません。 Vimは次のエラーを報告します。

E402: Garbage after pattern: s:mask1 end=s:mask2
E475: Invalid argument: bmlRecsOps start=s:mask1 end=s:mask2

私はこの問題を解決しました。

execute 'syntax region MyOwnRegionName start=/'.s:mask1.'/ end=/'.s:mask2.'/'

しかし、なぜそれがどのように機能するのかよく理解していません。これが正しいアプローチかどうかはわかりません。コマンドを含む文字列を準備します。ここに何か問題があります。それともそうでしょうか?

答え1

Vimの評価規則は、一般的なプログラミング言語の評価規則とは異なります。最大前のコマンド変数を受け入れませんが、リテラル値を期待します。これにより、コマンドを対話的に実行する方が便利になり、文字列参照は不要です。

Vimscriptで正しく発見されたように:execute。すべてのパラメータを評価し、結果文字列をExコマンドとして実行します。文字列の連結が扱いにくい場合は、printf()変数の内容をコマンドに入れる方法を使用することもできます。

関連情報