在Emacs中,我希望在emacs lisp中使用带引号的符号,比如:'blah,然后用不同的颜色显示它们。如何使用font-lock模式执行此操作?
发布于 2012-12-17 22:42:46
尝试:
(font-lock-add-keywords 'emacs-lisp-mode
'(("'[-a-zA-Z_][-a-zA-Z0-9_]*\\>" 0 'font-lock-constant-face)))或者(如果您不想让报价着色):
(font-lock-add-keywords 'emacs-lisp-mode
'(("'\\([-a-zA-Z_][-a-zA-Z0-9_]*\\)\\>" 1 'font-lock-constant-face)))这将不会对注释或字符串中的内容进行着色,因为它们在前面是着色的,并且font-lock (默认情况下)不会对内容进行重新着色。
发布于 2013-09-02 20:58:01
下面的代码将为引号本身和后面带有不同面孔的符号启用语法突出显示。如果需要,还可以自定义这两个面。您可能还希望能够轻松地发现'(hello world)和(hello world)之间的差异。因此,仅突出显示引号可能还不够,因此代码中注释掉的部分用于突出显示引号后面的左括号。它们被注释掉了,因为我认为它与其他以不同颜色突出显示嵌套括号的包不兼容,而您很可能正在使用这些包中的一个。
(defface my-lisp-quoted-symbol-face
'((t :inherit font-lock-constant-face))
"Face for Lisp quoted symbols.")
(defface my-lisp-quote-face
'((t :inherit warning))
"Face for Lisp quotes.")
;; (defface my-lisp-quoted-open-paren-face
;; '((t :weight bold
;; :inherit my-lisp-quoted-symbol-face))
;; "Face for Lisp quoted open paren.")
(defvar my--lisp-quote-regexp
(rx (group "'")
(or symbol-start
(group (syntax open-parenthesis)))))
(defvar my--lisp-quoted-symbol-regexp
(rx "'" (group (+ (or (syntax symbol)
(syntax word))))))
(dolist (mode (list 'emacs-lisp-mode
'lisp-mode))
(font-lock-add-keywords mode
`((,my--lisp-quote-regexp
(1 'my-lisp-quote-face)
;; (2 'my-lisp-quoted-open-paren-face nil t)
)
(,my--lisp-quoted-symbol-regexp
1 'my-lisp-quoted-symbol-face))))使用defface和rx使代码更加冗长。defface的好处是很容易定制面孔。当您尝试为其他目的修改此代码时(例如,如果您想让它也注意反引号),rx的好处就来了。
https://stackoverflow.com/questions/13908192
复制相似问题