xref: /vim-8.2.3635/runtime/syntax/cpp.vim (revision b16ad968)
1" Vim syntax file
2" Language:	C++
3" Current Maintainer:	vim-jp (https://github.com/vim-jp/vim-cpp)
4" Previous Maintainer:	Ken Shan <[email protected]>
5" Last Change:	2019 Dec 18
6
7" quit when a syntax file was already loaded
8if exists("b:current_syntax")
9  finish
10endif
11
12" Read the C syntax to start with
13runtime! syntax/c.vim
14unlet b:current_syntax
15
16" C++ extensions
17syn keyword cppStatement	new delete this friend using
18syn keyword cppAccess		public protected private
19syn keyword cppModifier		inline virtual explicit export
20syn keyword cppType		bool wchar_t
21syn keyword cppExceptions	throw try catch
22syn keyword cppOperator		operator typeid
23syn keyword cppOperator		and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
24syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
25syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
26syn keyword cppStorageClass	mutable
27syn keyword cppStructure	class typename template namespace
28syn keyword cppBoolean		true false
29syn keyword cppConstant		__cplusplus
30
31" C++ 11 extensions
32if !exists("cpp_no_cpp11")
33  syn keyword cppModifier	override final
34  syn keyword cppType		nullptr_t auto
35  syn keyword cppExceptions	noexcept
36  syn keyword cppStorageClass	constexpr decltype thread_local
37  syn keyword cppConstant	nullptr
38  syn keyword cppConstant	ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
39  syn keyword cppConstant	ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
40  syn keyword cppConstant	ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
41  syn keyword cppConstant	ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
42  syn keyword cppConstant	ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
43  syn keyword cppConstant	ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
44  syn region cppRawString	matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell
45  syn match cppCast		"\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1
46  syn match cppCast		"\<\(const\|static\|dynamic\)_pointer_cast\s*$"
47endif
48
49" C++ 14 extensions
50if !exists("cpp_no_cpp14")
51  syn case ignore
52  syn match cppNumber		display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
53  syn match cppNumber		display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" contains=cFloat
54  syn match cppNumber		display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
55  syn case match
56endif
57
58" C++ 20 extensions
59if !exists("cpp_no_cpp20")
60  syn keyword cppStatement	co_await co_return co_yield requires
61  syn keyword cppStorageClass	consteval constinit
62  syn keyword cppStructure	concept
63  syn keyword cppType		char8_t
64  syn keyword cppModule		import module export
65endif
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*$"
71endif
72
73" The minimum and maximum operators in GNU C++
74syn match cppMinMax "[<>]?"
75
76" Default highlighting
77hi def link cppAccess		cppStatement
78hi def link cppCast		cppStatement
79hi def link cppExceptions		Exception
80hi def link cppOperator		Operator
81hi def link cppStatement		Statement
82hi def link cppModifier		Type
83hi def link cppType		Type
84hi def link cppStorageClass	StorageClass
85hi def link cppStructure		Structure
86hi def link cppBoolean		Boolean
87hi def link cppConstant		Constant
88hi def link cppRawStringDelimiter	Delimiter
89hi def link cppRawString		String
90hi def link cppNumber		Number
91hi def link cppModule		Include
92
93let b:current_syntax = "cpp"
94
95" vim: ts=8
96