1
1
" Vim syntax file
2
2
" Language: C
3
3
" Maintainer: Bram Moolenaar <Bram@vim.org>
4
- " Last Change: 2013 Jul 05
4
+ " Last Change: 2015 Mar 1
5
5
6
6
" Quit when a (custom) syntax file was already loaded
7
7
if exists (" b:current_syntax" )
@@ -35,28 +35,37 @@ syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
35
35
if ! exists (" c_no_utf" )
36
36
syn match cSpecial display contained " \\\( u\x\{ 4}\| U\x\{ 8}\) "
37
37
endif
38
- if exists (" c_no_cformat" )
39
- syn region cString start =+ L\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,@Spell extend
40
- " cCppString: same as cString, but ends at end of line
41
- if ! exists (" cpp_no_cpp11" ) " ISO C++11
42
- syn region cCppString start =+ \( L\| u\| u8\| U\| R\| LR\| u8R\| uR\| UR\)\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
43
- else
44
- syn region cCppString start =+ L\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
45
- endif
46
- syn region cCppOut2 contained start =" 0" end =" ^\s *\( %:\| #\)\s *\( endif\>\| else\>\| elif\>\) " contains =cSpaceError,cCppSkip
47
- syn region cCppSkip contained start =" ^\s *\( %:\| #\)\s *\( if\>\| ifdef\>\| ifndef\>\) " skip =" \\ $" end =" ^\s *\( %:\| #\)\s *endif\> " contains =cSpaceError,cCppSkip
48
- else
38
+
39
+ if ! exists (" c_no_cformat" )
40
+ " Highlight % items in strings.
49
41
if ! exists (" c_no_c99" ) " ISO C99
50
42
syn match cFormat display " %\(\d\+\$\)\= [-+' #0*]*\(\d *\|\*\|\*\d\+\$\)\(\.\(\d *\|\*\|\*\d\+\$\)\)\=\( [hlLjzt]\| ll\| hh\)\=\( [aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\= .[^]]*\]\) " contained
51
43
else
52
44
syn match cFormat display " %\(\d\+\$\)\= [-+' #0*]*\(\d *\|\*\|\*\d\+\$\)\(\.\(\d *\|\*\|\*\d\+\$\)\)\=\( [hlL]\| ll\)\=\( [bdiuoxXDOUfeEgGcCsSpn]\|\[\^\= .[^]]*\]\) " contained
53
45
endif
54
46
syn match cFormat display " %%" contained
47
+ endif
48
+
49
+ " cCppString: same as cString, but ends at end of line
50
+ if s: ft == # " cpp" && ! exists (" cpp_no_cpp11" ) && ! exists (" c_no_cformat" )
51
+ " ISO C++11
52
+ syn region cString start =+ \( L\| u\| u8\| U\| R\| LR\| u8R\| uR\| UR\)\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
53
+ syn region cCppString start =+ \( L\| u\| u8\| U\| R\| LR\| u8R\| uR\| UR\)\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
54
+ elseif s: ft == # " c" && ! exists (" c_no_c11" ) && ! exists (" c_no_cformat" )
55
+ " ISO C99
56
+ syn region cString start =+ \% (L\| U\| u8\)\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
57
+ syn region cCppString start =+ \% (L\| U\| u8\)\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
58
+ else
59
+ " older C or C++
60
+ syn match cFormat display " %%" contained
55
61
syn region cString start =+ L\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
56
- " cCppString: same as cString, but ends at end of line
57
62
syn region cCppString start =+ L\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
58
63
endif
59
64
65
+ syn region cCppSkip contained start =" ^\s *\( %:\| #\)\s *\( if\>\| ifdef\>\| ifndef\>\) " skip =" \\ $" end =" ^\s *\( %:\| #\)\s *endif\> " contains =cSpaceError,cCppSkip
66
+
67
+ syn cluster cStringGroup contains =cCppString,cCppSkip
68
+
60
69
syn match cCharacter " L\= '[^\\ ]'"
61
70
syn match cCharacter " L'[^']*'" contains =cSpecial
62
71
if exists (" c_gnu" )
@@ -70,7 +79,8 @@ syn match cSpecialCharacter display "L\='\\\o\{1,3}'"
70
79
syn match cSpecialCharacter display " '\\ x\x\{ 1,2}'"
71
80
syn match cSpecialCharacter display " L'\\ x\x\+ '"
72
81
73
- if ! exists (" c_no_c11" ) " ISO C11
82
+ if (s: ft == # " c" && ! exists (" c_no_c11" )) || (s: ft == # " cpp" && ! exists (" cpp_no_cpp11" ))
83
+ " ISO C11 or ISO C++ 11
74
84
if exists (" c_no_cformat" )
75
85
syn region cString start =+ \% (U\| u8\=\) "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,@Spell extend
76
86
else
@@ -102,58 +112,58 @@ endif
102
112
" This should be before cErrInParen to avoid problems with #define ({ xxx })
103
113
if exists (" c_curly_error" )
104
114
syn match cCurlyError " }"
105
- syn region cBlock start =" {" end =" }" contains =ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString ,@Spell fold
115
+ syn region cBlock start =" {" end =" }" contains =ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,@cStringGroup ,@Spell fold
106
116
else
107
117
syn region cBlock start =" {" end =" }" transparent fold
108
118
endif
109
119
110
- " catch errors caused by wrong parenthesis and brackets
111
- " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
120
+ " Catch errors caused by wrong parenthesis and brackets.
121
+ " Also accept <% for {, %> for }, <: for [ and :> for ] (C99)
112
122
" But avoid matching <::.
113
123
syn cluster cParenGroup contains =cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
114
124
if exists (" c_no_curly_error" )
115
125
if s: ft == # ' cpp' && ! exists (" cpp_no_cpp11" )
116
- syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cCppString ,@Spell
126
+ syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,@cStringGroup ,@Spell
117
127
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
118
128
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
119
129
syn match cParenError display " )"
120
130
syn match cErrInParen display contained " ^^<%\| ^%>"
121
131
else
122
- syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString ,@Spell
132
+ syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup ,@Spell
123
133
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
124
134
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
125
135
syn match cParenError display " )"
126
136
syn match cErrInParen display contained " ^[{}]\| ^<%\| ^%>"
127
137
endif
128
138
elseif exists (" c_no_bracket_error" )
129
139
if s: ft == # ' cpp' && ! exists (" cpp_no_cpp11" )
130
- syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cCppString ,@Spell
140
+ syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,@cStringGroup ,@Spell
131
141
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
132
142
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
133
143
syn match cParenError display " )"
134
144
syn match cErrInParen display contained " <%\| %>"
135
145
else
136
- syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString ,@Spell
146
+ syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup ,@Spell
137
147
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
138
148
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
139
149
syn match cParenError display " )"
140
150
syn match cErrInParen display contained " [{}]\| <%\| %>"
141
151
endif
142
152
else
143
153
if s: ft == # ' cpp' && ! exists (" cpp_no_cpp11" )
144
- syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString ,@Spell
154
+ syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,@cStringGroup ,@Spell
145
155
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
146
156
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
147
157
syn match cParenError display " [\] )]"
148
158
syn match cErrInParen display contained " <%\| %>"
149
- syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' contains =ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString ,@Spell
159
+ syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' contains =ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,@cStringGroup ,@Spell
150
160
else
151
- syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString ,@Spell
161
+ syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,@cStringGroup ,@Spell
152
162
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
153
163
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
154
164
syn match cParenError display " [\] )]"
155
165
syn match cErrInParen display contained " [\] {}]\| <%\| %>"
156
- syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString ,@Spell
166
+ syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,@cStringGroup ,@Spell
157
167
endif
158
168
" cCppBracket: same as cParen but ends at end-of-line; used in cDefine
159
169
syn region cCppBracket transparent start =' \[\| <::\@ !' skip =' \\ $' excludenl end =' ]\| :>' end =' $' contained contains =ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
@@ -322,6 +332,9 @@ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
322
332
syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET
323
333
syn keyword cConstant TMP_MAX stderr stdin stdout
324
334
syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX
335
+ " POSIX 2001
336
+ syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG
337
+ syn keyword cConstant SIGVTALRM SIGXCPU SIGXFSZ
325
338
" Add POSIX errors as well
326
339
syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY
327
340
syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT
@@ -373,7 +386,7 @@ syn region cPreProc start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>
373
386
" Highlight User Labels
374
387
syn cluster cMultiGroup contains =cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
375
388
if s: ft == # ' c' || exists (" cpp_no_cpp11" )
376
- syn region cMulti transparent start =' ?' skip =' ::' end =' :' contains =ALLBUT,@cMultiGroup,@Spell
389
+ syn region cMulti transparent start =' ?' skip =' ::' end =' :' contains =ALLBUT,@cMultiGroup,@Spell,@cStringGroup
377
390
endif
378
391
" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
379
392
syn cluster cLabelGroup contains =cUserLabel
@@ -458,8 +471,7 @@ hi def link cTodo Todo
458
471
hi def link cBadContinuation Error
459
472
hi def link cCppOutSkip cCppOutIf2
460
473
hi def link cCppInElse2 cCppOutIf2
461
- hi def link cCppOutIf2 cCppOut2 " Old syntax group for #if 0 body
462
- hi def link cCppOut2 cCppOut " Old syntax group for #if of #if 0
474
+ hi def link cCppOutIf2 cCppOut
463
475
hi def link cCppOut Comment
464
476
465
477
let b: current_syntax = " c"
0 commit comments