From 14795eb6dcff47afaa7c2ef6c80b50d3a106b271 Mon Sep 17 00:00:00 2001 From: Mark Riedesel Date: Sat, 9 May 2020 11:12:23 -0500 Subject: [PATCH] add vim8 config --- vim/autoload/.gitignore | 1 + vim/bundle/.gitignore | 1 + vim/vimrc | 290 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 292 insertions(+) create mode 100644 vim/autoload/.gitignore create mode 100644 vim/bundle/.gitignore create mode 100644 vim/vimrc diff --git a/vim/autoload/.gitignore b/vim/autoload/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/vim/autoload/.gitignore @@ -0,0 +1 @@ +* diff --git a/vim/bundle/.gitignore b/vim/bundle/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/vim/bundle/.gitignore @@ -0,0 +1 @@ +* diff --git a/vim/vimrc b/vim/vimrc new file mode 100644 index 0000000..63d0f32 --- /dev/null +++ b/vim/vimrc @@ -0,0 +1,290 @@ +set title +set history=700 +set background=dark + +filetype plugin on +filetype indent on + +syntax enable + +let mapleader = " " +let maplocalleader = " " + +set autoread " automatically re-read modified files +set wildmenu " handy auto-complete menu + +" Ignore compiled files +set wildignore=*.o,*~,*.pyc + +set ruler " always show current position +set cmdheight=2 " height of the command bar + +set hid " buffer becomes hidden when it abandoned + +set backspace=eol,start,indent " make backspace not be stupid +set whichwrap+=<,>,h,l + +set list +set listchars=trail:·,precedes:«,extends:»,eol:↲,tab:⦙\ +set ignorecase " ignore case when searching +set smartcase " be "smart" about case when searching +set hlsearch " highlight search results +set incsearch " enable incremental search +set lazyredraw " don't redraw while executing macros + +set magic " enable magic for regexps +set showmatch " show matching bracket pairs +set matchtime=1 +set number relativenumber " show relative line numbers by default + +set noswapfile +set modeline +set spell " spell checking, woo + +set foldcolumn=1 +set ruler " always show current position + +set tabstop=4 " who the heck uses 8-space tabs? +set shiftwidth=4 +set smarttab + +" auto-install vim-plug +if empty(glob('~/.vim/autoload/plug.vim')) + silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs + \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim + autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +endif + +" begin vim-plug items +call plug#begin('~/.vim/bundle') + +" color schemes +Plug 'dylanaraps/wal.vim' + +" syntax +Plug 'cakebaker/scss-syntax.vim' +Plug 'calviken/vim-gdscript3' +"Plug 'ianks/vim-tsx' +Plug 'leafgarland/typescript-vim' +Plug 'lepture/vim-jinja' +Plug 'posva/vim-vue' +Plug 'nikvdp/ejs-syntax' +Plug 'chrisbra/Colorizer' +Plug 'noahfrederick/vim-noctu' + +" functionality +Plug 'tpope/vim-sensible' +Plug 'tpope/vim-abolish' +Plug 'tpope/vim-surround' +Plug 'tpope/vim-dispatch' +Plug 'tpope/vim-vinegar' +Plug 'tpope/vim-sleuth' +Plug 'tpope/vim-commentary', "{{{ +nmap c Commentary +xmap c Commentary +omap c Commentary +nmap cc CommentaryLine +"}}} +Plug 'tpope/vim-fugitive', "{{{ +map \b :Gblame +map \l :Glog +map \gs :Gstatus +"}}} +Plug 'airblade/vim-gitgutter' +Plug 'easymotion/vim-easymotion', "{{{ + map (easymotion-prefix) +"}}} +Plug 'sheerun/vim-polyglot' +Plug 'neoclide/coc.nvim', {'branch': 'release'}, "{{{ +let g:coc_global_extensions = [ + \ 'coc-css', + \ 'coc-emoji', + \ 'coc-eslint', + \ 'coc-json', + \ 'coc-prettier', + \ 'coc-rls', + \ 'coc-tslint', + \ 'coc-tslint-plugin', + \ 'coc-tsserver', + \ 'coc-yaml', + \ ] +set signcolumn=yes +set updatetime=300 +set shortmess+=c +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 + +" Remap keys for gotos +nmap gd (coc-definition) +nmap gy (coc-type-definition) +nmap gi (coc-implementation) +nmap gr (coc-references) + +nmap f (coc-fix-current) + +" Use to trigger completion. +inoremap coc#refresh() + +" Highlight symbol under cursor on CursorHold +autocmd CursorHold * silent call CocActionAsync('highlight') + +" 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 + +" Use to confirm completion, `u` means break undo chain at current position. +" Coc only does snippet and additional edit on confirm. +inoremap pumvisible() ? "\" : "\u\" + +" Customize coc appearance +hi CocHighlightText cterm=italic +"}}} +Plug 'vim-airline/vim-airline-themes' +Plug 'vim-airline/vim-airline', "{{{ + let g:airline_symbols = {} + let g:airline_symbols.branch = '⭠' + let g:airline_symbols.readonly = '⭤' + let g:airline_symbols.linenr = '⭡' + let g:airline#extensions#tabline#enabled = 1 + let g:airline_theme = 'wal' +"}}} +Plug 'junegunn/fzf', {'dir': '~/.fzf', 'do': './install --all'} +Plug 'junegunn/fzf.vim', "{{{ +function! s:buflist() + redir => ls + silent ls + redir END + return split(ls,'\n') +endfunction + +function! s:bufopen(e) + execute 'buffer' matchstr(a:e, '^[ 0-9]*') +endfunction + +nnoremap :call fzf#run({ + \ 'source': reverse(buflist()), + \ 'sink': function('bufopen'), + \ 'options': '+m', + \ 'down': len(buflist()) + 2 + \}) + + +function! s:FuzzyFiles() + let gitparent=system('git rev-parse --show-toplevel')[:-2] + let rootdir='.' + + if empty(matchstr(gitparent, '^fatal:.*')) + silent call fzf#run({ + \ 'dir': gitparent, + \ 'source': '(git ls-tree -r --name-only HEAD | rg --files)', + \ 'sink': 'e', + \}) + else + silent call fzf#run({ + \ 'dir': '.', + \ 'source': 'rg --files', + \ 'sink': 'e', + \}) + endif +endfunction + +command! -bang -nargs=* Rg + \ call fzf#vim#grep( + \ 'rg --column --line-number --no-heading --color=always '.shellescape(), 1, + \ 0 ? fzf#vim#with_preview('up:60%') + \ : fzf#vim#with_preview('right:50%:hidden', '?'), + \ 0) + +nnoremap ; :call FuzzyFiles() +nnoremap / :Rg + +"}}} +call plug#end() + +"--- Visuals +highlight ExtraWhitespace ctermbg=20 +match ExtraWhitespace /\s\+$/ +autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ +autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@ :bnext " next buffer +map :bprev " prev buffer + +nmap j " focus window down +nmap k " focus window up +nmap h " focus window left +nmap l " focus window right + +vnoremap :sort " visual select and sort +noremap mzgg=G`z " auto-format entire document + +nnoremap pu :PlugUpdate " update plugins managed by vim-plugged +nnoremap pi :PlugInstall " install new plugins +nnoremap pc :PlugClean " clean removed plugins + +nnoremap zn ]s " next misspelling +nnoremap zp [s " prev misspelling +nnoremap zf 1z= " replace misspelling with first suggestion + +nnoremap ve :e $MYVIMRC " quick open (literally) this file + +nmap w :w! " fast save + +" clear trailing white space +nnoremap :let _s=@/ :%s/\s\+$//e :let @/=_s :nohl :unlet _s + +" prefer ripgrep if available +if executable('rg') + set grepprg="rg --vimgrep" +endif + +" save with sudo +command! W execute 'w !sudo tee %> /dev/null' edit! + +" read .vimlocal if available +if filereadable(expand('~/.vimlocal')) + source ~/.vimlocal +endif + +" netrw +nnoremap \e :Lexplore! +let g:netrw_banner = 0 +let g:netrw_liststyle = 3 +let g:netrw_altv = 1 +let g:netrw_winsize = 25 +let g:netrw_browse_split = 4 +augroup netrw_mapping + autocmd! + autocmd filetype netrw call NetrwMapping() +augroup END +function! NetrwMapping() + noremap \e :bd +endfunction