|
" add this in ~/config/nvim/init.nvim |
|
"setup vim-plug {{{ |
|
|
|
"Note: install vim-plug if not present |
|
if empty(glob('~/.config/nvim/autoload/plug.vim')) |
|
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |
|
autocmd VimEnter * PlugInstall |
|
endif |
|
|
|
"}}} |
|
|
|
" Specify a directory for plugins |
|
call plug#begin('~/.nvim/plugged') |
|
|
|
Plug 'neoclide/coc.nvim', {'branch': 'release'} |
|
Plug 'scrooloose/nerdtree' |
|
Plug 'Xuyuanp/nerdtree-git-plugin' |
|
Plug 'tiagofumo/vim-nerdtree-syntax-highlight' |
|
Plug 'ryanoasis/vim-devicons' |
|
Plug 'airblade/vim-gitgutter' |
|
Plug 'ctrlpvim/ctrlp.vim' " fuzzy find files |
|
Plug 'scrooloose/nerdcommenter' |
|
|
|
Plug 'christoomey/vim-tmux-navigator' |
|
|
|
Plug 'haishanh/night-owl.vim' |
|
|
|
Plug 'HerringtonDarkholme/yats.vim' " TS Syntax |
|
|
|
" Initialize plugin system |
|
call plug#end() |
|
|
|
set termguicolors |
|
colorscheme night-owl |
|
|
|
inoremap jk <ESC> |
|
map <silent> <C-n> :NERDTreeToggle<CR> |
|
vmap ++ <plug>NERDCommenterToggle |
|
nmap ++ <plug>NERDCommenterToggle |
|
|
|
|
|
let g:NERDTreeGitStatusWithFlags = 1 |
|
|
|
let g:NERDTreeIgnore = ['^node_modules$'] |
|
let NERDTreeShowHidden=1 |
|
" prettier command for coc |
|
command! -nargs=0 Prettier :CocCommand prettier.formatFile |
|
|
|
" ctrlp |
|
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard'] |
|
|
|
" j/k will move virtual lines (lines that wrap) |
|
noremap <silent> <expr> j (v:count == 0 ? 'gj' : 'j') |
|
noremap <silent> <expr> k (v:count == 0 ? 'gk' : 'k') |
|
|
|
set relativenumber |
|
|
|
set smarttab |
|
set cindent |
|
set tabstop=2 |
|
set shiftwidth=2 |
|
" always uses spaces instead of tab characters |
|
set expandtab |
|
|
|
" coc config |
|
let g:coc_global_extensions = [ |
|
\ 'coc-snippets', |
|
\ 'coc-pairs', |
|
\ 'coc-graphql', |
|
\ 'coc-yaml', |
|
\ 'coc-html', |
|
\ 'coc-tsserver', |
|
\ 'coc-eslint', |
|
\ 'coc-prettier', |
|
\ 'coc-json', |
|
\ 'coc-markdownlint', |
|
\ 'coc-markdownlint', |
|
\ 'coc-spell-checker', |
|
\ 'coc-tailwindcss', |
|
\ 'coc-vetur', |
|
\ 'coc-emmet', |
|
\ ] |
|
" from readme |
|
" if hidden is not set, TextEdit might fail. |
|
set hidden |
|
" Some servers have issues with backup files, see #649 set nobackup set nowritebackup |
|
" Better display for messages set cmdheight=2 |
|
" You will have bad experience for diagnostic messages when it's default 4000. |
|
set updatetime=300 |
|
|
|
" don't give |ins-completion-menu| messages. |
|
set shortmess+=c |
|
|
|
" always show signcolumns |
|
set signcolumn=yes |
|
|
|
" Use tab for trigger completion with characters ahead and navigate. |
|
" Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin. |
|
inoremap <silent><expr> <TAB> |
|
\ pumvisible() ? "\<C-n>" : |
|
\ pumvisible() ? "\<C-n>" : |
|
\ 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() |
|
|
|
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position. |
|
" Coc only does snippet and additional edit on confirm. |
|
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" |
|
" Or use `complete_info` if your vim support it, like: |
|
" inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" |
|
|
|
" Use `[g` and `]g` to navigate diagnostics |
|
nmap <silent> [g <Plug>(coc-diagnostic-prev) |
|
nmap <silent> ]g <Plug>(coc-diagnostic-next) |
|
|
|
" Remap keys for gotos |
|
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 CocAction('doHover') |
|
endif |
|
endfunction |
|
|
|
" Highlight symbol under cursor on CursorHold |
|
autocmd CursorHold * silent call CocActionAsync('highlight') |
|
|
|
" Remap for rename current word |
|
nmap <F2> <Plug>(coc-rename) |
|
|
|
" Remap for format selected region |
|
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 |
|
|
|
" Remap for do codeAction of selected region, ex: `<leader>aap` for current paragraph |
|
xmap <leader>a <Plug>(coc-codeaction-selected) |
|
nmap <leader>a <Plug>(coc-codeaction-selected) |
|
|
|
" Remap for do codeAction of current line |
|
nmap <leader>ac <Plug>(coc-codeaction) |
|
" Fix autofix problem of current line |
|
nmap <leader>qf <Plug>(coc-fix-current) |
|
|
|
" Create mappings for function text object, requires document symbols feature of languageserver. |
|
xmap if <Plug>(coc-funcobj-i) |
|
xmap af <Plug>(coc-funcobj-a) |
|
omap if <Plug>(coc-funcobj-i) |
|
omap af <Plug>(coc-funcobj-a) |
|
|
|
" Use <C-d> for select selections ranges, needs server support, like: coc-tsserver, coc-python |
|
nmap <silent> <C-d> <Plug>(coc-range-select) |
|
xmap <silent> <C-d> <Plug>(coc-range-select) |
|
|
|
" Use `:Format` to format current buffer |
|
command! -nargs=0 Format :call CocAction('format') |
|
|
|
" Use `:Fold` to fold current buffer |
|
command! -nargs=? Fold :call CocAction('fold', <f-args>) |
|
|
|
" use `:OR` for organize import of current buffer |
|
command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') |
|
|
|
" Add status line support, for integration with other plugin, checkout `:h coc-status` |
|
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} |
|
|
|
" Using CocList |
|
" Show all diagnostics |
|
nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr> |
|
" Manage extensions |
|
nnoremap <silent> <space>e :<C-u>CocList extensions<cr> |
|
" Show commands |
|
nnoremap <silent> <space>c :<C-u>CocList commands<cr> |
|
" Find symbol of current document |
|
nnoremap <silent> <space>o :<C-u>CocList outline<cr> |
|
" Search workspace symbols |
|
nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> |
|
" Do default action for next item. |
|
nnoremap <silent> <space>j :<C-u>CocNext<CR> |
|
nnoremap <silent> <space>k :<C-u>CocPrev<CR> |
|
nnoremap <silent> <space>k :<C-u>CocPrev<CR> |
|
" Resume latest coc list |
|
nnoremap <silent> <space>p :<C-u>CocListResume<CR>l |