Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
突出显示“&引用;在emacs的字符串中_Emacs_Font Lock - Fatal编程技术网

突出显示“&引用;在emacs的字符串中

突出显示“&引用;在emacs的字符串中,emacs,font-lock,Emacs,Font Lock,我有点像EmacsNoob,但不太确定如何找到这个。我使用颜色主题,这是一个低对比度的主题,带有智能口音,以保持可读性。在vim版本中,它们所做的一件事是突出显示字符串分隔符(在某些语言中表示双引号和单引号),使其与字符串的其余部分不同,从而使它们更加突出 主题的emacs端口没有这个功能,但是我看到字体锁定机制出现了一些非常疯狂的事情(像这样),所以我认为这是可能的 那么有可能突出显示字符串delimeters吗?如果是这样,我应该在哪里寻找更多关于如何做的信息 编辑: 试图让Jon O.的答

我有点像EmacsNoob,但不太确定如何找到这个。我使用颜色主题,这是一个低对比度的主题,带有智能口音,以保持可读性。在vim版本中,它们所做的一件事是突出显示字符串分隔符(在某些语言中表示双引号和单引号),使其与字符串的其余部分不同,从而使它们更加突出

主题的emacs端口没有这个功能,但是我看到字体锁定机制出现了一些非常疯狂的事情(像这样),所以我认为这是可能的

那么有可能突出显示字符串delimeters吗?如果是这样,我应该在哪里寻找更多关于如何做的信息

编辑:

试图让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)))

为了让事情顺利进行,同样的事情(没有成功)

您可以使用
字体锁定添加关键字来突出显示字符串分隔符,方法如下:

(font-lock-add-keywords 'foo-mode '(("\\s\"\\|\\s|" 0 'my-string-delimiter-face t)))
(defface my-string-delimiter-face
  '((t (:foreground "red" :weight bold)))
   "My custom face for string delimiters")
regexp
“\\s\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>匹配一个字符,该字符必须具有语法类“字符串引号”(
\\s\\\\\\\\\
部分)或“通用字符串分隔符”
\s
匹配各种不同的字符语法类,您可以在Elisp手册中的
(Elisp)语法表
(Elisp)Regexp反斜杠
下阅读这些字符语法类

如果不进行字符串转义就可以看到它,那么阅读起来就容易一些:
\s“\\\\s”

0
意味着将该面应用于整个匹配字符串,最后的
t
使该面覆盖字符串上已经存在的任何面(因为许多模式将突出显示整个字符串,包括带有
字体锁定字符串面的分隔符
或类似的分隔符)

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

我的字符串分隔符面
可以是任何现有面,也可以通过执行以下操作来定义一个面:

(font-lock-add-keywords 'foo-mode '(("\\s\"\\|\\s|" 0 'my-string-delimiter-face t)))
(defface my-string-delimiter-face
  '((t (:foreground "red" :weight bold)))
   "My custom face for string delimiters")

对于一个冗长而杂乱无章的问题,回答得很好,但似乎无法让它正常工作(在问题的编辑中解释,因为这是一堆代码)感谢您的帮助!@MattBriggs:我想您可能需要在面名称(
solarized string delimiter face
)之前加上引号
)。我总是忘记这一点,因为默认字体锁定面既可以作为变量也可以作为引用符号。我编辑了我的答案以反映这一点——它现在似乎对我有用,对你有帮助吗?@MattBriggs:另外,在上面的第二个示例中,你需要编写
(字体锁定添加关键字'emacs lisp mode…
,因为
emacs lisp mode
是主要模式的全称。完全正确:D谢谢,伙计,我学到了很多emacs的知识,我很高兴我的主题看起来更像我习惯的主题!没问题,很高兴它很有用!