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*95a9dd1eSBram Moolenaar" Last Change: 2019 Dec 18 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 12071d4279SBram Moolenaar" Read the C syntax to start with 13071d4279SBram Moolenaarruntime! syntax/c.vim 14071d4279SBram Moolenaarunlet b:current_syntax 15071d4279SBram Moolenaar 16ac7bd638SBram Moolenaar" C++ extensions 17071d4279SBram Moolenaarsyn keyword cppStatement new delete this friend using 18071d4279SBram Moolenaarsyn keyword cppAccess public protected private 19b4ff518dSBram Moolenaarsyn keyword cppModifier inline virtual explicit export 20b4ff518dSBram Moolenaarsyn keyword cppType bool wchar_t 21071d4279SBram Moolenaarsyn keyword cppExceptions throw try catch 22071d4279SBram Moolenaarsyn keyword cppOperator operator typeid 23071d4279SBram Moolenaarsyn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq 24071d4279SBram Moolenaarsyn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1 25071d4279SBram Moolenaarsyn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$" 26071d4279SBram Moolenaarsyn keyword cppStorageClass mutable 27071d4279SBram Moolenaarsyn keyword cppStructure class typename template namespace 28071d4279SBram Moolenaarsyn keyword cppBoolean true false 29d8b77f7dSBram Moolenaarsyn keyword cppConstant __cplusplus 30071d4279SBram Moolenaar 31ac7bd638SBram Moolenaar" C++ 11 extensions 32ac7bd638SBram Moolenaarif !exists("cpp_no_cpp11") 33b4ff518dSBram Moolenaar syn keyword cppModifier override final 34b4ada79aSBram Moolenaar syn keyword cppType nullptr_t auto 35ac7bd638SBram Moolenaar syn keyword cppExceptions noexcept 36d8b77f7dSBram Moolenaar syn keyword cppStorageClass constexpr decltype thread_local 37ac7bd638SBram Moolenaar syn keyword cppConstant nullptr 38d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT 39d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE 40d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE 41d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE 42d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE 43d8b77f7dSBram Moolenaar syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE 44f2571c61SBram Moolenaar syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell 45*95a9dd1eSBram Moolenaar syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1 46*95a9dd1eSBram Moolenaar syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$" 47ac7bd638SBram Moolenaarendif 48ac7bd638SBram Moolenaar 49b4ff518dSBram Moolenaar" C++ 14 extensions 50b4ff518dSBram Moolenaarif !exists("cpp_no_cpp14") 51b4ada79aSBram Moolenaar syn case ignore 52b4ada79aSBram Moolenaar syn match cppNumber display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>" 536aa8cea4SBram Moolenaar syn match cppNumber display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" contains=cFloat 54b4ada79aSBram Moolenaar syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>" 55b4ada79aSBram Moolenaar syn case match 56b4ff518dSBram Moolenaarendif 57b4ff518dSBram Moolenaar 58*95a9dd1eSBram Moolenaar" C++ 20 extensions 59*95a9dd1eSBram Moolenaarif !exists("cpp_no_cpp20") 60*95a9dd1eSBram Moolenaar syn keyword cppStatement co_await co_return co_yield requires 61*95a9dd1eSBram Moolenaar syn keyword cppStorageClass consteval constinit 62*95a9dd1eSBram Moolenaar syn keyword cppStructure concept 63*95a9dd1eSBram Moolenaar syn keyword cppType char8_t 64*95a9dd1eSBram Moolenaar syn keyword cppModule import module export 65*95a9dd1eSBram Moolenaarendif 66*95a9dd1eSBram Moolenaar 67*95a9dd1eSBram Moolenaar" C++ 17 extensions 68*95a9dd1eSBram Moolenaarif !exists("cpp_no_cpp17") 69*95a9dd1eSBram Moolenaar syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1 70*95a9dd1eSBram Moolenaar syn match cppCast "\<reinterpret_pointer_cast\s*$" 71*95a9dd1eSBram Moolenaarendif 72*95a9dd1eSBram Moolenaar 73071d4279SBram Moolenaar" The minimum and maximum operators in GNU C++ 74071d4279SBram Moolenaarsyn match cppMinMax "[<>]?" 75071d4279SBram Moolenaar 76071d4279SBram Moolenaar" Default highlighting 77f37506f6SBram Moolenaarhi def link cppAccess cppStatement 78f37506f6SBram Moolenaarhi def link cppCast cppStatement 79f37506f6SBram Moolenaarhi def link cppExceptions Exception 80f37506f6SBram Moolenaarhi def link cppOperator Operator 81f37506f6SBram Moolenaarhi def link cppStatement Statement 82f37506f6SBram Moolenaarhi def link cppModifier Type 83f37506f6SBram Moolenaarhi def link cppType Type 84f37506f6SBram Moolenaarhi def link cppStorageClass StorageClass 85f37506f6SBram Moolenaarhi def link cppStructure Structure 86f37506f6SBram Moolenaarhi def link cppBoolean Boolean 87f37506f6SBram Moolenaarhi def link cppConstant Constant 88f37506f6SBram Moolenaarhi def link cppRawStringDelimiter Delimiter 89f37506f6SBram Moolenaarhi def link cppRawString String 90f37506f6SBram Moolenaarhi def link cppNumber Number 91*95a9dd1eSBram Moolenaarhi def link cppModule Include 92071d4279SBram Moolenaar 93071d4279SBram Moolenaarlet b:current_syntax = "cpp" 94071d4279SBram Moolenaar 95071d4279SBram Moolenaar" vim: ts=8 96