2021 / 02 / 26
by John Yuan

My VIMRC

我的 neovim 配置文件和使用的 Coc 插件列表。将以下内容保存在 ~/.config/nvim/init.vim 中,并使用 vim-plug 安装所需插件,待插件安装成功后,打开编辑器并使用 CocInstall 安装 Coc 插件即可。

VIMRC

set et
set ai
set ts=2
set sw=4
set sts=4
set guicursor=
set backspace=indent,eol,start
set termguicolors
set nu

set list
set listchars=tab:→\ ,space:·,trail:·
set showbreak=↪\ 
"set listchars=tab:→\ ,eol:↲,space:·,trail:·,nbsp:␣,extends:⟩,precedes:⟨

"set relativenumber
"set colorcolumn=80

" TextEdit might fail if hidden is not set.
set hidden

" Some servers have issues with backup files, see #649.
set nobackup
set nowritebackup

" Give more space for displaying messages.
set cmdheight=2

" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable
" delays and poor user experience.
set updatetime=300

" Don't pass messages to |ins-completion-menu|.
set shortmess+=c

let g:floaterm_position="top"
let g:floaterm_height=0.9
let g:floaterm_width=0.9
let g:floaterm_gitcommit='tabe'

call plug#begin('~/.local/share/plugged-nvim')

Plug 'vim-airline/vim-airline'
Plug 'maxmellon/vim-jsx-pretty'
Plug 'sheerun/vim-polyglot'
Plug 'preservim/nerdtree'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
Plug 'editorconfig/editorconfig-vim'
Plug 'tpope/vim-sleuth'
Plug 'neoclide/coc.nvim', { 'branch': 'release' }
Plug 'voldikss/vim-floaterm'
Plug 'morhetz/gruvbox'

call plug#end()

" 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

" Make <CR> auto-select the first completion item and notify coc.nvim to
" format on enter, <cr> could be remapped by other vim plugin
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

" 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>')
  elseif (coc#rpc#ready())
    call CocActionAsync('doHover')
  else
    execute '!' . &keywordprg . " " . expand('<cword>')
  endif
endfunction

" Enable <leader>aw to trigger word suggestions, need coc-spell-checker
vmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)

" Make <CR> auto-select the first completion item and notify coc.nvim to
" format on enter, <cr> could be remapped by other vim plugin
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

" Close internal terminal without showing exit code 
if has('nvim')
    au TermClose * call feedkeys("\<Esc>")
endif

nnoremap <silent> <C-s> :w<CR>
inoremap <silent> <C-s> <Esc>:w<CR>
nnoremap <silent> <C-n> :NERDTreeToggle<CR>
nnoremap <silent> <C-q> :NERDTreeFind<CR>
nnoremap <silent> <C-h> :tabp<CR>
nnoremap <silent> <C-j> :tabnew<CR>
nnoremap <silent> <C-k> :tabc<CR>
inoremap <silent> <C-l> <Esc>:tabn<CR>
nnoremap <silent> <C-l> :tabn<CR>
nnoremap <silent> <C-p> :Files<CR>
nnoremap <silent> <C-o> :FloatermNew ranger<CR>
nnoremap <silent> <C-y> :FloatermToggle<CR>
tnoremap <silent> <C-y> <C-\><C-n>:FloatermToggle<CR>
nnoremap <silent> <leader>n :set nu!<CR>
nnoremap <silent> <leader>rs :set colorcolumn=80<CR>
nnoremap <silent> <leader>rh :set colorcolumn=<CR>
nnoremap <silent> <leader>rl :set relativenumber!<CR>
nnoremap <silent> <leader>2 :set ts=2 sw=2 sts=2<CR>
nnoremap <silent> <leader>4 :set ts=4 sw=4 sts=4<CR>

colorscheme gruvbox

Coc 插件

coc-spell-checker
coc-emmet
coc-vetur
coc-tsserver
coc-json
coc-java
coc-html
coc-css

相关链接