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 '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'
" 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'
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
set updatetime=500
" 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>
if &t_Co >= 256 || has('gui-running')
set background=dark
colorscheme PaperColor
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