Skip to content

Commit

Permalink
update vim config
Browse files Browse the repository at this point in the history
  • Loading branch information
Wes974 committed Oct 18, 2020
1 parent f93fde3 commit 3235e47
Showing 1 changed file with 205 additions and 20 deletions.
225 changes: 205 additions & 20 deletions dotfiles/nvim/init.vim
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ let g:coc_global_extensions = [
\ 'coc-snippets',
\ 'coc-pairs',
\ 'coc-lists',
\ 'coc-actions'
\ 'coc-highlight',
\ 'coc-python',
\ 'coc-clangd'
Expand All @@ -29,17 +30,32 @@ Plug 'vim-airline/vim-airline-themes'
" Completion
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Snippets
Plug 'honza/vim-snippets'

" Linting
Plug 'rhysd/vim-clang-format', { 'for': ['c', 'cpp'] }

" Syntax
Plug 'sheerun/vim-polyglot'

" See parentheses easier
Plug 'junegunn/rainbow_parentheses.vim'

" NERDTree
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }

" Plist support
Plug 'darfink/vim-plist', { 'for': 'plist' }

" FZF
Plug '/usr/local/opt/fzf'
" Whitespace
Plug 'ntpeters/vim-better-whitespace'

" Git integration
Plug 'airblade/vim-gitgutter'

" Better icons
Plug 'ryanoasis/vim-devicons'

" Initialize plugin system
call plug#end()
Expand All @@ -53,13 +69,10 @@ set encoding=utf-8
set fileencoding=utf-8 " UTF-8 on write
filetype plugin indent on

if has("vms")
set nobackup " do not keep a backup file, use versions instead
else
set backup " keep a backup file
endif
set nobackup " This is recommended by coc
set nowritebackup " This is recommended by coc

" set undodir=~/.config/nvim/undodir " Disabled for now
set undodir=~/.config/nvim/undodir " Disabled for now
set undofile
set undolevels=100
set undoreload=1000
Expand Down Expand Up @@ -103,7 +116,9 @@ let g:python3_host_prog = '/usr/bin/python3'

" Color Scheme Options ----------------------------------------------------

set termguicolors
if exists('+termguicolors')
set termguicolors
endif
colorscheme civic

" Auto commands ------------------------------------------------------------
Expand All @@ -130,11 +145,19 @@ nnoremap <silent> <BS> :nohlsearch<CR>
" Tabs, Spaces, Scrolling and Splits ----------------------------------------

set tabstop=4 " Numbers of visual spaces / tabs.
set softtabstop=4 " Numbers of spaces / tabs.
" set tabstop=4 " Numbers of visual spaces / tabs.
" set softtabstop=4 " Numbers of spaces / tabs.
" set expandtab " Tab -> Space.
" set shiftwidth=4
" set shiftround

set expandtab " Tab -> Space.
set shiftwidth=4
set shiftround
set shiftwidth=4 " When shifting, indent using four spaces.
set softtabstop=-1 " Use same value as shiftwidth.
set shiftround " When shifting lines, round the indentation to the nearest multiple of “shiftwidth.”
set smarttab
set smartindent " Makes indenting smart
set autoindent " Good auto indent

set scrolloff=15
set sidescrolloff=20
Expand All @@ -149,6 +172,15 @@ endif
set splitbelow
set splitright

" Spell-checking -------------------------------------------------------------

" Spell languages
set spelllang=en,fr
" Enable spell-checking for Markdown files
autocmd BufRead,BufNewFile *.md setlocal spell
" Enable spell-checking for git commit
autocmd FileType gitcommit setlocal spell

" Plugins --------------------------------------------------------------------

" airline
Expand All @@ -164,17 +196,170 @@ autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in
" Close NERDTree if it's the only remaining
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" rainbow-parentheses
let g:rainbow#max_level = 16
let g:rainbow#pairs = [['(', ')'], ['[', ']'], ['{', '}']]

autocmd FileType * RainbowParentheses

" clang-format
let g:clang_format#detect_style_file = 1
let g:clang_format#auto_format = 1

" Keys --------------------------------------------------------------------

" Move by visual line
nnoremap <expr> k (v:count > 1 ? "m'" . v:count : '') . 'gk'
nnoremap <expr> j (v:count > 1 ? "m'" . v:count : '') . 'gj'
" vim-coc specific keybindings
" Use <Tab> and <S-Tab> to navigate the completion list
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
" Use <cr> to confirm completion
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
" Map ; to :
nnoremap ; :
" coc.nvim config --------------------------------------------------------

" Use tab for trigger completion with characters ahead and navigate.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction

" Use <c-space> to trigger completion.
inoremap <silent><expr> <c-space> coc#refresh()
if has('nvim')
inoremap <silent><expr> <c-space> coc#refresh()
else
inoremap <silent><expr> <c-@> coc#refresh()
endif

" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
" position. Coc only does snippet and additional edit on confirm.
" <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
if exists('*complete_info')
inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
else
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
endif

" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigation.
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
" Use K to show documentation in preview window.
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocActionAsync('doHover')
endif
endfunction

" Highlight the symbol and its references when holding the cursor.
autocmd CursorHold * silent call CocActionAsync('highlight')

" Symbol renaming.
nmap <leader>rn <Plug>(coc-rename)
" Formatting selected code.
xmap <leader>f <Plug>(coc-format-selected)
nmap <leader>f <Plug>(coc-format-selected)
augroup mygroup
autocmd!
" Setup formatexpr specified filetype(s).
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
" Update signature help on jump placeholder.
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
augroup end

" Applying codeAction to the selected region.
" Example: `<leader>aap` for current paragraph
xmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)
" Remap keys for applying codeAction to the current buffer.
nmap <leader>ac <Plug>(coc-codeaction)
" Apply AutoFix to problem on the current line.
nmap <leader>qf <Plug>(coc-fix-current)
" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server.
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)
" Use CTRL-S for selections ranges.
" Requires 'textDocument/selectionRange' support of language server.
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)
" Add `:Format` command to format current buffer.
command! -nargs=0 Format :call CocAction('format')

" Add `:Fold` command to fold current buffer.
command! -nargs=? Fold :call CocAction('fold', <f-args>)

" Add `:OR` command for organize imports of the current buffer.
command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport')

" Add (Neo)Vim's native statusline support.
" NOTE: Please see `:h coc-status` for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline.
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}

" Mappings for CoCList
" Show all diagnostics.
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
" Manage extensions.
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
" Show commands.
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
" Find symbol of current document.
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
" Search workspace symbols.
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
" Do default action for next item.
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
" Do default action for previous item.
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
" Resume latest coc list.
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
" Snippets
" Use <C-l> for trigger snippet expand.
imap <C-l> <Plug>(coc-snippets-expand)
" Use <C-j> for select text for visual placeholder of snippet.
vmap <C-j> <Plug>(coc-snippets-select)
" Use <C-j> for jump to next placeholder, it's default of coc.nvim
let g:coc_snippet_next = '<c-j>'

" Use <C-k> for jump to previous placeholder, it's default of coc.nvim
let g:coc_snippet_prev = '<c-k>'

" Use <C-j> for both expand and jump (make expand higher priority.)
imap <C-j> <Plug>(coc-snippets-expand-jump)
" Use <leader>x for convert visual selected code to snippet
xmap <leader>x <Plug>(coc-convert-snippet)

0 comments on commit 3235e47

Please sign in to comment.