以下代码将通过将 progn 表单传递给字体锁定关键字来直观地将“hello world”替换为“HW”。
(font-lock-add-keywords
nil '(("\\(hello world\\)"
(0 (progn (put-text-property (match-beginning 1) (match-end 1)
'display "HW")
nil)))))
我已经调查过C-h v font-lock-keywords
这是否是字体锁定的记录功能。hello world 元素似乎是这种形式:
(MATCHER HIGHLIGHT ...)
这意味着这(0 ...)
是HIGHLIGHT,医生说
HIGHLIGHT should be either MATCH-HIGHLIGHT or MATCH-ANCHORED.
和
MATCH-HIGHLIGHT should be of the form:
(SUBEXP FACENAME [OVERRIDE [LAXMATCH]])
所以我猜 0 是 SUBEXP 并且(progn ...)
是 FACENAME。但是如果(progn ..)
是一个有效的 FACENAME,下面的代码会起作用,但它不起作用。
;; (MATCHER . FACENAME)
(font-lock-add-keywords
nil '(("goodbye lenin"
. (progn (put-text-property (match-beginning 1) (match-end 1)
'display "GL")
nil))))
这让我想到了第一个代码如何工作以及它是否依赖于未记录的功能的问题。
更新:
旁注:更简单的视觉替换方法,没有字体锁定错误
(font-lock-add-keywords
nil '(("my llama"
(0 (progn (put-text-property (match-beginning 0) (match-end 0)
'display "ML")
nil)))))