1

在 Emacs 中,我正在编写一个混合 PHP 和非 PHP 代码的 PHP 文件,该文件将处于 C++ 模式。我希望 PHP 代码用链接粉红色背景突出显示,以使其在视觉上脱颖而出。

为此,我使用 font-lock 设置:

(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 标记,都会发生这种<?情况<?=

4

1 回答 1

2

试试这个代替你拥有的性别:

 '("<\\?[^\\?]*\\?>" 0 font-lock-special-macro-face t)
                                                    ^

最后一部分,t意味着这个突出显示应该覆盖相同文本的任何现有突出显示。

于 2013-09-10T21:59:13.180 回答