突出显示函数调用,但不是emacs中引用列表中的第一个

时间:2016-04-15 09:39:58

标签: emacs syntax-highlighting emacs-faces

在emacs lisp模式中,我想强调所有函数调用一种颜色,所有引用符号另一种颜色。例如,在(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

1 个答案:

答案 0 :(得分:1)

答案的第一部分:包lisp-extra-font-lock突出显示引用的表达式。

它还强调:

  • letpcase等约束的函数和变量的参数列表中的变量。它通过使用不同的颜色区分正常局部变量和defvar定义的全局变量。 / LI>
  • 回溯引用的表达式(并取消突出显示所有, - 和,@ - 转义的子表达式)

例如: enter image description here

答案的第二部分:

如果您使用lisp-extra-font-lock软件包,则在启用软件包后,如果您将其添加为 last 规则,则突出显示功能的规则会在您发布时起作用。这样它就不会覆盖任何其他亮点:

(font-lock-add-keywords 
 'emacs-lisp-mode
 '(("(\\s-*\\(\\_<\\(?:\\sw\\|\\s_\\)+\\)\\_>"
    1 'font-lock-func-face))
 'append)    ;; <-- Add after all other rules