在Emacs中锁定和字符串字面着色
在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
表示此突出显示应覆盖相同文本的任何现有突出显示。