blob: 8daf90a33cd3286b7826db86237ec7c655b5afb8 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: C++
Bram Moolenaard8b77f72015-03-05 21:21:19 +01003" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp)
Bram Moolenaarac7bd632013-03-19 11:35:58 +01004" Previous Maintainer: Ken Shan <ccshan@post.harvard.edu>
laburnumTff0baca2023-12-08 21:27:03 +01005" Last Change: 2023 Dec 08
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02007" quit when a syntax file was already loaded
8if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +00009 finish
10endif
11
Bram Moolenaar98a29d02021-01-18 19:55:44 +010012" inform C syntax that the file was included from cpp.vim
13let b:filetype_in_cpp_family = 1
14
Bram Moolenaar071d4272004-06-13 20:20:40 +000015" Read the C syntax to start with
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020016runtime! syntax/c.vim
17unlet b:current_syntax
laburnumTff0baca2023-12-08 21:27:03 +010018unlet b:filetype_in_cpp_family
Bram Moolenaar071d4272004-06-13 20:20:40 +000019
Bram Moolenaarac7bd632013-03-19 11:35:58 +010020" C++ extensions
Bram Moolenaar071d4272004-06-13 20:20:40 +000021syn keyword cppStatement new delete this friend using
22syn keyword cppAccess public protected private
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010023syn keyword cppModifier inline virtual explicit export
24syn keyword cppType bool wchar_t
Bram Moolenaar071d4272004-06-13 20:20:40 +000025syn keyword cppExceptions throw try catch
26syn keyword cppOperator operator typeid
27syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
28syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
29syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
30syn keyword cppStorageClass mutable
31syn keyword cppStructure class typename template namespace
Bram Moolenaar071d4272004-06-13 20:20:40 +000032syn keyword cppBoolean true false
Bram Moolenaard8b77f72015-03-05 21:21:19 +010033syn keyword cppConstant __cplusplus
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
Bram Moolenaarac7bd632013-03-19 11:35:58 +010035" C++ 11 extensions
36if !exists("cpp_no_cpp11")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010037 syn keyword cppModifier override final
Bram Moolenaarb4ada792016-10-30 21:55:26 +010038 syn keyword cppType nullptr_t auto
Bram Moolenaarac7bd632013-03-19 11:35:58 +010039 syn keyword cppExceptions noexcept
Bram Moolenaard8b77f72015-03-05 21:21:19 +010040 syn keyword cppStorageClass constexpr decltype thread_local
Bram Moolenaarac7bd632013-03-19 11:35:58 +010041 syn keyword cppConstant nullptr
Bram Moolenaard8b77f72015-03-05 21:21:19 +010042 syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
43 syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
44 syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
45 syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
46 syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
47 syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020048 syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"\(sv\|s\|_[_a-zA-Z][_a-zA-Z0-9]*\)\=+ contains=@Spell
Bram Moolenaar95a9dd12019-12-19 22:12:03 +010049 syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1
50 syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$"
Bram Moolenaarac7bd632013-03-19 11:35:58 +010051endif
52
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010053" C++ 14 extensions
54if !exists("cpp_no_cpp14")
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020055 syn match cppNumbers display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat
56 syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
57 syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
58 syn match cppNumber display contained "\<0\o\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
59 syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
60 syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
61 syn match cppFloat display contained "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
62 syn match cppFloat display contained "\<\.\d\+\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
63 syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
Bram Moolenaar89a9c152021-08-29 21:55:35 +020064 syn region cppString start=+\(L\|u\|u8\|U\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell
Bram Moolenaar95a9dd12019-12-19 22:12:03 +010065endif
66
67" C++ 17 extensions
68if !exists("cpp_no_cpp17")
69 syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1
70 syn match cppCast "\<reinterpret_pointer_cast\s*$"
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020071 syn match cppFloat display contained "\<0x\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
72 syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
Bram Moolenaar89a9c152021-08-29 21:55:35 +020073
74 " TODO: push this up to c.vim if/when supported in C23
75 syn match cppCharacter "u8'[^\\]'"
76 syn match cppCharacter "u8'[^']*'" contains=cSpecial
77 if exists("c_gnu")
78 syn match cppSpecialError "u8'\\[^'\"?\\abefnrtv]'"
79 syn match cppSpecialCharacter "u8'\\['\"?\\abefnrtv]'"
80 else
81 syn match cppSpecialError "u8'\\[^'\"?\\abfnrtv]'"
82 syn match cppSpecialCharacter "u8'\\['\"?\\abfnrtv]'"
83 endif
84 syn match cppSpecialCharacter display "u8'\\\o\{1,3}'"
85 syn match cppSpecialCharacter display "u8'\\x\x\+'"
86
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020087endif
88
89" C++ 20 extensions
90if !exists("cpp_no_cpp20")
91 syn match cppNumber display contained "\<0\(y\|d\)\>"
92 syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>"
93 syn match cppNumber display contained "\<0\o\+\(y\|d\)\>"
94 syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>"
95 syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>"
96 syn keyword cppStatement co_await co_return co_yield requires
97 syn keyword cppStorageClass consteval constinit
98 syn keyword cppStructure concept
99 syn keyword cppType char8_t
100 syn keyword cppModule import module export
Bram Moolenaar95a9dd12019-12-19 22:12:03 +0100101endif
102
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103" The minimum and maximum operators in GNU C++
104syn match cppMinMax "[<>]?"
105
106" Default highlighting
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200107hi def link cppAccess cppStatement
108hi def link cppCast cppStatement
109hi def link cppExceptions Exception
110hi def link cppOperator Operator
111hi def link cppStatement Statement
112hi def link cppModifier Type
113hi def link cppType Type
114hi def link cppStorageClass StorageClass
115hi def link cppStructure Structure
116hi def link cppBoolean Boolean
Bram Moolenaar89a9c152021-08-29 21:55:35 +0200117hi def link cppCharacter cCharacter
118hi def link cppSpecialCharacter cSpecialCharacter
119hi def link cppSpecialError cSpecialError
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200120hi def link cppConstant Constant
121hi def link cppRawStringDelimiter Delimiter
122hi def link cppRawString String
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +0200123hi def link cppString String
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200124hi def link cppNumber Number
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +0200125hi def link cppFloat Number
Bram Moolenaar95a9dd12019-12-19 22:12:03 +0100126hi def link cppModule Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127
128let b:current_syntax = "cpp"
129
130" vim: ts=8