1
0
Fork 0
mirror of https://github.com/vim/vim synced 2025-03-16 06:47:52 +01:00
vim/runtime/syntax/cpp.vim

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

132 lines
6 KiB
VimL
Raw Normal View History

2004-06-13 20:20:40 +00:00
" Vim syntax file
" Language: C++
" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp)
2013-03-19 11:35:58 +01:00
" Previous Maintainer: Ken Shan <ccshan@post.harvard.edu>
" Last Change: 2024 May 04
" 2024 May 04 by Vim Project (fix digit separator in octals and floats)
2004-06-13 20:20:40 +00:00
" quit when a syntax file was already loaded
if exists("b:current_syntax")
2004-06-13 20:20:40 +00:00
finish
endif
2021-01-18 19:55:44 +01:00
" inform C syntax that the file was included from cpp.vim
let b:filetype_in_cpp_family = 1
2004-06-13 20:20:40 +00:00
" Read the C syntax to start with
runtime! syntax/c.vim
unlet b:current_syntax
unlet b:filetype_in_cpp_family
2004-06-13 20:20:40 +00:00
2013-03-19 11:35:58 +01:00
" C++ extensions
2004-06-13 20:20:40 +00:00
syn keyword cppStatement new delete this friend using
syn keyword cppAccess public protected private
2015-11-10 21:15:48 +01:00
syn keyword cppModifier inline virtual explicit export
syn keyword cppType bool wchar_t
2004-06-13 20:20:40 +00:00
syn keyword cppExceptions throw try catch
syn keyword cppOperator operator typeid
syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
syn keyword cppStorageClass mutable
syn keyword cppStructure class typename template namespace
syn keyword cppBoolean true false
syn keyword cppConstant __cplusplus
2004-06-13 20:20:40 +00:00
2013-03-19 11:35:58 +01:00
" C++ 11 extensions
if !exists("cpp_no_cpp11")
2015-11-10 21:15:48 +01:00
syn keyword cppModifier override final
2016-10-30 21:55:26 +01:00
syn keyword cppType nullptr_t auto
2013-03-19 11:35:58 +01:00
syn keyword cppExceptions noexcept
syn keyword cppStorageClass constexpr decltype thread_local
2013-03-19 11:35:58 +01:00
syn keyword cppConstant nullptr
syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
2021-05-30 20:54:13 +02:00
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
2019-12-19 22:12:03 +01:00
syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1
syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$"
2013-03-19 11:35:58 +01:00
endif
2015-11-10 21:15:48 +01:00
" C++ 14 extensions
if !exists("cpp_no_cpp14")
2021-05-30 20:54:13 +02:00
syn match cppNumbers display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat
syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
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*\)\=\>"
syn match cppNumber display contained "\<0\('\=\o\+\)\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
2021-05-30 20:54:13 +02:00
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*\)\=\>"
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*\)\=\>"
syn match cppFloat display contained "\<\d\('\=\d\+\)*\.\(\d\('\=\d\+\)*\)\=\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
syn match cppFloat display contained "\.\d\('\=\d\+\)*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
2021-05-30 20:54:13 +02:00
syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
2021-08-29 21:55:35 +02:00
syn region cppString start=+\(L\|u\|u8\|U\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell
2021-05-30 20:54:13 +02:00
endif
" C++ 17 extensions
if !exists("cpp_no_cpp17")
syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1
syn match cppCast "\<reinterpret_pointer_cast\s*$"
syn match cppFloat display contained "\<0x\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
2021-08-29 21:55:35 +02:00
" TODO: push this up to c.vim if/when supported in C23
syn match cppCharacter "u8'[^\\]'"
syn match cppCharacter "u8'[^']*'" contains=cSpecial
if exists("c_gnu")
syn match cppSpecialError "u8'\\[^'\"?\\abefnrtv]'"
syn match cppSpecialCharacter "u8'\\['\"?\\abefnrtv]'"
else
syn match cppSpecialError "u8'\\[^'\"?\\abfnrtv]'"
syn match cppSpecialCharacter "u8'\\['\"?\\abfnrtv]'"
endif
syn match cppSpecialCharacter display "u8'\\\o\{1,3}'"
syn match cppSpecialCharacter display "u8'\\x\x\+'"
2015-11-10 21:15:48 +01:00
endif
2019-12-19 22:12:03 +01:00
" C++ 20 extensions
if !exists("cpp_no_cpp20")
2021-05-30 20:54:13 +02:00
syn match cppNumber display contained "\<0\(y\|d\)\>"
syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>"
syn match cppNumber display contained "\<0\o\+\(y\|d\)\>"
syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>"
syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>"
2019-12-19 22:12:03 +01:00
syn keyword cppStatement co_await co_return co_yield requires
syn keyword cppStorageClass consteval constinit
syn keyword cppStructure concept
syn keyword cppType char8_t
syn keyword cppModule import module export
endif
2004-06-13 20:20:40 +00:00
" The minimum and maximum operators in GNU C++
syn match cppMinMax "[<>]?"
" Default highlighting
hi def link cppAccess cppStatement
hi def link cppCast cppStatement
hi def link cppExceptions Exception
hi def link cppOperator Operator
hi def link cppStatement Statement
hi def link cppModifier Type
hi def link cppType Type
hi def link cppStorageClass StorageClass
hi def link cppStructure Structure
hi def link cppBoolean Boolean
2021-08-29 21:55:35 +02:00
hi def link cppCharacter cCharacter
hi def link cppSpecialCharacter cSpecialCharacter
hi def link cppSpecialError cSpecialError
hi def link cppConstant Constant
hi def link cppRawStringDelimiter Delimiter
hi def link cppRawString String
2021-05-30 20:54:13 +02:00
hi def link cppString String
hi def link cppNumber Number
2021-05-30 20:54:13 +02:00
hi def link cppFloat Number
2019-12-19 22:12:03 +01:00
hi def link cppModule Include
2004-06-13 20:20:40 +00:00
let b:current_syntax = "cpp"
" vim: ts=8