" If downloading this as a .txt rename as init.vim and put in ~/.config/nvim " Specify a directory for plugins call plug#begin('~/.vim/plugged') Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'scrooloose/nerdtree' "Plug 'tsony-tsonev/nerdtree-git-plugin' 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 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'preservim/nerdcommenter' Plug 'sheerun/vim-polyglot' Plug 'turbio/bracey.vim', {'do': 'npm install --prefix server'} Plug 'luochen1990/rainbow' Plug 'yaegassy/coc-volar' Plug 'prettier/vim-prettier', { 'do': 'npm install', 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql', 'markdown', 'vue', 'svelte', 'yaml', 'html'] } "Plug 'christoomey/vim-tmux-navigator' Plug 'HerringtonDarkholme/yats.vim' " TS Syntax " Initialize plugin system call plug#end() inoremap jk nmap :NERDTreeToggle " open NERDTree automatically autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * NERDTree " Exit Vim if NERDTree is the only window remaining in the only tab. autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif " set bracey/liveserver to resresh on save let g:bracey_refresh_on_save = 1 "set colored brackets via rainbow" let g:rainbow_active = 1 "set to 0 if you want to enable it later via :RainbowToggle" let g:webdevicons_enable = 1 let g:webdevicons_enable_nerdtree = 1 let g:NERDTreeGitStatusWithFlags = 1 "let g:WebDevIconsUnicodeDecorateFolderNodes = 1 "let g:NERDTreeGitStatusNodeColorization = 1 "let g:NERDTreeColorMapCustom = { "\ "Staged" : "#0ee375", "\ "Modified" : "#d9bf91", "\ "Renamed" : "#51C9FC", "\ "Untracked" : "#FCE77C", "\ "Unmerged" : "#FC51E6", "\ "Dirty" : "#FFBD61", "\ "Clean" : "#87939A", "\ "Ignored" : "#808080" "\ } "let g:NERDTreeIgnore = ['^node_modules$'] " vim-prettier "let g:prettier#quickfix_enabled = 0 "let g:prettier#quickfix_auto_focus = 0 " prettier command for coc command! -nargs=0 Prettier :CocCommand prettier.formatFile " run prettier on save let g:prettier#autoformat = 0 autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql,*.md,*.vue,*.yaml,*.html PrettierAsync autocmd BufEnter *.{js,jsx,ts,tsx,vue} :syntax sync fromstart autocmd BufLeave *.{js,jsx,ts,tsx,vue} :syntax sync clear " 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 j (v:count == 0 ? 'gj' : 'j') noremap k (v:count == 0 ? 'gk' : 'k') "set relativenumber set number set cursorline set ttyfast set mouse=a set autoindent set smarttab set cindent set tabstop=2 set shiftwidth=2 " always uses spaces instead of tab characters set expandtab if(has("termguicolors")) set termguicolors endif syntax enable "colorscheme gruvbox "colorscheme menguless colorscheme nord "colorscheme molokai "Enable transparency hi Normal guibg=NONE ctermbg=NONE " sync open file with NERDTree " " Check if NERDTree is open or active function! IsNERDTreeOpen() return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1) endfunction " Call NERDTreeFind iff NERDTree is active, current window contains a modifiable " file, and we're not in vimdiff function! SyncTree() if &modifiable && IsNERDTreeOpen() && strlen(expand('%')) > 0 && !&diff NERDTreeFind wincmd p endif endfunction " Highlight currently open buffer in NERDTree autocmd BufEnter * call SyncTree() " coc config let g:coc_global_extensions = [ \ 'coc-snippets', \ 'coc-pairs', \ 'coc-tsserver', \ 'coc-eslint', \ 'coc-prettier', \ 'coc-json', \ ] " 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 ' to make sure tab is not mapped by other plugin. inoremap \ pumvisible() ? "\" : \ check_back_space() ? "\" : \ coc#refresh() inoremap pumvisible() ? "\" : "\" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use to trigger completion. inoremap coc#refresh() " Use to confirm completion, `u` means break undo chain at current position. " Coc only does snippet and additional edit on confirm. inoremap pumvisible() ? "\" : "\u\" " Or use `complete_info` if your vim support it, like: " inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" " Use `[g` and `]g` to navigate diagnostics nmap [g (coc-diagnostic-prev) nmap ]g (coc-diagnostic-next) " Remap keys for gotos nmap gd (coc-definition) nmap gy (coc-type-definition) nmap gi (coc-implementation) nmap gr (coc-references) " Use K to show documentation in preview window nnoremap K :call show_documentation() function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('') else call CocAction('doHover') endif endfunction " Highlight symbol under cursor on CursorHold autocmd CursorHold * silent call CocActionAsync('highlight') " Remap for rename current word nmap (coc-rename) " Remap for format selected region xmap f (coc-format-selected) nmap f (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: `aap` for current paragraph xmap a (coc-codeaction-selected) nmap a (coc-codeaction-selected) " Remap for do codeAction of current line nmap ac (coc-codeaction) " Fix autofix problem of current line nmap qf (coc-fix-current) " Create mappings for function text object, requires document symbols feature of languageserver. xmap if (coc-funcobj-i) xmap af (coc-funcobj-a) omap if (coc-funcobj-i) omap af (coc-funcobj-a) " Use for select selections ranges, needs server support, like: coc-tsserver, coc-python nmap (coc-range-select) xmap (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', ) " 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','')} " Shortcut mappings for FZF nnoremap f :FZF nnoremap F :FZF " Using CocList " Show all diagnostics nnoremap a :CocList diagnostics " Manage extensions nnoremap e :CocList extensions " Show commands nnoremap c :CocList commands " Find symbol of current document nnoremap o :CocList outline " Search workspace symbols nnoremap s :CocList -I symbols " Do default action for next item. nnoremap j :CocNext " Do default action for previous item. nnoremap k :CocPrev " Resume latest coc list nnoremap p :CocListResume