1

在 emacs lisp 模式下,我想以一种颜色突出显示所有函数调用,并以另一种颜色突出显示所有引用的符号。例如,在 中(foo 1 2 'bar),foo 应该突出显示颜色 1,而 'bar 应该突出显示颜色 2。

我可以使用下面的代码做到这一点,但是,当引用列表时,它也会突出显示列表中的第一个符号。例如, in '(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区分普通的局部变量和由 a 定义的全局变量。defvar
  • 反引号的表达式(并取消突出显示所有,- 和 -,@转义的子表达式)

例如: 在此处输入图像描述

答案的第二部分:

如果您使用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 回答