4

基本モードから派生モードを書こうとしています。この regexp : があると仮定すると、A ((foo)bar)? Bemacs に次のフェイスを使用するように指示するにはどうすればよいでしょうか?

  • font-lock-keyword-faceの上A
  • font-lock-warning-faceオンfoo(ただし ではないbar)
  • font-lock-constant-faceの上B

私はこの次のコードを使用しようとしました:

(defvar myregexp
  "\\(A\\) \\(?:\\(foo\\)bar \\)?\\(B\\)")

(setq mylang-font-lock-keywords `(
  (, myregex 1 font-lock-keyword-face)
  (, myregex 2 font-lock-warning-face)
  (, myregex 3 font-lock-constant-face)
))

ただし、文字列では機能しませんA B(emacs は欠落したキャプチャを報告します)。

4

2 に答える 2

4

laxmatch を有効にして subexp 蛍光ペンを使用して、font-lock-mode が一致の欠落グループを無視するようにします。

(setq mylang-font-lock-keywords
      `((,myregexp (1 font-lock-keyword-face)
              (2 font-lock-warning-face nil t)
              (3 font-lock-constant-face))))

各 subexp ハイライターの 4 番目の要素はlaxmatch引数です。tの一致結果で最初の要素の対応するグループが見つからない場合、font-lock-mode はこの蛍光ペンを無視しますmyregexp

詳細については、Emacs Lisp マニュアルの検索ベースのフォント化を参照してください。

于 2012-11-05T09:54:25.553 に答える
0

A正規表現の指定方法では、 と の間に2 つのスペースが必要ですB。オプションの foobar パーツ内の 2 番目のスペースをプルするか、その後に or を使用*?ます。

于 2012-11-04T12:07:12.597 に答える