在 emacs 的引用列表中突出显示函数调用但不是第一个
Highlight function calls but not first in quoted list in emacs
在 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
答案的第一部分:包 lisp-extra-font-lock 突出显示了引用的表达式。
它还强调:
- 函数的参数列表中的变量和
let
、pcase
等绑定的变量,用不同的颜色区分普通的局部变量和defvar
定义的全局变量.
- 反引号表达式(并取消突出显示所有
,
- 和 ,@
- 转义子表达式)
例如:
第二部分答案:
如果你使用 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
在 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
答案的第一部分:包 lisp-extra-font-lock 突出显示了引用的表达式。
它还强调:
- 函数的参数列表中的变量和
let
、pcase
等绑定的变量,用不同的颜色区分普通的局部变量和defvar
定义的全局变量. - 反引号表达式(并取消突出显示所有
,
- 和,@
- 转义子表达式)
例如:
第二部分答案:
如果你使用 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