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)))
答案 0 :(得分:1)
您可以使用锚定字体锁定规则。这就像在搜索中搜索一样。以下代码搜索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
表示行的结尾)。例如,匹配后表单可用于将该点返回到其他关键字规则的良好位置。
当然,这可以扩展为仅突出显示一组特定的单词,但我将其留作练习。
答案 1 :(得分:0)
如果匹配都是小写,您只需使用:
[a-z]+
确保正则表达式区分大小写。
答案 2 :(得分:0)
这是一个简单的方法:
然后调用命令/函数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
性别中,那么您可以将单独的正则表达式合并为一个,并使用单个调用来hlt-highlight-regexp-to-end
或{ {1}}。