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*89a9c159SBram Moolenaar" Last Change: 2021 Aug 23 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 47d2ea7cf1SBram 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") 54d2ea7cf1SBram Moolenaar syn match cppNumbers display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat 55d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 56d2ea7cf1SBram 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*\)\=\>" 57d2ea7cf1SBram 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*\)\=\>" 58d2ea7cf1SBram 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*\)\=\>" 59d2ea7cf1SBram 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*\)\=\>" 60d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 61d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<\.\d\+\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 62d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 63*89a9c159SBram Moolenaar syn region cppString start=+\(L\|u\|u8\|U\)\="+ 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*$" 70d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<0x\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 71d2ea7cf1SBram Moolenaar syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>" 72*89a9c159SBram Moolenaar 73*89a9c159SBram Moolenaar " TODO: push this up to c.vim if/when supported in C23 74*89a9c159SBram Moolenaar syn match cppCharacter "u8'[^\\]'" 75*89a9c159SBram Moolenaar syn match cppCharacter "u8'[^']*'" contains=cSpecial 76*89a9c159SBram Moolenaar if exists("c_gnu") 77*89a9c159SBram Moolenaar syn match cppSpecialError "u8'\\[^'\"?\\abefnrtv]'" 78*89a9c159SBram Moolenaar syn match cppSpecialCharacter "u8'\\['\"?\\abefnrtv]'" 79*89a9c159SBram Moolenaar else 80*89a9c159SBram Moolenaar syn match cppSpecialError "u8'\\[^'\"?\\abfnrtv]'" 81*89a9c159SBram Moolenaar syn match cppSpecialCharacter "u8'\\['\"?\\abfnrtv]'" 82*89a9c159SBram Moolenaar endif 83*89a9c159SBram Moolenaar syn match cppSpecialCharacter display "u8'\\\o\{1,3}'" 84*89a9c159SBram Moolenaar syn match cppSpecialCharacter display "u8'\\x\x\+'" 85*89a9c159SBram Moolenaar 86d2ea7cf1SBram Moolenaarendif 87d2ea7cf1SBram Moolenaar 88d2ea7cf1SBram Moolenaar" C++ 20 extensions 89d2ea7cf1SBram Moolenaarif !exists("cpp_no_cpp20") 90d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0\(y\|d\)\>" 91d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>" 92d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0\o\+\(y\|d\)\>" 93d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>" 94d2ea7cf1SBram Moolenaar syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>" 95d2ea7cf1SBram Moolenaar syn keyword cppStatement co_await co_return co_yield requires 96d2ea7cf1SBram Moolenaar syn keyword cppStorageClass consteval constinit 97d2ea7cf1SBram Moolenaar syn keyword cppStructure concept 98d2ea7cf1SBram Moolenaar syn keyword cppType char8_t 99d2ea7cf1SBram Moolenaar syn keyword cppModule import module export 10095a9dd1eSBram Moolenaarendif 10195a9dd1eSBram Moolenaar 102071d4279SBram Moolenaar" The minimum and maximum operators in GNU C++ 103071d4279SBram Moolenaarsyn match cppMinMax "[<>]?" 104071d4279SBram Moolenaar 105071d4279SBram Moolenaar" Default highlighting 106f37506f6SBram Moolenaarhi def link cppAccess cppStatement 107f37506f6SBram Moolenaarhi def link cppCast cppStatement 108f37506f6SBram Moolenaarhi def link cppExceptions Exception 109f37506f6SBram Moolenaarhi def link cppOperator Operator 110f37506f6SBram Moolenaarhi def link cppStatement Statement 111f37506f6SBram Moolenaarhi def link cppModifier Type 112f37506f6SBram Moolenaarhi def link cppType Type 113f37506f6SBram Moolenaarhi def link cppStorageClass StorageClass 114f37506f6SBram Moolenaarhi def link cppStructure Structure 115f37506f6SBram Moolenaarhi def link cppBoolean Boolean 116*89a9c159SBram Moolenaarhi def link cppCharacter cCharacter 117*89a9c159SBram Moolenaarhi def link cppSpecialCharacter cSpecialCharacter 118*89a9c159SBram Moolenaarhi def link cppSpecialError cSpecialError 119f37506f6SBram Moolenaarhi def link cppConstant Constant 120f37506f6SBram Moolenaarhi def link cppRawStringDelimiter Delimiter 121f37506f6SBram Moolenaarhi def link cppRawString String 122d2ea7cf1SBram Moolenaarhi def link cppString String 123f37506f6SBram Moolenaarhi def link cppNumber Number 124d2ea7cf1SBram Moolenaarhi def link cppFloat Number 12595a9dd1eSBram Moolenaarhi def link cppModule Include 126071d4279SBram Moolenaar 127071d4279SBram Moolenaarlet b:current_syntax = "cpp" 128071d4279SBram Moolenaar 129071d4279SBram Moolenaar" vim: ts=8 130