" Specify a directory for plugins default is ~/.config/nvim/init.vim 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 'mattn/emmet-vim' Plug 'ap/vim-css-color' Plug 'airblade/vim-gitgutter' Plug 'ctrlpvim/ctrlp.vim' " fuzzy find files Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'preservim/nerdcommenter' Plug 'Yggdroot/indentLine' Plug 'sheerun/vim-polyglot' Plug 'mg979/vim-visual-multi', {'branch': 'master'} Plug 'iamcco/markdown-preview.nvim', {'do': { -> mkdp#util#install() }} Plug 'luochen1990/rainbow' Plug 'simeji/winresizer' Plug 'yaegassy/coc-volar' Plug '907th/vim-auto-save' Plug 'itchyny/lightline.vim' "Plug 'HerringtonDarkholme/yats.vim' " TS Syntax " Initialize plugin system call plug#end() "Toggle NerdTree with Ctrl + l nmap :NERDTreeToggle " Start NERDTree. If a file is specified, move the cursor to its window. autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * NERDTree | if argc() > 0 || exists("s:std_in") | wincmd p | endif "NerdTree opens on right let g:NERDTreeWinPos = "right" "Adjust NerdTree size let g:NERDTreeWinSize=28 "Show hidden files in NERDTree let NERDTreeShowHidden=1 " 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 colored brackets via rainbow" let g:rainbow_active = 1 "set to 0 if you want to enable it later via :RainbowToggle" "set indentLine to nvim colorscheme "let g:indentLine_setColors = 0 "enable AutoSave on start let g:auto_save = 1 "silence AutoSave messages let g:auto_save_silent = 1 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$'] " do not close the markdown preview tab when switching to other buffers let g:mkdp_auto_close = 0 " Create Default Mappings for NerdCommenter let g:NERDCreateDefaultMappings = 1 " Toggle NERDCommenter with Ctrl + c :map NERDCommenterToggle " Add spaces after NerdCommenter delimiters by default let g:NERDSpaceDelims = 1 " redraws the screen and removes any search highlighting nnoremap :nohl "Toggle Multi-Cursor with j or k nmap nmap " Use ctrl- [hjkl] to select the active split! "nmap :wincmd k "nmap :wincmd j nmap :wincmd h nmap :wincmd l " Only lightline shows on bottom status board set noshowmode " Set lightline colorscheme let g:lightline = {'colorscheme': 'one', 'active': { 'left': [['mode', 'paste'], ['gitbranch', 'readonly', 'filename', 'modified']]}, 'component_function': {'gitbranch': 'FugitiveHead'}} " Custom keybindings " keybind map Ctrl + m to :MarkdownPreview nmap MarkdownPreviewToggle "Escape Insert Mode with ii imap ii " Vertically center document when entering Insert mode autocmd InsertEnter * norm zz " Alias replace all to S nnoremap S :%s///gI " Fix Splitting set splitbelow set splitright "Insert a console.log() inoremap cll console.log()i 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') "remap leader key to comma let mapleader="," "set relativenumber set number set cursorcolumn set cursorline set ttyfast set mouse=a set autoindent set smarttab set ignorecase set cindent set tabstop=8 set softtabstop=0 set shiftwidth=4 " 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 "Enable Comments with Italics (below selected colorscheme) highlight Comment cterm=italic gui=italic " 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 " Set the height of the status line down at the bottom set cmdheight=1 " Set the amount of characters you get back from status/error messages 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) "xmap (coc-range-select-backword) " 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