setlocal textwidth=100 " indent 4 spaces setlocal shiftwidth=4 setlocal tabstop=4 setlocal softtabstop=4 setlocal expandtab "TODO these are ignored because we set indentexpr in `indent/cpp.vim` " Ideally, indentexpr should read the settings from .clang-format if it exists setlocal nosmartindent setlocal autoindent setlocal cinkeys-=0# " don't reindent PP directives setlocal cinoptions+=:0 " don't indent case labels " Load the doxygen syntax let b:load_doxygen_syntax = 1 augroup fswitch_cpp au! au BufEnter *.h let b:fswitchdst = 'c,cpp' au BufEnter *.h let b:fswitchlocs = '.,reg:|include.*|src|' au BufEnter *.hpp let b:fswitchdst = 'cpp,c' au BufEnter *.hpp let b:fswitchlocs = '.,reg:|include.*|src|' au BufEnter *.cpp let b:fswitchdst = 'hpp,h' au BufEnter *.cpp let b:fswitchlocs = '.,reg:|src|include/**|' augroup END let g:switch_custom_definitions = \ [ \ ['EXPECT_FALSE', 'EXPECT_TRUE'], \ ['EXPECT_EQ', 'EXPECT_NE'], \ ['EXPECT_LT', 'EXPECT_GT'], \ ['ASSERT_FALSE', 'ASSERT_TRUE'], \ ['ASSERT_EQ', 'ASSERT_NE'], \ ['ASSERT_LT', 'ASSERT_GT'] \ ] let g:switch_const_definitions = \ [ { \ '\%(const \)\@!\([[:alnum:]_:<>]\{-}\) \%(&\)\@!': 'const \1 ', \ 'const \([[:alnum:]_:<>]\{-}\) &\@!': 'const \1 &' , \ 'const \([[:alnum:]_:<>]\{-}\) &': '\1 ' \ } ] nnoremap c :call switch#Switch(g:switch_const_definitions, {}) nnoremap gd :YcmCompleter GoTo nnoremap d :vs:YcmCompleter GoTo nnoremap gD :YcmCompleter GoToReferences " format with = call operator#user#define_ex_command('ycmcompleter-format', 'YcmCompleter Format') map = (operator-ycmcompleter-format) vnoremap = :YcmCompleter Format " restore = mapping to g= nnoremap g= = vnoremap g= = setlocal errorformat= setlocal errorformat+=%f:%l:%c:\ %trror:\ %m setlocal errorformat+=%f:%l:%c:\ %tarning:\ %m setlocal errorformat+=%D%*\\a[%*\\d]:\ Entering\ directory\ [`']%f' setlocal errorformat+=%X%*\\a[%*\\d]:\ Leaving\ directory\ [`']%f' setlocal errorformat+=%D%*\\a:\ Entering\ directory\ [`']%f' setlocal errorformat+=%X%*\\a:\ Leaving\ directory\ [`']%f' setlocal errorformat+=%*[^[]\[%tRROR\]%m\ \[%f:%l\] setlocal errorformat+=%*[^[]\[%tARNING\]%m\ \[%f:%l\] packadd termdebug let g:termdebug_wide = 1 function! s:Debug(...) tabedit % let t:debug_tab=1 au BufDelete !gdb ++once if exists('t:debug_tab') | tabclose | endif "TODO restore mappings "TODO make mappings local to source buffer nnoremap :call TermDebugSendCommand('advance -source '.expand('%').' -line '.line(".")) nnoremap :Step nnoremap :Over nnoremap :Finish endfunction command! -nargs=* -complete=file -bang Debug call Debug() | Termdebug command! -nargs=+ -complete=file -bang DebugCommand call Debug() | TermdebugCommand setlocal foldmethod=syntax " set foldlevel according to number of matches of 'namespace' and 'class' not " containing ';' function! InitialFoldLevel() let v:errmsg = "" keepjumps keeppatterns silent! 1,/}/s/^\(namespace\|class\) \+[^;]*$//n if v:errmsg == "" let &l:foldlevel=str2nr(split(v:statusmsg)[0]) endif endf call InitialFoldLevel()