突出显示 Emacs 字符串中的" "



我是一个emacs新手,但不太确定如何找到这个。我使用日光浅色主题,这是一个低对比度的主题与智能口音,以保持可读性。他们在vim版本中做的一件事是突出显示字符串分隔符(在某些语言中意味着双引号和单引号),而不是字符串的其他部分,以使它们更加突出。

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

那么可以突出显示字符串分隔符吗?如果是这样,我应该在哪里寻找更多关于如何做到这一点的信息?

编辑:

试图得到乔恩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)))

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

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

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

regexp "\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,以使此更改仅在当前缓冲区中为buffer-local。(在这种情况下,你可能应该把它放在你想要应用它的模式的mode-hook中)

my-string-delimiter-face可以是任何现有的面,或者你可以定义一个像这样做:

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

最新更新