在emacs的字符串中突出显示“”

时间:2011-11-01 14:56:30

标签: emacs font-lock

我有点像emacs noob,但不太确定如何找到这个。我使用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)))

试图让事情变得有效,同样的事情(没有用)

1 个答案:

答案 0 :(得分:4)

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

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

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

如果您在没有字符串转义的情况下看到它,它会更容易阅读:\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")