set nocompatible
filetype off
" easier to reach than \
let mapleader=" "
" 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
call plug#begin('~/.vim/plugged')
" git wrapper
Plug 'tpope/vim-fugitive'
" ack wrapper. :Ack
Plug 'mileszs/ack.vim'
Plug 'mutewinter/nginx.vim'
Plug 'scrooloose/nerdcommenter'
Plug 'mustache/vim-mustache-handlebars'
" better than ctrl-p
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
" Use a leader instead of the actual named binding
nmap <leader>p :Files<cr>
" Easy bindings for its various modes
nmap <leader>bb :Buffers<cr>
" rename a buffer. :rename[!] {newname}
Plug 'danro/rename.vim'
" ugh this thing
"Plug 'Valloric/YouCompleteMe'
"let g:ycm_rust_src_path = '~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src'
"nnoremap <leader>jd :YcmCompleter GoTo<CR>
Plug 'neoclide/coc.nvim'
set shortmess+=c
set signcolumn=number
" Use tab for trigger completion with characters ahead and navigate.
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
" other plugin before putting this into your config.
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-@> coc#refresh()
" Make <CR> auto-select the first completion item and notify coc.nvim to
" format on enter, <cr> could be remapped by other vim plugin
inoremap <silent><expr> <cr> pumvisible() ? coc#_select_confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
" Use `[g` and `]g` to navigate diagnostics
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigation.
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>')
elseif (coc#rpc#ready())
call CocActionAsync('doHover')
else
execute '!' . &keywordprg . " " . expand('<cword>')
endif
endfunction
" Highlight the symbol and its references when holding the cursor.
autocmd CursorHold * silent call CocActionAsync('highlight')
" Symbol renaming.
nmap <leader>rn <Plug>(coc-rename)
" Formatting selected code.
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
" Applying codeAction to the selected region.
" Example: `<leader>aap` for current paragraph
xmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)
" Remap keys for applying codeAction to the current buffer.
nmap <leader>ac <Plug>(coc-codeaction)
" Apply AutoFix to problem on the current line.
nmap <leader>qf <Plug>(coc-fix-current)
" Map function and class text objects
" NOTE: Requires 'textDocument.documentSymbol' support from the language server.
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)
" Remap <C-f> and <C-b> for scroll float windows/popups.
" Note coc#float#scroll works on neovim >= 0.4.0 or vim >= 8.2.0750
nnoremap <nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
" NeoVim-only mapping for visual mode scroll
" Useful on signatureHelp after jump placeholder of snippet expansion
if has('nvim')
vnoremap <nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#nvim_scroll(1, 1) : "\<C-f>"
vnoremap <nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#nvim_scroll(0, 1) : "\<C-b>"
endif
" Use CTRL-S for selections ranges.
" Requires 'textDocument/selectionRange' support of language server.
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)
" Add `:Format` command to format current buffer.
command! -nargs=0 Format :call CocAction('format')
" Add `:Fold` command to fold current buffer.
command! -nargs=? Fold :call CocAction('fold', <f-args>)
" Add `:OR` command for organize imports of the current buffer.
command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport')
" Add (Neo)Vim's native statusline support.
" NOTE: Please see `:h coc-status` for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline.
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
" Mappings for CoCList
" Show all diagnostics.
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
" Manage extensions.
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
" Show commands.
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
" Find symbol of current document.
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
" Search workspace symbols.
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
" Do default action for next item.
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
" Do default action for previous item.
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
" Resume latest coc list.
"nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
Plug 'chaquotay/ftl-vim-syntax'
Plug 'itchyny/lightline.vim'
let g:lightline = {
\ 'colorscheme': 'PaperColor',
\ }
Plug 'scrooloose/nerdtree'
nnoremap <silent><Leader>. :NERDTreeToggle<CR>
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
Plug 'vim-scripts/forth.vim'
Plug 'rust-lang/rust.vim'
let g:rustfmt_autosave = 1
Plug 'cespare/vim-toml'
Plug 'airblade/vim-gitgutter'
nnoremap <silent><Leader>gn :GitGutterNextHunk<CR>
nnoremap <silent><Leader>gp :GitGutterPrevHunk<CR>
Plug 'fatih/vim-go'
nnoremap <silent><Leader>f :GoFmt<CR>
nnoremap <silent><Leader>t :GoTestFunc<CR>
nnoremap <silent><Leader>at :GoTest<CR>
nnoremap <silent><Leader>s :GoAlternate<CR>
nnoremap <silent><Leader>d :GoDecls<CR>
nnoremap <silent><Leader>ad :GoDeclsDir<CR>
nnoremap <silent><Leader>ld :GoDefStack<CR>
nnoremap <silent><Leader>bd :GoDefPop<CR>
nnoremap <silent><Leader>i :GoInfo<CR>
nnoremap <silent><Leader>rr :GoReferrers<CR>
nnoremap <silent><Leader>u :GoCallees<CR>
Plug 'majutsushi/tagbar'
nnoremap <silent><Leader>tb :TagbarToggle<CR>
Plug 'tpope/vim-rails'
"Plug 'NLKNguyen/papercolor-theme'
Plug 'morhetz/gruvbox'
" gitk in vim basically
Plug 'cohama/agit.vim'
Plug 'jeetsukumaran/vim-buffergator'
" Use the right side of the screen
let g:buffergator_viewport_split_policy = 'R'
" I want my own keymappings...
let g:buffergator_suppress_keymaps = 1
" Looper buffers
"let g:buffergator_mru_cycle_loop = 1
" Go to the previous buffer open
nmap <leader>jj :BuffergatorMruCyclePrev<cr>
" Go to the next buffer open
nmap <leader>kk :BuffergatorMruCycleNext<cr>
" View the entire list of buffers open
nmap <leader>bl :BuffergatorOpen<cr>
" Asynchronous Lint Engine
Plug 'w0rp/ale'
" Unixy stuff
Plug 'tpope/vim-eunuch'
Plug 'ziglang/zig.vim'
call plug#end()
filetype plugin indent on
set rtp+=$GOROOT/misc/vim
syntax enable
set encoding=utf-8
set showcmd
set pastetoggle=<F2>
" leave paste mode so i don't forget
au InsertLeave * set nopaste
" whitespace
set wrap " don't wrap lines
set textwidth=79
set formatoptions=qrn1
set tabstop=2 shiftwidth=2 " a tab is two spaces (or set this to 4)
set expandtab " use spaces, not tabs (optional)
set backspace=indent,eol,start " backspace through everything in insert mode
set lazyredraw " don't update the screen when executing macros
set completeopt-=preview " hide the Scratch window when autocompleting
" searching
set hlsearch " highlight matches
set incsearch " incremental searching
set ignorecase " searches are case insensitive...
set smartcase " ... unless they contain at least one capital letter
set gdefault
set showmatch " Show matching brackets.
set matchtime=5 " Bracket blinking.
set novisualbell " No blinking
set noerrorbells " No noise.
set laststatus=2 " Always show status line.
set vb t_vb= " disable any beeps or flashes on error
set ruler
set showcmd " Display an incomplete command in the lower right corner of the Vim window
set shortmess=atI " Shortens messages
set nolist " Display unprintable characters f12 - switches
set listchars=tab:·\ ,eol:¶,trail:·,extends:»,precedes:« " Unprintable chars mapping
set foldenable " Turn on folding
set foldmethod=marker " Fold on the marker
set foldlevel=100 " Don't autofold anything (but I can still fold manually)
set foldopen=block,hor,mark,percent,quickfix,tag " what movements open folds
" start scrolling when we're 8 lines away from margins
set scrolloff=8
set sidescrolloff=15
set sidescroll=1
set noswapfile
set nobackup
set nowb
set hidden
" Automatically insert the current comment leader after hitting 'o' or 'O' in Normal mode.
set fo+=o
" Do not automatically insert a comment leader after an enter
set fo-=r
" Do no auto-wrap text using textwidth (does not apply to comments)
set fo-=t
set mouse=a
" make mouse work in st
set ttymouse=xterm2
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*/vendor/*,*/bin/*,*/node_modules/*
" quicker update time for things like tagbar and coc
set updatetime=300
" taller vertical bar for vsplits
set fillchars+=vert:│
" company standard bleh
autocmd FileType java setlocal shiftwidth=4 tabstop=4
autocmd FileType go setlocal noexpandtab
autocmd BufNewFile,BufRead *.shl set syntax=sh
" When opening a file, always jump to the last cursor position
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal g'\"" |
\ endif
" easily copy to system clipboard
vnoremap <C-c> "+y
" remove annoying help window
inoremap <F1> <nop>
nnoremap <F1> <nop>
vnoremap <F1> <nop>
" easy .vimrc editing
nnoremap <silent> <Leader>rs :source ~/.vimrc<CR>
nnoremap <silent> <Leader>rt :tabnew ~/.vimrc<CR>
" better window navigation
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-h> <c-w>h
nnoremap <c-l> <c-w>l
" quickfix
nnoremap <c-n> :cnext<CR>
nnoremap <c-b> :cprevious<CR>
" hulk smash escape
inoremap jk <Esc>
inoremap kj <Esc>
" buffer switching
noremap <left> :bp<CR>
noremap <right> :bn<CR>
" unhighlight search results
noremap <silent><Leader>/ :nohls<CR>
noremap <silent><Leader>x :%!xmllint --format -<CR>
" reselect visual block after indent/outdent
vnoremap < <gv
vnoremap > >gv
" force saving files that require root permission
cmap w!! %!sudo tee > /dev/null %
" Close the current buffer and move to the previous one
" This replicates the idea of closing a tab
nmap <leader>bq :bp <BAR> bd #<CR>
"autocmd vimenter * ++nested colorscheme gruvbox
set termguicolors
let g:gruvbox_italic=1
colorscheme gruvbox
if &t_Co >= 256 || has('gui-running')
set background=dark
endif
set nu
if version >= 703
set undodir=~/.vim/backups
set undofile
set relativenumber
endif
highlight clear SignColumn
set t_ku=OA
set t_kd=OB
set t_kr=OC
set t_kl=OD