font-lock 定义包含特殊字符和全词的关键字

font-lock 定义包含特殊字符和全词的关键字

我在of"\\"的第 283 行发现了对 的引用,我想将其作为警告删除(手动删除很容易)。我还没有找到定义某些特殊关键字的方法,以便 font-lock 知道我指的是整个单词,而不是潜在的子单词。例如,如果我将单词定义为关键字,然后输入单词,则 hing 的第一部分会突出显示。斜线等也会发生同样的事情。font-latex.elauctex-11.86notnothingnot

下面列出了一些特殊字符关键字,我希望将它们定义为全词,以便我可以使用下面描述的方法的变体将它们分类为不同的颜色。以下一些将被定义为警告颜色(即,因为它们缺少反斜杠)。在 *.tex 文档中更正时,带有反斜杠的符号将是不同的颜色 - 例如,#可能是红色,也\#可能是蓝色。为了实现这一点,下面有两个示例代码的变体,每个变体都用一组不同的颜色定义。

"
    ~
\\
~\\
\S
#
\#
$
\$
%
\%
&
\&
not
(defvar lawlist-face-red (make-face 'lawlist-face-red))
(set-face-attribute 'lawlist-face-red nil :background "white" :foreground "red" :bold t)
(font-lock-add-keywords 'latex-mode '(
("
"
\\|
#
\\|
$
\\|
%
\\|
&
" 0 lawlist-face-red prepend)

(defvar lawlist-face-blue (make-face 'lawlist-face-blue))
(set-face-attribute 'lawlist-face-blue nil :background "white" :foreground "blue" :bold t)
(font-lock-add-keywords 'latex-mode '(
("
\\\\
\\|
~
\\|
\\\\\\\\
\\|
~\\\\\\\\
\\|
\\\\S
\\|
\\\\#
\\|
\\\\$
\\|
\\\\%
\\|
\\\\&
\\|
not
" 0 lawlist-face-blue prepend)

编辑

这是包含 A.Ellett 答案的工作草案。AUCTeX 已经有一个预定义的警告机制,用于$&\\%是没有反斜杠的注释,已经着色。我已经用下面的代码覆盖了\\#——Emacs 内置的#斜体警告。AUCTeX 在 latex 模式下输入引号时会自动更正,但我经常复制/粘贴包含不正确的 LaTeX 引号的数据,我需要一个警告机制,如下所示:

(defvar lawlist-face-a (make-face 'lawlist-face-a))
(set-face-attribute 'lawlist-face-a nil :background "white" :foreground "orange" :bold t :underline nil :font "Courier" :height 200)

(defvar lawlist-face-b (make-face 'lawlist-face-b))
(set-face-attribute 'lawlist-face-b nil :background "white" :foreground "cyan" :bold t :underline nil :font "Courier" :height 200)

(defvar lawlist-face-c (make-face 'lawlist-face-c))
(set-face-attribute 'lawlist-face-c nil :background "white" :foreground "blue" :bold t :underline nil :font "Courier" :height 200)

(font-lock-add-keywords 'latex-mode '(

("#\\|\"\\|~" 0 lawlist-face-a t)

("\\(\\\\\\)[^a-zA-Z@]" 1 lawlist-face-a t)

("\\\\\\\\" 0 lawlist-face-b t)

("\\bnot\\b\\|~\\\\\\\\\\|\\\\#\\|\\\\\\$\\|\\\\S\\|\\\\%\\|\\\\&" 0 lawlist-face-c t)

) 'prepend)

答案1

如果你希望 emacs 只匹配整个单词,你需要写类似

\bnot\b

在为字体锁定定义这一点方面,您可能想尝试以下方法

"\\bnot\\b"

下面的宏可以向您展示如何仅匹配“not”这个词。

(defun example-search ()
  (interactive)
  (re-search-forward "\\bnot\\b"))

如果您已打开hi-lock模式,下一个功能可以提供帮助:

(defun example-hi-lock ()
  (interactive)
  (highlight-regexp "\\bnot\\b" 'hi-lock-word-not))

但你得先定义好脸型hi-lock-word-not

笔记该语法\b仅匹配单词边界。因此,如果您尝试将其与非单词字符一起使用,则可能无法匹配您感兴趣的表达式。

相关内容