2011-04-06 80 views
2

我需要一些Emacs语法突出问题的帮助。我想设置所有C/C++操作符的颜色。我遇到了麻烦,因为“/”用于除法(我想要着色),但也用于开始注释(我不想为自己着色,默认代码着色它们很好。)我似乎无法弄清楚如何告诉Emacs在没有被任何其他正斜杠包围的情况下仅着色一个正斜杠。Emacs:如何设置标点符号/ C运算符的颜色?

这是我现在有:

(add-hook 'c-mode-common-hook (lambda() 
    (font-lock-add-keywords nil   
    '(("[<>:&*=+^%!~,.?;/-]" 0 font-lock-warning-face t))) 
)) 

但它不会正确地强调这样的事情:

i = 1/2 
// Test 
i=1/2//test 

当然,如果有已经是一个颜色/脸分配的一种方式标点/运营商,我刚刚错过了,请让我知道!

+0

我想操作者需要用一个|符号。如果你在'font-lock-add-keywords'上做'describe-function',你会在这个例子中看到。 – vpit3833 2011-04-06 06:05:07

+1

@vpit:正则表达式synatx正常,'['和']'列出了一组匹配的字符,在这种情况下,'|'符号没有特殊含义。 – Lindydancer 2011-04-06 09:11:45

回答

0

每种字体长项具有以下格式:

(SUBEXP FACENAME [OVERRIDE [LAXMATCH]]) 

规则中的t对应OVERRIDE条目。如果您放弃它,则您的规则不会重新突出显示已被突出显示的内容,例如注释和字符串。

有突出显示所有运营商没有一般包,但cwarn-mode将突出=+=等嵌入更大的表达式中,以及在它不应该是情况;,像if (condition);。它使用函数而不是regexp:s来实现,如果您计划实现相对高级的字体锁定规则,我认为它是一个很好的参考。

+0

删除't'完美无缺 - 谢谢! – Malvineous 2011-04-08 00:46:15