xref: /vim-8.2.3635/runtime/syntax/cpp.vim (revision b4ff518d)
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*b4ff518dSBram Moolenaar" Last Change:	2015 Nov 10
6071d4279SBram Moolenaar
7071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
8071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
9071d4279SBram Moolenaarif version < 600
10071d4279SBram Moolenaar  syntax clear
11071d4279SBram Moolenaarelseif exists("b:current_syntax")
12071d4279SBram Moolenaar  finish
13071d4279SBram Moolenaarendif
14071d4279SBram Moolenaar
15071d4279SBram Moolenaar" Read the C syntax to start with
16071d4279SBram Moolenaarif version < 600
17071d4279SBram Moolenaar  so <sfile>:p:h/c.vim
18071d4279SBram Moolenaarelse
19071d4279SBram Moolenaar  runtime! syntax/c.vim
20071d4279SBram Moolenaar  unlet b:current_syntax
21071d4279SBram Moolenaarendif
22071d4279SBram Moolenaar
23ac7bd638SBram Moolenaar" C++ extensions
24071d4279SBram Moolenaarsyn keyword cppStatement	new delete this friend using
25071d4279SBram Moolenaarsyn keyword cppAccess		public protected private
26*b4ff518dSBram Moolenaarsyn keyword cppModifier		inline virtual explicit export
27*b4ff518dSBram Moolenaarsyn keyword cppType		bool wchar_t
28071d4279SBram Moolenaarsyn keyword cppExceptions	throw try catch
29071d4279SBram Moolenaarsyn keyword cppOperator		operator typeid
30071d4279SBram Moolenaarsyn keyword cppOperator		and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
31071d4279SBram Moolenaarsyn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
32071d4279SBram Moolenaarsyn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
33071d4279SBram Moolenaarsyn keyword cppStorageClass	mutable
34071d4279SBram Moolenaarsyn keyword cppStructure	class typename template namespace
35071d4279SBram Moolenaarsyn keyword cppBoolean		true false
36d8b77f7dSBram Moolenaarsyn keyword cppConstant		__cplusplus
37071d4279SBram Moolenaar
38ac7bd638SBram Moolenaar" C++ 11 extensions
39ac7bd638SBram Moolenaarif !exists("cpp_no_cpp11")
40*b4ff518dSBram Moolenaar  syn keyword cppModifier	override final
41*b4ff518dSBram Moolenaar  syn keyword cppType		nullptr_t
42ac7bd638SBram Moolenaar  syn keyword cppExceptions	noexcept
43d8b77f7dSBram Moolenaar  syn keyword cppStorageClass	constexpr decltype thread_local
44ac7bd638SBram Moolenaar  syn keyword cppConstant	nullptr
45d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
46d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
47d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
48d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
49d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
50d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
51f2571c61SBram Moolenaar  syn region cppRawString	matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell
52ac7bd638SBram Moolenaarendif
53ac7bd638SBram Moolenaar
54*b4ff518dSBram Moolenaar" C++ 14 extensions
55*b4ff518dSBram Moolenaarif !exists("cpp_no_cpp14")
56*b4ff518dSBram Moolenaar  syn match cppNumber		display "\<0b[01]\+\(u\=l\{0,2}\|ll\=u\)\>"
57*b4ff518dSBram Moolenaarendif
58*b4ff518dSBram Moolenaar
59071d4279SBram Moolenaar" The minimum and maximum operators in GNU C++
60071d4279SBram Moolenaarsyn match cppMinMax "[<>]?"
61071d4279SBram Moolenaar
62071d4279SBram Moolenaar" Default highlighting
63071d4279SBram Moolenaarif version >= 508 || !exists("did_cpp_syntax_inits")
64071d4279SBram Moolenaar  if version < 508
65071d4279SBram Moolenaar    let did_cpp_syntax_inits = 1
66071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
67071d4279SBram Moolenaar  else
68071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
69071d4279SBram Moolenaar  endif
70071d4279SBram Moolenaar  HiLink cppAccess		cppStatement
71071d4279SBram Moolenaar  HiLink cppCast		cppStatement
72071d4279SBram Moolenaar  HiLink cppExceptions		Exception
73071d4279SBram Moolenaar  HiLink cppOperator		Operator
74071d4279SBram Moolenaar  HiLink cppStatement		Statement
75*b4ff518dSBram Moolenaar  HiLink cppModifier		Type
76071d4279SBram Moolenaar  HiLink cppType		Type
77071d4279SBram Moolenaar  HiLink cppStorageClass	StorageClass
78071d4279SBram Moolenaar  HiLink cppStructure		Structure
79071d4279SBram Moolenaar  HiLink cppBoolean		Boolean
80ac7bd638SBram Moolenaar  HiLink cppConstant		Constant
81f2571c61SBram Moolenaar  HiLink cppRawStringDelimiter	Delimiter
8213600303SBram Moolenaar  HiLink cppRawString		String
83071d4279SBram Moolenaar  delcommand HiLink
84071d4279SBram Moolenaarendif
85071d4279SBram Moolenaar
86071d4279SBram Moolenaarlet b:current_syntax = "cpp"
87071d4279SBram Moolenaar
88071d4279SBram Moolenaar" vim: ts=8
89