如何让emacs识别单引号在字体锁定模式下不是字符串开始/结束标记

aar*_*ron 6 emacs elisp

我有一个预处理器(xhp),允许我在php代码中编写不带引号的文本,例如:

<foo>
    my enemies' base
</foo>
Run Code Online (Sandbox Code Playgroud)

可能会出现在.php文件中,但只要emacs看到该单引号,它就会将整个文件的其余部分视为字符串.

  • 我无法弄清楚'font-lock-syntactic-keywords'在(c-mode)中设置的位置,但它有一个与之关联的语法表,似乎会导致这种情况
  • (c-in-literal)也返回'字符串,所以也许我需要在代码中解决这个问题,而不是在字体锁定级别,如果有人对此有任何提示,将不胜感激

我最满意的最简单的解决方案就是假设字符串只是一行.

Ste*_*fan 4

我不知道你正在使用什么主要模式,但一般来说,技巧是用(modify-syntax-entry ?\' "." <syntaxtable>). 当然,如果 ' 字符有时可以分隔字符串,有时则不能,那么这就更棘手了,您需要提出一个font-lock-syntactic-keywords(或syntax-propertize-function) 规则来告诉在任何给定点使用哪个字符。

例如,假设 PHP 从不将 ' 视为字符串分隔符,类似以下内容可能会解决您的问题:

(add-hook 'php-mode-hook
          (lambda () (modify-syntax-table ?\' ".")))
Run Code Online (Sandbox Code Playgroud)