下面的代码无法在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))
模式可以定义其自己的chartables,其中字符的含义可以被不同地定义(分配给不同的字符类)。特别是连字符,下划线,印记符号(有些时候会计入单词组成部分,有时不计算在内)的符号会受到局部修改。您应该检查模式本地图表,并查看哪些sytnax类被分配给正在讨论的角色。 – 2013-09-22 20:29:35
@wvxvw'M-x describe-syntax'表示用于ASCII连字符的语法类是符号类,既在lisp交互模式下(临时缓冲区)也在文本模式下,在'emacs -Q'中。 –
不久之前,我遇到了类似的问题。如果您尝试用'\\ <' '\\>'或'\\ _ <' and '\\_>'替换'\\ b',该怎么办?我不记得有什么不同。 – 2013-09-23 13:35:19