说明:判断是否类型的简单办法,就是简单的观察:如果该标志符后面有空格,空格后又是一个标志符的话,在C/C++语言中,可以肯定这一定是一个类型了。所以用正则表达式判断就可以了。
经过测试,该语法定义几乎能完美的工作。包括在template下,以及 < > 中,以及函数定义中,引用什么的。喜欢的朋友可以复制过来用哦!
缺点:没有进行语法分析,只是基于上述简单的逻辑来实现的,存在着纰漏,但是目前测试还没遇到。以后的解决方向,写vim脚本判断typedef 出来的自定义类型,然后加入到syntax keyword列表。我觉得这才是正道。
不过,在这个搞出来之前,下面这个也够用了:-)
1 "========================================================
2 " Highlight All Math Operator
3 "========================================================
4 " C math operators
5 syn match cMathOperator display " [-+*/%=] "
6 " C pointer operators
7 syn match cPointerOperator display "-> /| /."
8 " C logical operators - boolean results
9 syn match cLogicalOperator display " [!<>] =/="
10 syn match cLogicalOperator display "=="
11 " C bit operators
12 syn match cBinaryOperator display " /( & /| | /| /^ /| << /| >> /) =/="
13 syn match cBinaryOperator display "/~"
14 syn match cBinaryOperatorError display "/~="
15 " More C logical operators - highlight in preference to binary
16 syn match cLogicalOperator display "&& /| ||"
17 syn match cLogicalOperatorError display " /( && /| || /) ="
18 " Math Operator
19 hi def link cMathOperator cOperator
20 hi def link cPointerOperator cOperator
21 hi def link cLogicalOperator cOperator
22 hi def link cBinaryOperator cOperator
23 hi def link cLogicalOperator cOperator
24
25 hi cOperator guifg =#3EFFE2
26 hi def link cBinaryOperatorError Error
27 hi def link cLogicalOperatorError Error
28 "========================================================
29 " Highlight typedef types ( include cpp syntax... )
30 " =======================================================
31 syn match cTypeDefType "/</I/i*/> /( &/=/s*/*/=/s*&/=/I /) /@="
32 syn match cTypeDefType "/</I/i*::/i* /( &/=/s*/*/=/s*&/=/I /) /@=" contains= cScope,cFunction
33 syn match cTypeDefType "/</I /( /i*</s*/I/i*/s*>:: /) /+/i* /( &/=/s*/*/=/s*&/=/I /) /@=" contains= cScope,cFunction,cTypeDefTypeTwo
34 syn match cTypeDefTypeTwo "</s*/I/i*/s*>" contains= cLogicalOperator
35
36 hi cTypeDefType guifg =#c0d8f8
37 hi cTypeDefTypeTwo guifg =#c0d8f8
38 " Highlight ;
39 syn match sColon display /;/
40 syn match cScope display /::/
41 hi cScope guifg =#3EFFE2
42 hi sColon guifg =#60d080
43 "========================================================
44 " Highlight All Function
45 "========================================================
46 syn match cFunction " [a-zA-Z_][a-zA-Z_0-9] */s*(" me=e-1
47 syn match cFunction "/< [a-zA-Z_][a-zA-Z_0-9] */>/s*(" me=e-1
48 syn match cFunction "/< [a-zA-Z_][a-zA-Z_0-9] * /( </I/i*>/s*( /) /@="
49 hi cFunction gui =NONE guifg =#B5A1FF