Refactor and optimize C/C++ syntax highlights
This commit is contained in:
parent
ddc24d7fda
commit
3d43c5460c
@ -3,49 +3,84 @@
|
|||||||
" Author: Kenneth Benzie (Benie) <k.benzie83@gmail.com>
|
" Author: Kenneth Benzie (Benie) <k.benzie83@gmail.com>
|
||||||
" Last Modified: September 04, 2016
|
" Last Modified: September 04, 2016
|
||||||
|
|
||||||
" Match delimiter expressions: (expr) {expr} : ;
|
if !exists('c_no_function')
|
||||||
" ^ ^ ^ ^ ^ ^
|
" Match function expressions: expr()
|
||||||
syn match cDelimiter '[()\[\]:;]'
|
" ^^^^
|
||||||
" Match single character operators, ordering within the [] is important
|
syn match cFunction '\a\w*\ze\s*(' display
|
||||||
syn match cOperator '[\*=\.\^\~+\-,&|!%?]'
|
|
||||||
" Match single character operators if they are surrounded by white space: / < >
|
|
||||||
" ^ ^ ^
|
|
||||||
syn match cOperator '\(\s\zs\/\s\ze\|\s\zs<\s\ze\|\s\zs>\s\ze\)'
|
|
||||||
" Match multi character operators
|
|
||||||
syn match cOperator '\(+=\|-=\|\*=\|/=\|%=\|\ˆ=\|&=\||=\|<<\|>>\|>>=\)'
|
|
||||||
syn match cOperator '\(<<=\|==\|!=\|<=\|>=\|&&\|||\|++\|--\|->\*\|->\)'
|
|
||||||
" Match : in ternary operator as cOperator
|
|
||||||
syn region cOperatorTernary matchgroup=cOperator start='?' end=':' transparent
|
|
||||||
" TODO: Match operator/ operator< operator>
|
|
||||||
" Match function expressions: expr()
|
|
||||||
" ^^^^
|
|
||||||
syn match cFunction '\w[A-Za-z0-9_]*\ze\s*('
|
|
||||||
" Match label expressions: expr:
|
|
||||||
" ^^^^
|
|
||||||
syn match cLabel '^\s*\w[A-Za-z0-9_]\+\ze::\@!' contains=cppAccess
|
|
||||||
|
|
||||||
" Match Doxygen comments
|
hi default link cFunction Function
|
||||||
let g:c_doxygen = get(g:, 'c_doxygen', 1)
|
|
||||||
if exists('g:c_doxygen') && g:c_doxygen
|
|
||||||
syn region cDoxygenMarkdownMono oneline start='`' end='`'
|
|
||||||
syn match cDoxygenUrl /https\?:\/\/\(\w\+\(:\w\+\)\?@\)\?\([A-Za-z][-_0-9A-Za-z]*\.\)\{1,}\(\w\{2,}\.\?\)\{1,}\(:[0-9]\{1,5}\)\?\S*/
|
|
||||||
syn region cDoxygenComment oneline start='\/\/\/' end='$' contains=cDoxygenMarkdownMono,cDoxygenUrl,@Spell
|
|
||||||
syn region cDoxygen oneline matchgroup=cComment start='\/\/\/\s*[\\@]brief\s\+' end='$' contains=cDoxygenMarkdownMono,@Spell
|
|
||||||
syn region cDoxygen oneline matchgroup=cComment start='\/\/\/\s*[\\@]tparam\s\+' end='\(\s.*$\|$\)'
|
|
||||||
syn region cDoxygen oneline matchgroup=cComment start='\/\/\/\s*[\\@]param\(\[\(\|in\|out\|in,out\)\]\)\=\s\+' end='\(\s.*$\|$\)'
|
|
||||||
syn match cDoxygenTodo 'todo' contained
|
|
||||||
syn region cComment oneline start='\/\/\/\s*[\\@]\zetodo\s\+' end='$' contains=cDoxygenTodo,@Spell
|
|
||||||
hi default link cDoxygenMarkdownMono SpecialComment
|
|
||||||
hi default link cDoxygenUrl Underlined
|
|
||||||
hi default link cDoxygenComment cComment
|
|
||||||
hi default link cDoxygen SpecialComment
|
|
||||||
hi default link cDoxygenTodo Todo
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if !exists('c_no_delimiters')
|
||||||
|
" Match delimiter expressions: (expr) {expr} ;
|
||||||
|
" ^ ^ ^ ^ ^
|
||||||
|
syn match cDelimiter '[()\[\];:]' display
|
||||||
|
|
||||||
" Match curly braces with cDelimiter highlight group
|
" Match curly braces with cDelimiter highlight group
|
||||||
syn region cBlock matchgroup=cDelimiter start="{" end="}" transparent fold
|
syn region cBlock matchgroup=cDelimiter start="{" end="}" transparent fold
|
||||||
|
|
||||||
" Define additional highlight groups
|
hi link cUserCont Delimiter
|
||||||
hi default link cDelimiter Delimiter
|
hi default link cDelimiter cUserCont
|
||||||
hi default link cFunction Function
|
endif
|
||||||
|
|
||||||
|
if !exists('c_no_operators')
|
||||||
|
" Match: * - . ^ ~ + - , & | ! % ? < > order is important
|
||||||
|
" ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
|
||||||
|
syn match cOperator '[\*=\.\^\~+\-,&|!%?><]' display
|
||||||
|
|
||||||
|
" Match: / don't override // or /* or */
|
||||||
|
" ^
|
||||||
|
syn match cOperator '[\*\/]\@<!\/[\*\/]\@!' display
|
||||||
|
|
||||||
|
" Match: (expr) ? true : false;
|
||||||
|
" ^ ^
|
||||||
|
syn region cOperatorTernary matchgroup=cOperator start='?' end=':' transparent display
|
||||||
|
endif
|
||||||
|
|
||||||
|
let g:c_doxygen = get(g:, 'c_doxygen', 1)
|
||||||
|
if exists('g:c_doxygen') && g:c_doxygen
|
||||||
|
" Match: comment leader
|
||||||
|
syn match cDoxygenLeader '^\s*\/\/\/' contained display
|
||||||
|
|
||||||
|
" Match: @param name description.
|
||||||
|
" ^^^^
|
||||||
|
syn region cDoxygenSpecial matchgroup=cDoxygenComment start='@param\(\[\(\|in\|out\|in,out\)\]\)\=\s\+' end='\(\s\|$\)' contained display
|
||||||
|
|
||||||
|
" Match: @tparam name description.
|
||||||
|
" ^^^^
|
||||||
|
syn region cDoxygenSpecial matchgroup=cDoxygenComment start='@tparam\s\+' end='\(\s\|$\)' contained display
|
||||||
|
|
||||||
|
" Match: `markdown monospace`
|
||||||
|
" ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
syn region cDoxygenSpecial start='`' end='`' contained contains=@NoSpell,cDoxygenLeader display
|
||||||
|
|
||||||
|
" Match: @brief Description. @return Description.
|
||||||
|
" ^^^^^^^^^^^^ ^^^^^^^^^^^^
|
||||||
|
syn region cDoxygenSpecial matchgroup=cDoxygenComment start='@\(brief\|return[s]\?\|attention\)' end='\(^\s*\/\/\/\s*$\|^\(\s*\/\/\/\)\@!\)' contained contains=@Spell,cDoxygenLeader,cDoxygenSpecial display
|
||||||
|
|
||||||
|
" Match: @def MACRO
|
||||||
|
" ^^^^^
|
||||||
|
syn region cDoxygenSpecial matchgroup=cDoxygenComment start='@def' end='$' contained display
|
||||||
|
|
||||||
|
" Match: something ///< description.
|
||||||
|
" ^^^^^^^^^^^^
|
||||||
|
syn region cDoxygenSpecial matchgroup=cDoxygenComment oneline start='\/\/\/<' end='$' display
|
||||||
|
|
||||||
|
" Match: @todo description.
|
||||||
|
" ^^^^
|
||||||
|
syn match cDoxygenTodo '@\zstodo' contained display
|
||||||
|
|
||||||
|
" Match: http://some.url
|
||||||
|
" ^^^^^^^^^^^^^^^
|
||||||
|
syn match cDoxygenUrl /https\?:\/\/\(\w\+\(:\w\+\)\?@\)\?\([A-Za-z][-_0-9A-Za-z]*\.\)\{1,}\(\w\{2,}\.\?\)\{1,}\(:[0-9]\{1,5}\)\?\S*/ contained display
|
||||||
|
|
||||||
|
" Match: /// Description.
|
||||||
|
" ^^^^^^^^^^^^^^^^
|
||||||
|
syn region cDoxygenComment fold start='^\s*\/\/\/' end='^\(\s*\/\/\/\)\@!' contains=@Spell,cDoxygenSpecial,cDoxygenTodo,cDoxygenUrl
|
||||||
|
|
||||||
|
hi default link cDoxygenComment cComment
|
||||||
|
hi default link cDoxygenLeader cDoxygenComment
|
||||||
|
hi default link cDoxygenSpecial SpecialComment
|
||||||
|
hi default link cDoxygenTodo Todo
|
||||||
|
hi default link cDoxygenUrl Underlined
|
||||||
|
endif
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
" Language: C++
|
|
||||||
" Description: Additional C++ syntax file.
|
|
||||||
" Author: Kenneth Benzie (Benie) k.benzie83@gmail.com
|
|
||||||
" Last Modified: September 04, 2016
|
|
||||||
|
|
||||||
" Match delimiter expressions: <expr>, ex::pr
|
|
||||||
" ^ ^ ^^
|
|
||||||
syn match cppDelimiter '\(<\|>\|::\)'
|
|
||||||
" Match keyword logic operators
|
|
||||||
syn keyword cppOperator and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
|
|
||||||
" Match keyword operators
|
|
||||||
syn keyword cppOperator new delete alignas alignof decltype
|
|
||||||
" Match single character operators if they are surrounded by white space: / < >
|
|
||||||
" ^ ^ ^
|
|
||||||
syn match cppOperator '\(\s\zs\/\s\ze\|\s\zs<\s\ze\|\s\zs>\s\ze\)'
|
|
||||||
" Match nested namespace expressions: expr::
|
|
||||||
" ^^^^
|
|
||||||
syn match cppNestedNameSpecifier '\w[A-Za-z0-9_]*\ze::'
|
|
||||||
" Match multi character operators, override cppDelimiter matches for < >
|
|
||||||
" ^ ^
|
|
||||||
syn match cppOperator '\(<<\ze\s\|\s\zs>>\|>>=\|<<=\|<=\|>=\|->\*\|->\)'
|
|
||||||
" Match = delete; as a statement
|
|
||||||
" ^^^^^^
|
|
||||||
" TODO: For some reason \zs stop this from matching, so the cppEquals hack was
|
|
||||||
" added to work around the failure to highlight in that case. This is terrible
|
|
||||||
" and a fix needs to be found.
|
|
||||||
syn match cppEquals '='
|
|
||||||
syn match cppStatement '=\s\+delete\ze\s*;' contains=cppEquals
|
|
||||||
hi default link cppEquals cppOperator
|
|
||||||
|
|
||||||
" Define additional highlight groups
|
|
||||||
hi default link cppDelimiter Delimiter
|
|
||||||
|
|
||||||
" Override default highlight groups
|
|
||||||
hi link cppCast Operator
|
|
||||||
hi link cppModifier Statement
|
|
||||||
hi link cppNestedNameSpecifier Include
|
|
116
syntax/cpp.vim
Normal file
116
syntax/cpp.vim
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
" Language: C++
|
||||||
|
" Description:
|
||||||
|
" Current Maintainer: Kenneth Benzie (Benie) <k.benzie83@gmail.com>
|
||||||
|
" Created: December 23, 2016
|
||||||
|
|
||||||
|
" Quit when a syntax file was already loaded
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Disable C syntax options to improve performance
|
||||||
|
let b:c_no_curly_error = 1
|
||||||
|
let b:c_no_bracket_error = 1
|
||||||
|
let b:c_no_cformat = 1
|
||||||
|
let b:c_no_c11 = 1
|
||||||
|
let b:c_no_ansi = 1
|
||||||
|
let b:c_no_bsd = 1
|
||||||
|
let b:c_gnu = 0
|
||||||
|
let b:c_no_operators = 1
|
||||||
|
|
||||||
|
" Read the C syntax to start with
|
||||||
|
runtime! syntax/c.vim
|
||||||
|
unlet b:current_syntax
|
||||||
|
|
||||||
|
" C++98
|
||||||
|
syn keyword cppStatement this friend using
|
||||||
|
syn keyword cppAccess public protected private
|
||||||
|
syn keyword cppModifier inline virtual explicit export
|
||||||
|
syn keyword cppType bool wchar_t
|
||||||
|
syn keyword cppExceptions throw try catch
|
||||||
|
syn keyword cppOperator new delete typeid and bitor or xor compl bitand and_eq
|
||||||
|
\ or_eq xor_eq not not_eq
|
||||||
|
if exists('c_no_operators')
|
||||||
|
syn keyword cppOperator operator
|
||||||
|
endif
|
||||||
|
syn keyword cppCast const_cast static_cast dynamic_cast reinterpret_cast
|
||||||
|
syn keyword cppStorageClass mutable
|
||||||
|
syn keyword cppStructure class typename template namespace
|
||||||
|
syn keyword cppBoolean true false
|
||||||
|
syn keyword cppConstant __cplusplus
|
||||||
|
|
||||||
|
" C++11
|
||||||
|
if !exists('cpp_no_cpp11')
|
||||||
|
syn keyword cppModifier override final
|
||||||
|
syn keyword cppType char16_t char32_t nullptr_t
|
||||||
|
syn keyword cppExceptions noexcept
|
||||||
|
syn keyword cppStorageClass constexpr decltype thread_local
|
||||||
|
syn keyword cppConstant nullptr
|
||||||
|
syn keyword cppOperator alignas alignof decltype static_assert
|
||||||
|
syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell display
|
||||||
|
|
||||||
|
" Match: = delete; and = default;
|
||||||
|
" ^^^^^^ ^^^^^^^
|
||||||
|
" Both `delete` and `default` are keywords which normally take precidence,
|
||||||
|
" however if the match starts before the beginning of the keyword it will be
|
||||||
|
" chosen instead so we can specialze for this case.
|
||||||
|
syn match cppStatement '=\s\+\(delete\|default\)\ze\s*;\?' contains=cOperator display
|
||||||
|
endif
|
||||||
|
|
||||||
|
" C++14
|
||||||
|
if !exists('cpp_no_cpp14')
|
||||||
|
syn match cppNumber display '\<0b[01]\+\(u\=l\{0,2}\|ll\=u\)\>'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('cpp_no_delimiters')
|
||||||
|
" Match: delimiter expressions: <expr>, ex::pr
|
||||||
|
" ^ ^ ^^
|
||||||
|
syn match cppDelimiter '\(<\|>\|::\)' display
|
||||||
|
|
||||||
|
" Match: nested namespace expressions: expr::
|
||||||
|
" ^^^^
|
||||||
|
syn match cppNestedName '\a\w*::' display contains=cppDelimiter
|
||||||
|
|
||||||
|
" Match: label: as a Label and public: protected: private: as a Statement
|
||||||
|
" ^^^^^ ^^^^^^ ^^^^^^^^^ ^^^^^^^
|
||||||
|
syn match cUserCont "^\s*\I\i*\s*:$" contains=cppAccess display
|
||||||
|
|
||||||
|
hi default link cppDelimiter cDelimiter
|
||||||
|
hi default link cppNestedName cInclude
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !exists('cpp_no_operators') && !exists('cpp_no_delimiters')
|
||||||
|
" Match: single character operators if they are surrounded by white space: / < >
|
||||||
|
" ^ ^ ^
|
||||||
|
syn match cppOperator '\(\s\zs\/\s\ze\|\s\zs<\s\ze\|\s\zs>\s\ze\)' display
|
||||||
|
|
||||||
|
" Match: <= >= -> << >> <<= >>= ->*
|
||||||
|
" ^^ ^^ ^^ ^^ ^^ ^^^ ^^^ ^^^
|
||||||
|
syn match cppOperator '\(<=\|>=\|->\|<<\ze\s\|\s\zs>>\|>>=\|<<=\|->\*\)' display
|
||||||
|
|
||||||
|
" Match: operator<< operator>> operator< operator> operator[]
|
||||||
|
" ^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^
|
||||||
|
" operator new operator delete operator new[] operator delete[]
|
||||||
|
" ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
|
||||||
|
syn match cppOperator 'operator\s*\(\/\|<<\|>>\|<\|>\|\(new\|delete\)\?\s*\[\s*\]\)\?' display
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Default highlighting
|
||||||
|
hi def link cppAccess cppStatement
|
||||||
|
hi def link cppCast cppOperator
|
||||||
|
hi def link cppExceptions Exception
|
||||||
|
hi def link cppOperator Operator
|
||||||
|
hi def link cppStatement Statement
|
||||||
|
hi def link cppModifier cppStatement
|
||||||
|
hi def link cppType Type
|
||||||
|
hi def link cppStorageClass StorageClass
|
||||||
|
hi def link cppStructure Structure
|
||||||
|
hi def link cppBoolean Boolean
|
||||||
|
hi def link cppConstant Constant
|
||||||
|
hi def link cppRawStringDelimiter Delimiter
|
||||||
|
hi def link cppRawString String
|
||||||
|
hi def link cppNumber Number
|
||||||
|
|
||||||
|
let b:current_syntax = 'cpp'
|
||||||
|
|
||||||
|
" vim: ts=8
|
Loading…
x
Reference in New Issue
Block a user