说明:判断是否类型的简单办法,就是简单的观察:如果该标志符后面有空格,空格后又是一个标志符的话,在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