374 lines
12 KiB
VimL
374 lines
12 KiB
VimL
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 <C-b> :NvimTreeToggle<CR>
|
|
nnoremap <leader>r :NvimTreeRefresh<CR>
|
|
nnoremap <leader>n :NvimTreeFindFile<CR>
|
|
" More available functions:
|
|
" NvimTreeOpen
|
|
" NvimTreeClose
|
|
" NvimTreeFocus
|
|
" NvimTreeFindFileToggle
|
|
nnoremap <C-e> :NvimTreeResize<CR>
|
|
" 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 <C-t> :tabnew<CR>
|
|
nnoremap <A-Left> :tabprevious<CR>
|
|
nnoremap <A-Right> :tabnext<CR>
|
|
|
|
"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 <C-c> <Plug>NERDCommenterToggle
|
|
|
|
" Add spaces after NerdCommenter delimiters by default
|
|
let g:NERDSpaceDelims = 1
|
|
|
|
" <Ctrl-x> redraws the screen and removes any search highlighting
|
|
nnoremap <silent> <C-x> :nohl<CR><C-x>
|
|
|
|
"Toggle Multi-Cursor with j or k
|
|
nmap <C-j> <C-Down>
|
|
nmap <C-k> <C-Up>
|
|
|
|
" Use ctrl- [hjkl] to select the active split!
|
|
"nmap <silent> <c-k> :wincmd k<CR>
|
|
"nmap <silent> <c-j> :wincmd j<CR>
|
|
nmap <silent> <c-h> :wincmd h<CR>
|
|
nmap <silent> <c-l> :wincmd l<CR>
|
|
|
|
" 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 <Plug>MarkdownPreviewToggle
|
|
|
|
"Escape Insert Mode with ii
|
|
imap ii <Esc>
|
|
|
|
" Vertically center document when entering Insert mode
|
|
autocmd InsertEnter * norm zz
|
|
|
|
" Alias replace all to shift + S
|
|
nnoremap S :%s///gI<Left><Left><Left><Left>
|
|
|
|
" Fix Splitting
|
|
set splitbelow
|
|
set splitright
|
|
|
|
"Insert a console.log()
|
|
inoremap cll console.log()<esc>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 <silent> <expr> j (v:count == 0 ? 'gj' : 'j')
|
|
noremap <silent> <expr> 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 <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
|
|
|
|
" 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 <F2> <Plug>(coc-rename)
|
|
|
|
" Remap for format selected region
|
|
xmap <leader>f <Plug>(coc-format-selected)
|
|
nmap <leader>f <Plug>(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: `<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)
|
|
"xmap <silent> <S-TAB> <Plug>(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', <f-args>)
|
|
|
|
" 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 <silent> <leader>f :FZF<cr>
|
|
nnoremap <silent> <leader>F :FZF<cr>
|
|
|
|
" 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>
|