如果在临时缓冲区中粘贴和计算,则以下代码无法突出显示23
的23-23
,但如果在文本缓冲区中完成,则不会突出显示。
;; Example 1
'(1234 23 23-23 end)
(progn
(font-lock-add-keywords nil
`(("\b23\b"
(0 'success))
"end"))
(font-lock-fontify-buffer))
为什么当M-x isearch-forward-regexp RET b23b
仍然匹配23
23-23
时它会失败?
即使我更改为以下代码,也只会突出显示23-23
中的第一个23
。
;;; Example 2
'(1234 23 23-23 end)
(progn
(font-lock-add-keywords nil
`((,(rx (or word-boundary
"-")
(group "23")
(or word-boundary
"-"))
(1 'success))
"end"))
(font-lock-fontify-buffer))
旁注:"结束"在那里,以便我可以检测 23 的荧光笔是否格式不正确。如果格式不正确或以静默方式发出错误信号,则 end 不会突出显示。
;;; Example 3 (with xy instead of 23. also passing t and 'append.)
;;; if evaluated in the scratch buffer, it doesn't highlight xy in xy-xy
'(wxyz xy xy-xy end)
(progn
(font-lock-add-keywords nil
`(("\bxy\b"
(0 'success t))
"end")
'append)
(font-lock-fontify-buffer))
它不在缓冲区*scratch*
中的事实表明这是当前模式的问题。 主要有两种可能性:
-
@wvcvw建议:检查字符
2
和3
的语法类是什么。 -
已经为模式定义的
font-lock-keywords
与您的代码交互 - 例如,它们覆盖它。 尝试将'APPEND
作为第三个参数添加到font-lock-add-keywords
。 尝试将t
作为HIGHLIGHT
表达式添加到荧光笔 sexp 中(请参阅文档)。 这应该让您的突出显示覆盖任何可能已经存在的内容。
顺便说一句,你说它在"文本缓冲区"中不起作用,但这是什么意思? 从 emacs -Q
开始,在 text-mode
的缓冲区中计算代码表明它确实有效。 调查您的"文本缓冲区"模式是什么,并尝试上述建议(如有必要,两个项目符号,但请先尝试第二个项目符号)。