在Elisp中对引用符号应用字体锁定

5

在Emacs中,我希望像这样的emacs lisp引用符号:'blah以不同的颜色显示。我该如何使用font-lock模式实现这一点?

2个回答

5

尝试:

(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(默认情况下)不会重新对其进行着色。


谢谢!我会将其应用于我的模式中。 - Diego Sevilla

1
以下代码将启用引号本身和后面的符号具有不同外观的语法突出显示。如果需要,您还可以自定义这两个外观。您可能还希望能够轻松地区分'(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的好处就会发挥作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接