Emacs模式:如何指定方括号中的内容应着色

6

我编写了一个简单的 Emacs 模式。我如何明确指定,所有方括号内的内容都应该被标记颜色?就像这样:

( (if thing is in square brackets) . font-lock-string-face)
3个回答

6

我假设你正在编写一个主模式,但是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
)

3
所以这是一个摘要: 要将新关键字添加到模式中。
(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")

2

要么你必须扩展你所在的模式以包含一个新的语法规则,要么你可以简单地使用highlight-regexp进行快速而粗略的高亮。


扩展模式 - 这就是我想要的。我要扩展的模式是一个简单的模式 - 也是由我编写的(它具有通过 dwim 的制表符完成、语法高亮和智能注释)。hightlight-regexp 肯定会起作用。感谢您的回答。 - Adobe
我已经扩展了基本的Markdown模式这里。您可以查看该模式进行了解。它不会执行任何语法高亮,但是您可以通过在您的模式中添加到“font-lock-defaults”变量来实现。 - Noufal Ibrahim
顺便问一下:我该如何指定颜色?这个代码没有指定颜色:(highlight-regexp "\\[\\(.+?\\)\\]" 'hi-red) - Adobe
它将使用一个“face”,你需要进行“自定义”。 - Noufal Ibrahim
好的 - 是的。但是我如何使用命令指定:(highlight-regexp REGEXP &optional FACE)?因为我正在编写一个模式... - Adobe
1
如果你正在编写一个模式,请不要使用highlight-regexp。请使用font-lock-rule。 - Noufal Ibrahim

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