【问题标题】:highlight "" in strings for emacs在 emacs 的字符串中突出显示“”
【发布时间】:2011-11-01 14:56:29
【问题描述】:

我是一个 emacs 菜鸟,但不太确定如何找到它。我使用solarized light 颜色主题,这是一个低对比度主题,带有智能口音以保持可读性。他们在 vim 版本中所做的一件事是突出显示字符串分隔符(在某些语言中意味着双引号和单引号),然后以不同的方式突出字符串的其余部分,以使它们更加突出。

主题的 emacs 端口没有这个,但是我看到字体锁定机制发生了一些非常疯狂的事情(比如这个http://www.emacswiki.org/emacs/HexColour),所以我认为这是可能的。

那么是否可以突出显示字符串分隔符?如果是这样,我应该在哪里查找有关如何操作的更多信息?

编辑:

试图让 Jon O. 的答案发挥作用。首先我尝试了

(defface my-string-delimiter-face
  '((t (:foreground "red" :weight bold)))
   "My custom face for string delimiters")

(add-hook 'after-change-major-mode-hook 
          (lambda () 
            (font-lock-add-keywords nil '(("\\s\"\\|\\s|" 0 solarized-string-delimiter-face t)))))

试图将它添加到每个模式(没有工作)

然后我尝试将钩子表达式替换为

(font-lock-add-keywords 'emacs-lisp '(("\\s\"\\|\\s|" 0 solarized-string-delimiter-face t)))

试图让事情正常工作,同样的事情(没有工作)

【问题讨论】:

    标签: emacs font-lock


    【解决方案1】:

    您可以使用font-lock-add-keywords 通过执行以下操作来突出显示字符串分隔符:

    (font-lock-add-keywords 'foo-mode '(("\\s\"\\|\\s|" 0 'my-string-delimiter-face t)))
    

    正则表达式"\\s\"\\|\\s|" 匹配单个字符,该字符必须具有语法类“字符串引号”(\\s\" 部分)或“通用字符串分隔符”(\\s| 部分)。 \s 匹配各种不同的字符语法类,您可以在 Elisp 手册中的 (elisp)Syntax Tables 和 (elisp)Regexp Backslash 下阅读。

    如果你看到它没有字符串转义,它会更容易阅读:\s"\|\s|

    0 表示将人脸应用于整个匹配的字符串,最后的t 使该人脸覆盖字符串上已经存在的任何人脸(因为许多模式会突出显示整个字符串,包括font-lock-string-face 或类似的分隔符)

    'foo-mode 可以是任何模式的引用名称(例如'emacs-lisp-mode、'php-mode)或nil,以使此更改仅在当前缓冲区中为缓冲区本地。 (在这种情况下,您可能应该将它放在要应用它的模式的模式挂钩中)

    my-string-delimiter-face 可以是任何现有的面孔,或者您可以通过执行以下操作来定义一个面孔:

    (defface my-string-delimiter-face
      '((t (:foreground "red" :weight bold)))
       "My custom face for string delimiters")
    

    【讨论】:

    • 对于一个冗长而杂乱的问题的好答案,但似乎无法让它工作(在对问题的编辑中解释,因为它是一堆代码)感谢您的帮助!
    • @MattBriggs :我认为您可能需要在人脸名称(solarized-string-delimiter-face)之前引用'。我总是忘记这一点,因为默认的字体锁定面既可以用作变量,也可以用作引用符号。我编辑了我的答案以反映这一点——它现在似乎对我有用,它对你有帮助吗?
    • @MattBriggs:另外,在上面的第二个示例中,您需要编写 (font-lock-add-keywords 'emacs-lisp-mode ...,因为 emacs-lisp-mode 是主要模式的全名。
    • ' 完全是这样 :D 谢谢伙计,学到了很多关于 emacs 解决这个问题的知识,我很高兴我的主题看起来更像我习惯了!
    • 没问题,很高兴它有帮助!
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2012-02-26
    • 2016-06-06
    • 2013-10-21
    相关资源
    最近更新 更多