Fountain.io マークアップ言語の既存の構文ファイルに vim の折りたたみを実装しようとしています。既存の構文ファイルはこちら: http://www.vim.org/scripts/script.php?script_id=3880
しかし、私が何をしても、折り畳み領域は期待したところで終わりません。検索で正規表現をテストすると、正規表現は完全に機能します。しかし、構文領域で使用すると、一連のネストされた折り畳みが作成されました。折りは適切な行から始まり、既存の折りの内側に次の折りが作成されます。基本的に、INT または EXT で始まる任意の行で折り畳みが始まり、行が TO: で終わるか行が >: で始まる後に終了するように、次のことを試みました。
syn region fountainScene start="^\(INT\|EXT\)" end="^\(\(\L\)* TO:\|\s*>\(.*\)\)$" fold transparent contains=fountainCharacter,fountainDialogue,fountainParenthetical,fountainSceneHeading,fountainTransition
さらに奇妙なことに、「end」引数で \ze を使用して、一致した行の前の行を取得すると、期待どおりに機能します。マッチの上の行で折り目を止め、最後の行を折り目の外側に残します。以下は、「CUT TO:」と書かれた行の上で折り畳みを停止します。
\n\ze\(\L\)* TO:\n
トラブルシューティングを行うために、基本的に構文ファイルをゼロから再構築し始めました。これまでのファイルの内容 (hi コマンドを除く) は、相互に重複しないように正規表現を大幅に変更しました。元の正規表現にはこの問題があり、それが原因である可能性があると思いました:
syn match fountainCharacter "^\(\s\)*\n\zs\(INT\|EXT\)\@!\(\L\)*[^:]$"
syn region fountainDialogue matchgroup=fountainCharacter start="^\(\s\)*\n\zs\(INT\|EXT\)\@!\(\L\)*[^:]$" end="^\s*$" contains=fountainCharacter,fountainParenthetical
syn match fountainParenthetical "^\s*\((.*)\)$"
syn region fountainSceneHeading start="^\(INT\|EXT\)" end="$" contains=fountainSceneNumber,fountainBoneyard,fountainNotes
syn match fountainTransition "^\(\L\)* TO:$"
syn region fountainScene start="^\(INT\|EXT\)" end="\n\ze\(\L\)* TO:\n" fold transparent contains=fountainCharacter,fountainDialogue,fountainParenthetical,fountainSceneHeading
ご協力いただきありがとうございます。不明な点がありましたらお知らせください。私はPythonサポートでカスタムコンパイルされたMacVimバージョン7.3.646を使用しています。