ATS(inline, const, unused) /* Variadic Macro */
OTS(inline, const, unused)
我试图仅在宏中匹配inline
、const
、unused
关键字ATS
。我尝试了ATS([^,]*)
但它只匹配inline
关键字。
编辑:我需要更改所有ATS
参数的颜色。这仅适用于第一个参数。
(font-lock-add-keywords nil
'(("ATS(\([^,]*\)" 1 font-lock-builtin-face)))
您可以使用定位字体锁定规则。这就像搜索中的搜索。下面的代码搜索AST(
。找到后,它会找到参数列表的末尾,并搜索其中的所有单词。
(defun foo ()
(interactive)
(setq font-lock-multiline t)
(font-lock-add-keywords
nil
'(("\_<ATS("
("\_<\sw+\_>"
;; Pre-match form -- limit the sub-search to the end of the argument list.
(save-excursion
(goto-char (match-end 0))
(backward-char)
(ignore-errors
(forward-sexp))
(point))
;; Post-match form
(goto-char (match-end 0))
(0 font-lock-builtin-face))))))
这将匹配括号内的所有单词,即使它们分布在多行中。
预匹配表单有两个用途:它可以将点定位到合适的位置,并控制子搜索的延伸(其中nil
表示行的末尾)。例如,可以使用匹配后表单将分数返回到其他关键字规则的良好位置。
当然,这可以扩展到只突出一组特定的单词,但我把它留作练习。
如果匹配项都是小写的,您可以简单地使用:
[a-z]+
确保正则表达式区分大小写。
这里有一个简单的方法:
加载库突出显示 ( highlight.el
)
然后调用命令/函数foo
:
(defun foo ()
(interactive)
(hlt-highlight-regexp-to-end "ATS([^)]*\(inline\)[^)]*)"
'font-lock-builtin-face nil nil 1)
(hlt-highlight-regexp-to-end "ATS([^)]*\(const\)[^)]*)"
'font-lock-constant-face nil nil 1)
(hlt-highlight-regexp-to-end "ATS([^)]*\(unused\)[^)]*)"
'font-lock-warning-face nil nil 1))
您也可以使用 font-lock-add-keywords
执行相同的操作。
(defun foo ()
(interactive)
(font-lock-add-keywords nil
'(("ATS([^)]*\(inline\)[^)]*)" (1 'font-lock-builtin-face t)))
'APPEND)
(font-lock-add-keywords nil
'(("ATS([^)]*\(const\)[^)]*)" (1 'font-lock-constant-face t)))
'APPEND)
(font-lock-add-keywords nil
'(("ATS([^)]*\(unused\)[^)]*)" (1 'font-lock-warning-face t)))
'APPEND))
如果您知道它们都将以相同的顺序出现在同一个ATS
sexp 中,那么您可以将单独的正则表达式合并为一个,并对 hlt-highlight-regexp-to-end
或 font-lock-add-keywords
进行一次调用。