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



如果在临时缓冲区中粘贴和计算,则以下代码无法突出显示2323-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建议:检查字符23的语法类是什么。

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

顺便说一句,你说它在"文本缓冲区"中不起作用,但这是什么意思? 从 emacs -Q 开始,在 text-mode 的缓冲区中计算代码表明它确实有效。 调查您的"文本缓冲区"模式是什么,并尝试上述建议(如有必要,两个项目符号,但请先尝试第二个项目符号)。

相关内容

  • 没有找到相关文章

最新更新