call plug#begin('~/.vim/plugged') Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'kyazdani42/nvim-web-devicons' " for file icons Plug 'kyazdani42/nvim-tree.lua' Plug 'psliwka/vim-smoothie' 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 'jremmen/vim-ripgrep' "Plug 'HerringtonDarkholme/yats.vim' " TS Syntax " Initialize plugin system call plug#end() "nvim tree default setup lua require'nvim-tree'.setup {} let g:nvim_tree_git_hl = 1 "0 by default, will enable file highlight for git attributes (can be used without the icons). let g:nvim_tree_highlight_opened_files = 1 "0 by default, will enable folder and file icon highlight for opened files/directories. let g:nvim_tree_root_folder_modifier = ':~' "This is the default. See :help filename-modifiers for more options let g:nvim_tree_add_trailing = 1 "0 by default, append a trailing slash to folder names let g:nvim_tree_group_empty = 1 " 0 by default, compact folders that only contain a single folder into one node in the file tree let g:nvim_tree_icon_padding = ' ' "one space by default, used for rendering the space between the icon and the filename. Use with caution, it could break rendering if you set an empty string depending on your font. let g:nvim_tree_symlink_arrow = ' >> ' " defaults to ' ➛ '. used as a separator between symlinks' source and target. let g:nvim_tree_respect_buf_cwd = 1 "0 by default, will change cwd of nvim-tree to that of new buffer's when opening nvim-tree. let g:nvim_tree_create_in_closed_folder = 1 "0 by default, When creating files, sets the path of a file when cursor is on a closed folder to the parent folder when 0, and inside the folder when 1. let g:nvim_tree_special_files = { 'README.md': 1, 'Makefile': 1, 'MAKEFILE': 1 } " List of filenames that gets highlighted with NvimTreeSpecialFile let g:nvim_tree_show_icons = { \ 'git': 1, \ 'folders': 0, \ 'files': 0, \ 'folder_arrows': 0, \ } "If 0, do not show the icons for one of 'git' 'folder' and 'files' "1 by default, notice that if 'files' is 1, it will only display "if nvim-web-devicons is installed and on your runtimepath. "if folder is 1, you can also tell folder_arrows 1 to show small arrows next to the folder icons. "but this will not work when you set renderer.indent_markers.enable (because of UI conflict) " default will show icon by default if no icon is provided " default shows no icon by default let g:nvim_tree_icons = { \ 'default': "", \ 'symlink': "", \ 'git': { \ 'unstaged': "✗", \ 'staged': "✓", \ 'unmerged': "", \ 'renamed': "➜", \ 'untracked': "★", \ 'deleted': "", \ 'ignored': "◌" \ }, \ 'folder': { \ 'arrow_open': "", \ 'arrow_closed': "", \ 'default': "", \ 'open': "", \ 'empty': "", \ 'empty_open': "", \ 'symlink': "", \ 'symlink_open': "", \ } \ } nnoremap :NvimTreeToggle nnoremap r :NvimTreeRefresh nnoremap n :NvimTreeFindFile " More available functions: " NvimTreeOpen " NvimTreeClose " NvimTreeFocus " NvimTreeFindFileToggle nnoremap :NvimTreeResize " NvimTreeCollapse " NvimTreeCollapseKeepBuffers set termguicolors " this variable must be enabled for colors to be applied properly set nosplitright " " Automatically closes Nvim tree if last window open autocmd BufEnter * ++nested if winnr('$') == 1 && bufname() == 'NvimTree_' . tabpagenr() | quit | endif " Automatically opens Nvim tree when first opening nvim " a list of groups can be found at `:help nvim_tree_highlight` highlight NvimTreeFolderIcon guibg=blue " Use experimental features of vim-smoothie (gg and G) let g:smoothie_experimental_mappings = 1 " Tab Shortcuts nnoremap :tabnew nnoremap :tabprevious nnoremap :tabnext "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 " Marks end of line, space, and trailing space characters set listchars=eol:↵,trail:·,space:· set list "enable AutoSave on start let g:auto_save = 1 "silence AutoSave messages let g:auto_save_silent = 1 " 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 nnoremap M MarkdownPreviewToggle "Escape Insert Mode with ii imap ii " Vertically center document when entering Insert mode autocmd InsertEnter * norm zz " Alias replace all to shift + 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 " 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 " Removes trailing spaces function TrimWhiteSpace() %s/\s*$// '' endfunction "Removes trailing spaces on save autocmd FileWritePre * call TrimWhiteSpace() autocmd FileAppendPre * call TrimWhiteSpace() autocmd FilterWritePre * call TrimWhiteSpace() autocmd BufWritePre * call TrimWhiteSpace() " 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