1

如果在暂存缓冲区中粘贴和评估,则以下代码无法突出显示23's 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 的荧光笔是否形成不良。如果格式不正确或无提示地发出错误信号,则 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))
4

1 回答 1

1

它不在缓冲区中的事实*scratch*表明这是当前模式的问题。主要有两种可能性:

  • @wvcvw 建议:检查 chars2和的语法类3是什么。

  • 已经为模式定义的font-lock-keywords模式与您的代码交互——例如,它们覆盖它。尝试将'APPEND第三个参数添加到font-lock-add-keywords. 尝试将t表达式添加HIGHLIGHT到您的荧光笔性别中(请参阅文档)。这应该让您的突出显示覆盖任何可能已经存在的内容。

顺便说一句,您说它在“文本缓冲区”中不起作用,但这意味着什么?从 开始emacs -Q,在缓冲区中评估您的代码text-mode表明它确实有效。调查您的“文本缓冲区”模式是什么并尝试上面的建议(如果需要,两个项目符号,但先尝试第二个)。

于 2013-09-22T23:46:01.140 回答