長さで区切られたフィールドを強調するVim構文

長さで区切られたフィールドを強調するVim構文

SVNダンプファイル用のvim構文ファイルを作成しようとしています。私が知らない部分はこんな感じです。

Fooprop: Val1
Text-content-length: 20
Barprop: Val2
                                       <- Blank line
abcdefghi
abcdefghi

Next-item-prop: Val3

「テキスト内容の長さ:N」の後に最初の空白行の後にN文字が続きます。ここで、Nは数字です。」という構文規則をどのように設定しますか?

ベストアンサー1

他の正規表現でテキストの長さを引用する必要があります。 Vimは(Perlとは異なり)正規表現内でVimscript式を評価することはできません。メタプログラミングつまり、文法規則を動的に構成します。

:execute 'syntax match svndumpData /^\n\_.\{' . length . '}/'

\_.この単純なスケッチは、すべての文字(改行文字を含む)を複数回一致させるために使用されます\{N}。改行(CR-LF対LF)の長さとエンコード(文字数がこれを示すバイト数と必ずしも同じではありません!)に注意する必要があります。

これは、各インスツルメンテーションが文法プラグインを取得し、現在のバッファに適用されるために機能します。

選ぶ

これは非常に複雑で、文字の長さの代わりにバイト数(正規表現原子なし)がある場合は機能しない可能性があるため、常に埋め込まれた文字数を無視して属性の一部のみを定義する実用的な80%のソリューションがあります。構文領域を囲んでいます。すべてのケースでは正確ではありませんが、ほとんどのデータでは機能します。

おすすめ記事