我编写了一个简单的 Emacs 模式。我如何明确指定,所有方括号内的内容都应该被标记颜色?就像这样:
( (if thing is in square brackets) . font-lock-string-face)
我假设你正在编写一个主模式,但是font-lock-add-keywords
也可以在次要模式中使用。请查看使用C-h f RET font-lock-add-keywords
命令获取其文档。
(define-derived-mode my-mode text-mode "mymode"
;; some init code
(font-lock-add-keywords nil '(("\\[\\(.*\\)\\]"
1 font-lock-warning-face prepend)))
;; some more init code
)
(font-lock-add-keywords 'emacs-lisp-mode
'(("foo" . font-lock-keyword-face)))
它可以包含正则表达式:
(font-lock-add-keywords 'emacs-lisp-mode '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
这会使方括号中的所有内容都以给定颜色显示:
对于当前模式和当前emacs会话 - 您只需评估以下内容:
(font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
注意 - 您没有在这里指定模式。
如果要使其永久生效,您可以将其作为钩子添加到模式中:
(add-hook 'bk-grmx-mode-hook
(lambda ()
(font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
)
)
(define-derived-mode bk-grmx-mode fundamental-mode
(setq font-lock-defaults '(bk-grmx-keyWords))
;; the next line is added:
(font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
(setq mode-name "bk-grmx-mode")
要么你必须扩展你所在的模式以包含一个新的语法规则,要么你可以简单地使用highlight-regexp
进行快速而粗略的高亮。
hightlight-regexp
肯定会起作用。感谢您的回答。 - Adobe(highlight-regexp "\\[\\(.+?\\)\\]" 'hi-red)
。 - Adobe(highlight-regexp REGEXP &optional FACE)
?因为我正在编写一个模式... - Adobe