在Emacs中,我正在编写一个PHP文件,该文件混合了PHP和非PHP代码,它将处于C++模式。我希望用链接粉红色背景突出显示PHP代码,以使其在视觉上脱颖而出。
为此,我使用字体锁定设置:
(make-face 'font-lock-special-macro-face)
(set-face-background 'font-lock-special-macro-face "pink")
(defun add-custom-keyw()
"adds a few special keywords for c and c++ modes"
;
(font-lock-add-keywords nil
'(
("<\?[^\?]*\?>" . 'font-lock-special-macro-face )
; more of those would go here
)
)
)
(setq font-lock-multiline t)
(add-hook 'c++-mode-hook 'add-custom-keyw)
正则表达式表达式与典型的 PHP 标签及其包含的文本匹配。但是,如果 PHP 块的主体中有任何字符串文字,则突出显示将失败。我认为这是因为上面定义的面与字符串文字的颜色冲突,默认情况下字符串文字是彩色文本。
我应该怎么做才能解决此问题?如果可能的话,我想保留两种配色方案(突出显示和彩色字符串文字)。
下面是一个示例:
代码<?= $className ?>
以粉红色背景突出显示。
代码<?= inputs_to_vector($factors, 'factors') ?>
没有突出显示的背景,字符串文本'factors'
以红色文本显示。
无论使用前导 PHP 标记<?
还是<?=
,都会发生这种情况。
试试这个来代替你拥有的 sexp:
'("<\?[^\?]*\?>" 0 font-lock-special-macro-face t)
^
最后一部分t
表示此突出显示应覆盖同一文本的任何现有突出显示。