Emacs字体锁定关键字中的单词边界

时间:2013-09-22 19:39:33

标签: emacs elisp font-lock

如果在暂存缓冲区中粘贴和评估,则以下代码无法在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))

1 个答案:

答案 0 :(得分:1)

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

  • @wvcvw建议:查看字符23的语法类别。

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

顺便说一句,你说它在“文本缓冲区”中不起作用,但这意味着什么?从emacs -Q开始,在text-mode的缓冲区中评估您的代码会显示 的工作原理。调查你的“文本缓冲区”模式是什么,并尝试上面的建议(必要时都是子弹,但先尝试第二个)。

相关问题