我有点像 emacs 菜鸟,但不太确定如何找到它。我使用日光化浅色主题,这是一个低对比度主题,带有智能口音以保持可读性。他们在 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)))))
Run Code Online (Sandbox Code Playgroud)
试图将其添加到每种模式(不起作用)
然后我尝试用
(font-lock-add-keywords 'emacs-lisp '(("\\s\"\\|\\s|" 0 solarized-string-delimiter-face t)))
Run Code Online (Sandbox Code Playgroud)
为了让事情正常工作,同样的事情(没有工作)
小智 5
您可以font-lock-add-keywords通过执行以下操作来突出显示字符串分隔符:
(font-lock-add-keywords 'foo-mode '(("\\s\"\\|\\s|" 0 'my-string-delimiter-face t)))
Run Code Online (Sandbox Code Playgroud)
正则表达式"\\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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |