Keyword and regex-based syntax highlighting for C and C++11/14/17/20/23 in Vim.
The syntax files provide highlighting of:
- Common ANSI C keywords
- C++ Standard Library namespaces, types, helper types, helper template variables, and constants
- C++11 attributes
- Latest C++ language features like coroutines and concepts
- Function and function pointer declarations, and function calls (basically all words followed by an opening parenthesis)
- Optionally a simpler (less colorful) highlighting of standard C and C++ keywords
left: default cpp.vim syntax file, right: this plugin
Both syntax files are based on vim-cpp-enhanced-highlight with the following modifications:
- The C++ keywords
virtual,override,final,inline,explicitandexportare standard C++ statements and not types and are therefore highlighted using the highlight groupStatement. - Highlighting of library functions is purely regex-based.
- User-defined function templates and class/struct members are not highlighted. Their regex'es are too complicated and slow, and fail too often.
" Disable function highlighting (affects both C and C++ files)
let g:cpp_function_highlight = 0
" Enable highlighting of C++11 attributes
let g:cpp_attributes_highlight = 1
" Highlight struct/class member variables (affects both C and C++ files)
let g:cpp_member_highlight = 1
" Disable highlighting of type names in class, struct, union, enum, using, and
" concept declarations (affects both C and C++ files)
let g:cpp_type_name_highlight = 0
" Highlight operators (affects both C and C++ files)
let g:cpp_operator_highlight = 1
" Put all standard C and C++ keywords under Vim's highlight group 'Statement'
" (affects both C and C++ files)
let g:cpp_simple_highlight = 1The last option changes the highlighting of the following keywords:
- C:
static,register,auto,volatile,extern,const,inline,__attribute__,restrict,alignas,alignof,static_assert,noreturn,thread_local,struct,union,enum,case,default - C++:
class,typename,template,namespace,concept,mutable,constexprdecltype,consteval,constinit
$ cd ~/.vim/pack/git-plugins/start
$ git clone https://github.com/bfrg/vim-c-cpp-modernNote: The directory name git-plugins is arbitrary, you can pick any other
name. For more details see :help packages.
Distributed under the same terms as Vim itself. See :help license.