如果在暂存缓冲区中粘贴和评估,则以下代码无法在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 \b23\b
仍与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的荧光笔是否形成不良。如果形成不良或无声地发出错误信号,则不会突出显示结束。
;;; 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))
答案 0 :(得分:1)
事实上它不在缓冲区*scratch*
中表明它是当前模式的问题。主要有两种可能性:
@wvcvw建议:查看字符2
和3
的语法类别。
已为模式定义的font-lock-keywords
与您的代码互动 - 例如,它们会覆盖它。尝试将'APPEND
作为第三个参数添加到font-lock-add-keywords
。尝试将t
作为HIGHLIGHT
表达式添加到您的荧光笔性别(请参阅文档)。这应该让你的突出显示覆盖任何可能已存在的内容。
emacs -Q
开始,在text-mode
的缓冲区中评估您的代码会显示 的工作原理。调查你的“文本缓冲区”模式是什么,并尝试上面的建议(必要时都是子弹,但先尝试第二个)。