blob: 5437580a0ac364129a252e7425bb638657581dea [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>
Bram Moolenaar89a9c152021-08-29 21:55:35 +02005" Last Change: 2021 Aug 23
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
Bram Moolenaar071d4272004-06-13 20:20:40 +000018
Bram Moolenaarac7bd632013-03-19 11:35:58 +010019" C++ extensions
Bram Moolenaar071d4272004-06-13 20:20:40 +000020syn keyword cppStatement new delete this friend using
21syn keyword cppAccess public protected private
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010022syn keyword cppModifier inline virtual explicit export
23syn keyword cppType bool wchar_t
Bram Moolenaar071d4272004-06-13 20:20:40 +000024syn keyword cppExceptions throw try catch
25syn keyword cppOperator operator typeid
26syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
27syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
28syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
29syn keyword cppStorageClass mutable
30syn keyword cppStructure class typename template namespace
Bram Moolenaar071d4272004-06-13 20:20:40 +000031syn keyword cppBoolean true false
Bram Moolenaard8b77f72015-03-05 21:21:19 +010032syn keyword cppConstant __cplusplus
Bram Moolenaar071d4272004-06-13 20:20:40 +000033
Bram Moolenaarac7bd632013-03-19 11:35:58 +010034" C++ 11 extensions
35if !exists("cpp_no_cpp11")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010036 syn keyword cppModifier override final
Bram Moolenaarb4ada792016-10-30 21:55:26 +010037 syn keyword cppType nullptr_t auto
Bram Moolenaarac7bd632013-03-19 11:35:58 +010038 syn keyword cppExceptions noexcept
Bram Moolenaard8b77f72015-03-05 21:21:19 +010039 syn keyword cppStorageClass constexpr decltype thread_local
Bram Moolenaarac7bd632013-03-19 11:35:58 +010040 syn keyword cppConstant nullptr
Bram Moolenaard8b77f72015-03-05 21:21:19 +010041 syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
42 syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
43 syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
44 syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
45 syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
46 syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020047 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 +010048 syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1
49 syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$"
Bram Moolenaarac7bd632013-03-19 11:35:58 +010050endif
51
Bram Moolenaarb4ff5182015-11-10 21:15:48 +010052" C++ 14 extensions
53if !exists("cpp_no_cpp14")
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020054 syn match cppNumbers display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat
55 syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
56 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 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 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 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 syn match cppFloat display contained "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
61 syn match cppFloat display contained "\<\.\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*\)\=\>"
Bram Moolenaar89a9c152021-08-29 21:55:35 +020063 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 +010064endif
65
66" C++ 17 extensions
67if !exists("cpp_no_cpp17")
68 syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1
69 syn match cppCast "\<reinterpret_pointer_cast\s*$"
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020070 syn match cppFloat display contained "\<0x\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
71 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 +020072
73 " TODO: push this up to c.vim if/when supported in C23
74 syn match cppCharacter "u8'[^\\]'"
75 syn match cppCharacter "u8'[^']*'" contains=cSpecial
76 if exists("c_gnu")
77 syn match cppSpecialError "u8'\\[^'\"?\\abefnrtv]'"
78 syn match cppSpecialCharacter "u8'\\['\"?\\abefnrtv]'"
79 else
80 syn match cppSpecialError "u8'\\[^'\"?\\abfnrtv]'"
81 syn match cppSpecialCharacter "u8'\\['\"?\\abfnrtv]'"
82 endif
83 syn match cppSpecialCharacter display "u8'\\\o\{1,3}'"
84 syn match cppSpecialCharacter display "u8'\\x\x\+'"
85
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +020086endif
87
88" C++ 20 extensions
89if !exists("cpp_no_cpp20")
90 syn match cppNumber display contained "\<0\(y\|d\)\>"
91 syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>"
92 syn match cppNumber display contained "\<0\o\+\(y\|d\)\>"
93 syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>"
94 syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>"
95 syn keyword cppStatement co_await co_return co_yield requires
96 syn keyword cppStorageClass consteval constinit
97 syn keyword cppStructure concept
98 syn keyword cppType char8_t
99 syn keyword cppModule import module export
Bram Moolenaar95a9dd12019-12-19 22:12:03 +0100100endif
101
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102" The minimum and maximum operators in GNU C++
103syn match cppMinMax "[<>]?"
104
105" Default highlighting
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200106hi def link cppAccess cppStatement
107hi def link cppCast cppStatement
108hi def link cppExceptions Exception
109hi def link cppOperator Operator
110hi def link cppStatement Statement
111hi def link cppModifier Type
112hi def link cppType Type
113hi def link cppStorageClass StorageClass
114hi def link cppStructure Structure
115hi def link cppBoolean Boolean
Bram Moolenaar89a9c152021-08-29 21:55:35 +0200116hi def link cppCharacter cCharacter
117hi def link cppSpecialCharacter cSpecialCharacter
118hi def link cppSpecialError cSpecialError
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200119hi def link cppConstant Constant
120hi def link cppRawStringDelimiter Delimiter
121hi def link cppRawString String
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +0200122hi def link cppString String
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200123hi def link cppNumber Number
Bram Moolenaard2ea7cf2021-05-30 20:54:13 +0200124hi def link cppFloat Number
Bram Moolenaar95a9dd12019-12-19 22:12:03 +0100125hi def link cppModule Include
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126
127let b:current_syntax = "cpp"
128
129" vim: ts=8