下面的代碼無法在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