我在emacs中使用C的自定义语法高亮主题,但我错过了突出显示函数调用的可能性。例如:
int func(int foo)
{
return foo;
}
void main()
{
int bar = func(3);
}
在这个例子中有没有办法突出显示对“func”的调用? 如果宏也被突出显示也没关系。 if,switch或sizeof等关键字不匹配。
谢谢!
答案 0 :(得分:9)
关键字列表中的条目顺序非常重要。因此,如果您将条目放在突出显示关键字和函数声明的条目之后,则这些条目将不匹配。
(font-lock-add-keywords 'c-mode
'(("\\(\\w+\\)\\s-*\("
(1 rumpsteak-font-lock-function-call-face)))
t)
或者,您可以使用函数而不是正则表达式作为MATCHER
。如果你已经完全陈述了你的要求,那么你的问题会有些过分,但在更难的情况下会有用。未经测试(直接在浏览器中输入,实际上,所以我甚至不保证平衡的括号)。
(defun rumpsteak-match-function-call (&optional limit)
(while (and (search-forward-regexp "\\(\\w+\\)\\s-*\(" limit 'no-error)
(not (save-match-data
(string-match c-keywords-regexp (match-string 1))))
(not (save-excursion
(backward-char)
(forward-sexp)
(c-skip-whitespace-forward)
(or (eobp) (= ?\{ (char-after (point)))))))))
(font-lock-add-keywords 'c-mode
'((rumpsteak-match-function-call
(1 rumpsteak-font-lock-function-call-face))))
答案 1 :(得分:3)
(font-lock-add-keywords 'c-mode
'(("\\<\\([a-zA-Z_]*\\) *(" 1 font-lock-keyword-face)))
你的.emacs中的。将font-lock-keyword-face替换为您想要的那个(M-X list-faces-display以获取预定义列表)。
答案 2 :(得分:0)
您可以尝试使用Ctrl-s进行搜索,也可以尝试使用Ctrl-r进行搜索。 Emacs将为您突出显示您的功能。