1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: C++ 3d8b77f7dSBram Moolenaar" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) 4ac7bd638SBram Moolenaar" Previous Maintainer: Ken Shan <[email protected]> 5*d2ea7cf1SBram Moolenaar" Last Change: 2021 May 04 6071d4279SBram Moolenaar 789bcfda6SBram Moolenaar" quit when a syntax file was already loaded 889bcfda6SBram Moolenaarif exists("b:current_syntax") 9071d4279SBram Moolenaar finish 10071d4279SBram Moolenaarendif 11071d4279SBram Moolenaar 1298a29d00SBram Moolenaar" inform C syntax that the file was included from cpp.vim 1398a29d00SBram Moolenaarlet b:filetype_in_cpp_family = 1 1498a29d00SBram Moolenaar 15071d4279SBram Moolenaar" Read the C syntax to start with 16071d4279SBram Moolenaarruntime! syntax/c.vim 17071d4279SBram Moolenaarunlet b:current_syntax 18071d4279SBram Moolenaar 19ac7bd638SBram Moolenaar" C++ extensions 20071d4279SBram Moolenaarsyn keyword cppStatement new delete this friend using 21071d4279SBram Moolenaarsyn keyword cppAccess public protected private 22b4ff518dSBram Moolenaarsyn keyword cppModifier inline virtual explicit export 23b4ff518dSBram Moolenaarsyn keyword cppType bool wchar_t 24071d4279SBram Moolenaarsyn keyword cppExceptions throw try catch 25071d4279SBram Moolenaarsyn keyword cppOperator operator typeid 26071d4279SBram Moolenaarsyn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq 27071d4279SBram Moolenaarsyn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1 28071d4279SBram Moolenaarsyn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$" 29071d4279SBram Moolenaarsyn keyword cppStorageClass mutable 30071d4279SBram Moolenaarsyn keyword cppStructure class typename template namespace 31071d4279SBram Moolenaarsyn keyword cppBoolean true false 32d8b77f7dSBram Moolenaarsyn keyword cppConstant __cplusplus 33071d4279SBram Moolenaar 34ac7bd638SBram Moolenaar" C++ 11 extensions 35ac7bd638SBram Moolenaarif !exists("cpp_no_cpp11") 36b4ff518dSBram Moolenaar syn keyword cppModifier override final 37b4ada79aSBram Moolenaar syn keyword cppType nullptr_t auto 38ac7bd638SBram Moolenaar syn keyword cppExceptions noexcept 39d8b77f7dSBram Moolenaar syn keyword cppStorageClass constexpr decltype thread_local 40ac7bd638SBram Moolenaar syn keyword cppConstant nullptr 41d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT 42d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE 43d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE 44d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE 45d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE 46d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE 47*d2ea7cf1SBram Moolenaar 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 4895a9dd1eSBram Moolenaar syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1 4995a9dd1eSBram Moolenaar syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$" 50ac7bd638SBram Moolenaarendif 51ac7bd638SBram Moolenaar 52b4ff518dSBram Moolenaar" C++ 14 extensions 53b4ff518dSBram Moolenaarif !exists("cpp_no_cpp14") 54*d2ea7cf1SBram Moolenaar syn match cppNumbers display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat 55*d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 56*d2ea7cf1SBram Moolenaar 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*\)\=\>" 57*d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0\o\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 58*d2ea7cf1SBram Moolenaar 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*\)\=\>" 59*d2ea7cf1SBram Moolenaar 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*\)\=\>" 60*d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 61*d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<\.\d\+\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 62*d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 63*d2ea7cf1SBram Moolenaar syn region cppString start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell 6495a9dd1eSBram Moolenaarendif 6595a9dd1eSBram Moolenaar 6695a9dd1eSBram Moolenaar" C++ 17 extensions 6795a9dd1eSBram Moolenaarif !exists("cpp_no_cpp17") 6895a9dd1eSBram Moolenaar syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1 6995a9dd1eSBram Moolenaar syn match cppCast "\<reinterpret_pointer_cast\s*$" 70*d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<0x\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 71*d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 72*d2ea7cf1SBram Moolenaarendif 73*d2ea7cf1SBram Moolenaar 74*d2ea7cf1SBram Moolenaar" C++ 20 extensions 75*d2ea7cf1SBram Moolenaarif !exists("cpp_no_cpp20") 76*d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0\(y\|d\)\>" 77*d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>" 78*d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0\o\+\(y\|d\)\>" 79*d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>" 80*d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>" 81*d2ea7cf1SBram Moolenaar syn keyword cppStatement co_await co_return co_yield requires 82*d2ea7cf1SBram Moolenaar syn keyword cppStorageClass consteval constinit 83*d2ea7cf1SBram Moolenaar syn keyword cppStructure concept 84*d2ea7cf1SBram Moolenaar syn keyword cppType char8_t 85*d2ea7cf1SBram Moolenaar syn keyword cppModule import module export 8695a9dd1eSBram Moolenaarendif 8795a9dd1eSBram Moolenaar 88071d4279SBram Moolenaar" The minimum and maximum operators in GNU C++ 89071d4279SBram Moolenaarsyn match cppMinMax "[<>]?" 90071d4279SBram Moolenaar 91071d4279SBram Moolenaar" Default highlighting 92f37506f6SBram Moolenaarhi def link cppAccess cppStatement 93f37506f6SBram Moolenaarhi def link cppCast cppStatement 94f37506f6SBram Moolenaarhi def link cppExceptions Exception 95f37506f6SBram Moolenaarhi def link cppOperator Operator 96f37506f6SBram Moolenaarhi def link cppStatement Statement 97f37506f6SBram Moolenaarhi def link cppModifier Type 98f37506f6SBram Moolenaarhi def link cppType Type 99f37506f6SBram Moolenaarhi def link cppStorageClass StorageClass 100f37506f6SBram Moolenaarhi def link cppStructure Structure 101f37506f6SBram Moolenaarhi def link cppBoolean Boolean 102f37506f6SBram Moolenaarhi def link cppConstant Constant 103f37506f6SBram Moolenaarhi def link cppRawStringDelimiter Delimiter 104f37506f6SBram Moolenaarhi def link cppRawString String 105*d2ea7cf1SBram Moolenaarhi def link cppString String 106f37506f6SBram Moolenaarhi def link cppNumber Number 107*d2ea7cf1SBram Moolenaarhi def link cppFloat Number 10895a9dd1eSBram Moolenaarhi def link cppModule Include 109071d4279SBram Moolenaar 110071d4279SBram Moolenaarlet b:current_syntax = "cpp" 111071d4279SBram Moolenaar 112071d4279SBram Moolenaar" vim: ts=8 113