Skip to content

Instantly share code, notes, and snippets.

@pojntfx
Last active November 10, 2019 10:18
Show Gist options
  • Save pojntfx/6f0fa61301399b387294894bdb1f9922 to your computer and use it in GitHub Desktop.
Save pojntfx/6f0fa61301399b387294894bdb1f9922 to your computer and use it in GitHub Desktop.
Neovim Configuration
" Install plugins
if has("nvim")
call plug#begin('~/.config/nvim/autoload/plug.vim')
else
call plug#begin()
endif
Plug 'https://github.com/cohama/lexima.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'ctrlpvim/ctrlp.vim'
Plug 'severin-lemaignan/vim-minimap'
Plug 'tacahiroy/ctrlp-funky'
Plug 'fisadev/vim-ctrlp-cmdpalette'
Plug 'scrooloose/nerdtree'
Plug 'Lenovsky/nuake'
Plug 'vim-airline/vim-airline'
Plug 'wincent/terminus'
Plug 'fatih/vim-go'
Plug 'junegunn/goyo.vim'
Plug 'jreybert/vimagit'
Plug 'tpope/vim-fugitive'
Plug 'prettier/vim-prettier', {
\ 'do': 'yarn install',
\ 'branch': 'release/1.x',
\ 'for': [
\ 'javascript',
\ 'typescript',
\ 'css',
\ 'less',
\ 'scss',
\ 'json',
\ 'graphql',
\ 'markdown',
\ 'vue',
\ 'lua',
\ 'php',
\ 'python',
\ 'ruby',
\ 'html',
\ 'swift' ] }
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
call plug#end()
" Use the system clipboard register
" set clipboard=unnamedplus
" Enable escaping from terminal possible
:tnoremap <Esc> <C-\><C-n>
" Enable mouse support
:set mouse=a
" Enable easy modification of the buffers
set hidden
nnoremap <C-b> :bn<Cr>
nnoremap <C-w> :bd<Cr>
" Toggle Markdown README preview
nnoremap <C-m> :call jobstart('grip . --browser &>/dev/null')<Cr>
" Enable switching the splits easily
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
" Enable project drawer
nnoremap <C-\> :NERDTreeToggle<Cr>
let NERDTreeMinimalUI=1
" Enable focusing the current file in NERDTree
noremap @ :NERDTreeFind<Cr>
" Enable zen mode
noremap <C-U> :Goyo<Cr>
" Enable toggleing the terminal
nnoremap ` :Nuake<CR>
inoremap ` <C-\><C-n>:Nuake<CR>
tnoremap ` <C-\><C-n>:Nuake<CR>
" Enable toggleing Magit
noremap <C-G> :Magit<Cr>
" Enable formatting
noremap <C-S-I> :PrettierAsync<Cr>
autocmd FileType go noremap <C-S-I> :GoFmt<Cr>
let g:prettier#autoformat = 0
autocmd BufWritePre *.js,*.jsx,*.ts,*.tsx,*.rb,*.json,*.yaml,*.yml,*.md,*.html,*.css,*.scss PrettierAsync
autocmd BufWritePre *.go,*.mod GoFmt
" Enable minimap
" :Minimap
" Add key bindings for function finder
nnoremap <C-o> :CtrlPFunky<Cr>
" Add key bindings for command finder
nnoremap <C-]> :CtrlPCmdPalette<Cr>
" Underline the currently edited line
:autocmd InsertEnter,InsertLeave * set cul!
" Add top buffer bar Airline
let g:airline#extensions#tabline#enabled = 1
" Add the buffer number to the buffer bar
let g:airline#extensions#tabline#buffer_nr_show = 1
" Configure Coc
" Show CoC diagnostic
nnoremap # :CocList diagnostics<Cr>
" 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
" 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>" :
\ <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()
" 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 <leader>rn <Plug>(coc-rename)
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 `: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')
" 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>
" Do default action for previous item.
nnoremap <silent> <space>k :<C-u>CocPrev<CR>
" Resume latest coc list
nnoremap <silent> <space>p :<C-u>CocListResume<CR>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment