在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表示此突出显示应覆盖相同文本的任何现有突出显示。

链接地址: http://www.djcxy.com/p/63867.html

上一篇: lock and string literal coloring in Emacs

下一篇: Emacs: Set background color for specific window