从以下文档font-lock-keywords
:
MATCH-HIGHLIGHT 应采用以下形式:
(SUBEXP FACENAME [覆盖 [LAXMATCH]])
OVERRIDE 和 LAXMATCH 是标志。如果 OVERRIDE 为 t,则可以覆盖现有的字体。如果keep', only parts not already
fontified are highlighted. If
prepend' 或 'append',则现有字体与新字体合并,其中新字体或现有字体分别优先。
换句话说,如果你放弃t
after 'success,它将不再使注释和字符串中的美元符号字体化。
编辑:
显然,在这种情况下,上述解决方案是不够的,可能是因为之前美元符号已使用另一面着色。
一种可行的方法是不将 HOW 参数(当前t
)传递给font-lock-add-keywords
. 这意味着它们应该被添加到列表的末尾。但是,这可能会导致其他事情停止工作。
如果我们需要更大的锤子,您可以编写更高级的规则来检查当前的字体化,并决定对此做什么。例如,Emacs 使用以下内容在字符串中位于第 0 列的括号中添加警告面:
"^\\s("
(0
(if
(memq
(get-text-property
(match-beginning 0)
'face)
'(font-lock-string-face font-lock-doc-face font-lock-comment-face))
(list 'face font-lock-warning-face 'help-echo "Looks like a toplevel defun: escape the parenthesis"))
prepend)
第三种方法是将正则表达式替换为可以(rx "$")
搜索$
并检查它是否出现在正确上下文中的函数名称。可以在标准 Emacs 包中找到此类字体锁定规则的一个示例cwarn
。