summaryrefslogblamecommitdiffstats
path: root/.vimrc
blob: f5b90978368fcdb388d055cfdcb6db096730024d (plain) (tree)
















































































































































































































































































                                                                                                              
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