diff --git a/after/ftplugin/cpp.vim b/after/ftplugin/cpp.vim index 4fe80ab..4dd59bc 100644 --- a/after/ftplugin/cpp.vim +++ b/after/ftplugin/cpp.vim @@ -1 +1,30 @@ -nnoremap :w :!g++ -Wall -std=c++11 % -o %<&&./%< +nnoremap :call compile_run_cpp() + +function! s:compile_run_cpp() abort + let src_path = expand('%:p:~') + let src_noext = expand('%:p:~:r') + " The building flags + let _flag = '-Wall -Wextra -std=c++11 -O2' + + if executable('clang++') + let prog = 'clang++' + elseif executable('g++') + let prog = 'g++' + else + echoerr 'No C++ compiler found on the system!' + endif + call s:create_term_buf('h', 20) + execute printf('term %s %s %s -o %s && %s', prog, _flag, src_path, src_noext, src_noext) + startinsert +endfunction + +function s:create_term_buf(_type, size) abort + set splitbelow + set splitright + if a:_type ==# 'v' + vnew + else + new + endif + execute 'resize ' . a:size +endfunction diff --git a/core/plugins.vim b/core/plugins.vim index 78bfb74..0df68f2 100644 --- a/core/plugins.vim +++ b/core/plugins.vim @@ -44,6 +44,9 @@ Plug 'machakann/vim-swap' " IDE for Lisp " Plug 'kovisoft/slimv' Plug 'vlime/vlime', {'rtp': 'vim/', 'for': 'lisp'} + +" C++ semantic highlighting +Plug 'jackguo380/vim-lsp-cxx-highlight' "}} "{{ Search related plugins @@ -390,6 +393,24 @@ if executable('pyls') augroup END endif +if executable('ccls') + augroup ccls_setup + autocmd! + au User lsp_setup call lsp#register_server({ + \ 'name': 'ccls', + \ 'cmd': {server_info->['ccls']}, + \ 'root_uri': {server_info->lsp#utils#path_to_uri( + \ lsp#utils#find_nearest_parent_file_directory( + \ lsp#utils#get_buffer_path(), ['.ccls', 'compile_commands.json', '.git/']))}, + \ 'initialization_options': { + \ 'highlight': { 'lsRanges' : v:true }, + \ 'cache': {'directory': stdpath('cache') . '/ccls' }, + \ }, + \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp', 'cc'], + \ }) + augroup END +endif + if executable('vim-language-server') augroup LspVim autocmd! @@ -546,9 +567,12 @@ endif "{{ Navigation and tags """"""""""""""""""""""""""" gutentags settings """""""""""""""""""""""""""""" -let g:gutentags_ctags_exclude = ['*.md', '*.html', '*.json', '*.toml', '*.css', '*.js',] " The path to store tags files, instead of in the project root. let g:gutentags_cache_dir = stdpath('cache') . '/ctags' +let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q'] +let g:gutentags_ctags_extra_args += ['--c++-kinds=+px'] +let g:gutentags_ctags_extra_args += ['--c-kinds=+px'] +let g:gutentags_ctags_exclude = ['*.md', '*.html', '*.json', '*.toml', '*.css', '*.js',] """"""""""""""""""""""""""" vista settings """""""""""""""""""""""""""""""""" let g:vista#renderer#icons = {