dotfiles/old/vim/vimrc

313 lines
8.9 KiB
VimL

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 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
set shiftwidth=2
" 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 | quit
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 '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 <leader>c <Plug>Commentary
xmap <leader>c <Plug>Commentary
omap <leader>c <Plug>Commentary
nmap <leader>cc <Plug>CommentaryLine
autocmd FileType vue setlocal commentstring=//\ %s
"}}}
Plug 'tpope/vim-fugitive', "{{{
map \b :Gblame<CR>
map \l :Glog<CR>
map \gs :Gstatus<CR>
"}}}
Plug 'justinmk/vim-dirvish', "{{{
nmap \e <Plug>(dirvish_up)
augroup dirvish_mapping
autocmd!
autocmd! FileType dirvish call DirvishMapping()
augroup END
function! DirvishMapping()
nmap <buffer> \e gq>
endfunction
"}}}
Plug 'kristijanhusak/vim-dirvish-git'
Plug 'mattn/webapi-vim'
Plug 'mattn/vim-gist'
Plug 'airblade/vim-gitgutter'
Plug 'easymotion/vim-easymotion', "{{{
map <leader><leader> <plug>(easymotion-prefix)
"}}}
Plug 'habamax/vim-godot'
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',
" \ ]
Plug 'pappasam/coc-jedi', {'do': 'yarn install --frozen-lockfile'}
set signcolumn=yes
set updatetime=750
set shortmess+=c
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
" 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)
nmap <silent> ]p :<C-u>CocPrev<CR>
nmap <silent> [p :<C-u>CocNext<CR>
nmap <leader>f <Plug>(coc-fix-current)
" Use <c-space> to trigger completion.
inoremap <silent><expr> <c-space> coc#refresh()
" Highlight symbol under cursor on CursorHold
autocmd CursorHold * silent call CocActionAsync('highlight')
" 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
" 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>"
" 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 <silent> <Leader><Enter> :call fzf#run({
\ 'source': reverse(<sid>buflist()),
\ 'sink': function('<sid>bufopen'),
\ 'options': '+m',
\ 'down': len(<sid>buflist()) + 2
\})<CR>
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(<q-args>), 1,
\ <bang>0 ? fzf#vim#with_preview('up:60%')
\ : fzf#vim#with_preview('right:50%:hidden', '?'),
\ <bang>0)
nnoremap <silent> ; :call <sid>FuzzyFiles()<CR>
nnoremap <leader>/ :Rg<CR>
"}}}
call plug#end()
"--- Visuals
highlight ExtraWhitespace ctermbg=20 ctermfg=1
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
try
colorscheme wal
catch
endtry
" Display mispellings as italicised
hi clear SpellBad
hi SpellBad gui=underline cterm=italic
hi Pmenu ctermbg=16
" List items are always weird distracting colors
hi SpecialKey ctermfg=238
"--- Mappings
map <C-n> :bnext<cr> " next buffer
map <C-p> :bprev<cr> " prev buffer
nmap <C-j> <C-W>j " focus window down
nmap <C-k> <C-W>k " focus window up
nmap <C-h> <C-W>h " focus window left
nmap <C-l> <C-W>l " focus window right
vnoremap <C-o> :sort<cr> " visual select and sort
noremap <F7> mzgg=G`z<cr> " auto-format entire document
nnoremap <leader>pu :PlugUpdate<cr> " update plugins managed by vim-plugged
nnoremap <leader>pi :PlugInstall<cr> " install new plugins
nnoremap <leader>pc :PlugClean<cr> " clean removed plugins
nnoremap zn ]s " next misspelling
nnoremap zp [s " prev misspelling
nnoremap zf <Esc>1z= " replace misspelling with first suggestion
nnoremap <leader>n :set number!<cr> " toggle numbering
nnoremap <leader>ve :e $MYVIMRC<cr> " quick open (literally) this file
nmap <leader>w :w!<cr> " fast save
" clear trailing white space
nnoremap <silent> <F5> :let _s=@/ <Bar> :%s/\s\+$//e <Bar> :let @/=_s <Bar> :nohl <Bar> :unlet _s <CR>
" prefer ripgrep if available
if executable('rg')
set grepprg="rg --vimgrep"
endif
" save with sudo
command! W execute 'w !sudo tee %> /dev/null' <bar> edit!
" read .vimlocal if available
if filereadable(expand('~/.vimlocal'))
source ~/.vimlocal
endif
" netrw
" nnoremap <buffer> \e <Plug>VinegarUp
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()
autocmd FileType netrw setl bufhidden=wipe
augroup END
function! NetrwMapping()
noremap <buffer> \e :bd<CR>
endfunction