私はついにYIに追加したいGitCommitメッセージモードを具体化することに戻りましたが、基本的なものが欠けているようです。文法の1つの文字に一致するようには見えません。すべてのルールは、行全体に一致する場合にのみ機能します。YIの他の文法は明らかにこれを行うので、これが可能でなければならないことを私は知っていますが、同じことをすることはうまくいかないようです。
最終的にvimのものと非常によく似たコミットモードが欲しいです。vimのモードで役立つものの1つは、コメント内で強調表示されるキーワードです。Gitは、実行するほとんどすべてのこと(コミット、リベースなど)のコメント内に大量の情報を入れるので、これは便利です。私の考えは、gitコメントの最初の「#」文字と一致し、キーワードと一致する別のコンテキストに切り替えることでした。ただし、「#」だけに一致するルールを作成できないようです。ルールは、「#」のみを含む行ではコメントスタイルに切り替わりますが、「#」の後に何かを含む行ではスタイルが切り替わりません。
私が今持っているのは:
<0> {
\# { m (const $ LineComment) Style.commentStyle }
$commitChars*$ { c Style.defaultStyle }
}
<lineComment> {
$nl { m (const Digest) Style.defaultStyle }
· { c Style.regexStyle }
}
詳細は明らかに省略。アイデアは、「#」が表示されたら「lineComment」モードに切り替え、行の終わりが表示されるまでスタイルを変えることです。ドキュメントと例によると、私がやりたいことをする方法があるはずです。'#'パターンについて考えられるほとんどすべての順列を試しましたが、表示されている動作は何も変わりません。
私が見逃している明らかなことは何ですか?
編集:上記のコードは、私のYIブランチ内の実装からのものです。ここで同じ問題を示すスタンドアロンのパーサーがあります。実行alex GitCommit.x && ghc --make GitCommit.hs && ./GitCommit < shortmsg
すると、コンテンツが解析されたコメント行とMessageLine
、正しくマークされた空のコメント行が表示されCommentStart
ます。