1

emacs lisp モードでは、すべての関数呼び出しを 1 つの色で強調表示し、すべての引用符を別の色で強調表示したいと考えています。たとえば、 では(foo 1 2 'bar)、foo を色 1 で強調表示し、'bar を色 2 で強調表示する必要があります。

以下のコードでこれを行うことができましたが、リストが引用されているときにリストの最初のシンボルも強調表示されています。たとえば、 では'(nil a b c)、nil を関数呼び出しとして強調表示してはならず、そのリスト内のすべての項目を引用符で囲んだ記号 (色 2) として強調表示する必要があります。

(defface font-lock-func-face 
    '((nil (:foreground "#6fc2ef"))
      (t (:bold t :italic t)))
  "Font Lock mode face used for function calls."
  :group 'font-lock-highlighting-faces)

(defface font-lock-quoted-face 
    '((nil (:foreground "#e1a3ee"))
      (t (:bold t :italic t)))
  "Font Lock mode face used for function calls."
  :group 'font-lock-highlighting-faces)

(font-lock-add-keywords 
 'emacs-lisp-mode
 '(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
    1 'font-lock-func-face)))

(font-lock-add-keywords
 'emacs-lisp-mode
 '(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-quoted-face)))

私がここで見ているものの画像もあります: http://imgur.com/Iluku05

4

1 に答える 1

1

答えの最初の部分: パッケージlisp-extra-font-lockは、特に引用された式を強調表示します。

また、次のことも強調しています。

  • 関数のパラメーターリスト内の変数と によってバインドされた変数letなどpcase。通常のローカル変数と によって定義されたグローバル変数defvarを異なる色を使用して区別します。
  • 逆引用符で囲まれた式 (およびすべての,- および -,@エスケープされた部分式の強調表示を解除します)

例えば: ここに画像の説明を入力

答えの2番目の部分:

パッケージを使用する場合、関数を強調表示するためのルールは、パッケージを有効にした後に最後のlisp-extra-font-lockルールとして追加すると、投稿したとおりに機能します。そうすれば、他のハイライトを上書きしません。

(font-lock-add-keywords 
 'emacs-lisp-mode
 '(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
    1 'font-lock-func-face))
 'append)    ;; <-- Add after all other rules
于 2016-04-15T14:31:16.067 に答える