【问题标题】:how can I get emacs to recognize single quotes as not being string begin/end tokens in font-lock mode如何让emacs在字体锁定模式下将单引号识别为不是字符串开始/结束标记
【发布时间】:2012-05-09 00:10:59
【问题描述】:

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

<foo>
    my enemies' base
</foo>

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

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

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

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    我不知道您使用的是什么主模式,但一般来说,诀窍是用(modify-syntax-entry ?\' "." &lt;syntaxtable&gt;) 之类的东西更改 ' 字符的语法。当然,如果 ' 字符有时可以分隔字符串,有时不能,那么它就更棘手了,你需要想出一个font-lock-syntactic-keywords(或syntax-propertize-function)规则来判断在任何给定点使用哪个。

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

    (add-hook 'php-mode-hook
              (lambda () (modify-syntax-table ?\' ".")))
    

    【讨论】:

    • 它是php-mode,它是从c-mode派生的。我的猜测是它以某种方式使用本地语法来匹配字符串,但是 c-mode 设置函数非常复杂,以至于我无法通过它进行调试以找出设置的位置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2012-02-11
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多