dotfiles/vimrc

414 lines
12 KiB
VimL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

" ~/.vimrc
" Eryn Wells <eryn@erynwells.me>
" Set the location of my vim directory.
let $VIM = $HOME."/.vim"
" Set this first for Vundle
set nocompatible " use enhanced vim features
filetype off " Needs to be off for Vundle to work (?)
let g:python_host_prog=$HOME.'/.virtualenvs/neovim/bin/python'
let g:python3_host_prog=$HOME.'/.virtualenvs/neovim/bin/python3'
"
" VUNDLE PLUGINS
"
set rtp+=$VIM/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
" Filetypes
Plugin 'keith/swift.vim'
Plugin 'elmcast/elm-vim'
Plugin 'othree/html5.vim'
" Editing helpers
Plugin 'tpope/vim-repeat'
Plugin 'tpope/vim-speeddating'
Plugin 'tpope/vim-surround'
Plugin 'tpope/vim-unimpaired'
Plugin 'tpope/vim-commentary'
Plugin 'PeterRincker/vim-argumentative'
" Documentation and completion
Plugin 'rizzatti/funcoo.vim' " Required for dash
Plugin 'rizzatti/dash.vim'
"Plugin 'valloric/YouCompleteMe'
Plugin 'sjl/gundo.vim' " Undo helper
Plugin 'scrooloose/nerdtree'
Plugin 'wincent/command-t'
"Plugin 'erynofwales/vim-fancyfolds'
Plugin 'apple-swift', {'pinned': 1}
Plugin 'rust-lang/rust.vim'
" Colors~
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
" Snippets
Plugin 'MarcWeber/vim-addon-mw-utils'
Plugin 'tomtom/tlib_vim'
Plugin 'garbas/vim-snipmate'
Plugin 'honza/vim-snippets'
call vundle#end()
"
" CONFIG OPTIONS
"
set autoread " reread files changed outside of vim
set noautowrite " don't write files before commands like :next and :make
set ffs=unix,dos,mac " order of line ending formats to try
set hidden " allow hidden buffers (rather than closing them)
set splitright " Open vertical splits to the right of the current window
set splitbelow " Open horizontal splits below the current window
set number " show line numbers
set ruler " show ruler (line and col count)
set showmode " show mode
set showcmd " show last command
set title " change terminal title
set visualbell " don't beep
set noerrorbells " PLEASE don't beep
set ttyfast " fast terminals
set wrap " wrap long lines
set linebreak " break at between words
set textwidth=120 " wrap at 120 characters
set colorcolumn=80,89,120
" highlight these columns
set showmatch " show matching things: (), {}, [], etc
set fo+=n " format numbered lists properly
set nolist
set lcs+=tab:▸\ " show tabs
set lcs+=eol" show end-of-lines
set lcs+=trail:・ " show trailing spaces
set lcs+=extends:→ " show long lines (that go offscreen)
set lcs+=nbsp:・ " show non-breaking spaces
set ignorecase " ignore case in searches
set smartcase " case-sensitive search if pattern contains a capital
set incsearch " show search matches as you type
set gdefault " apply searches globally to a line by default
set laststatus=2 " always show status line
" This is basically default status line, with a few exceptions:
" 1. Show buffer number before filename (%n:)
" 2. Show filetype after file name
set statusline=%2n:%<%f\ %((%Y)%)\ %(%h%m%r%)%=%-12(%l,%c%V%)%P
set spelllang=en " set spelling language
set spellfile=$VIM/spelling.en.add
set noswapfile " don't keep swap files
set nobackup " don't keep backup files
set backupdir=$VIM/backup
" save backup files here
set undofile " save undo history
set undodir=$VIM/undo " save undo files here
set history=1000 " remember 1000 commands in history
set undolevels=1000 " keep lots of undo history
if !has('nvim')
set viminfo=%100,'100,/100,h,\"500,:100,n$VIM/.viminfo
else
set viminfo=%100,'100,/100,h,\"500,:100,n$VIM/.nviminfo
endif
" I have *NO* idea what this does...
set backspace=indent,eol,start
" backspace over everything in insert mode
set tabstop=8 " tabs are always 8 spaces
set shiftwidth=4 " shift lines 4 spaces with >> and <<
set softtabstop=4 " tab key inserts 4 spaces
set shiftround " round off indent to multiple of shiftwidth
set expandtab " always use spaces
set nojoinspaces " insert 1 space instead of 2 after punctuation on line
" join
set autoindent " always use autoindenting
set copyindent " copy previous indentation on autoindent
set scrolloff=3 " scroll 3 lines ahead of point
set sidescrolloff=5 " scroll 5 columns ahead of point
set pastetoggle=<F1> " toggle paste mode with this
" completion menu
set wildmenu
set wildmode=longest,list
" Wild ignores
" build artifacts
set wildignore+=*.o,*.pyc,*~,.lo,*.class
set wildignore+=*.db,*.pdf,*.jpg,*.jpeg,*.png,*.gif
set wildignore+=.git,env,migrations
if has('mouse')
set mouse=a
endif
set modeline
set modelines=12
" Add my generated system tags files
set tags=./tags,tags
" These two are the important ones
set tags+=~/.tags/apple_frameworks.tags
set tags+=~/.tags/usr.tags
"set tags+=~/.tags/3rdparty_frameworks.tags
" This thing is 853 MB on my last count. It *probably* doesn't need to be
" included all the time...
"set tags+=~/.tags/usr_local.tags
if $TERM_PROGRAM ==# "Apple_Terminal"
set title
" Apple Terminal lets you set the current document with this escape.
set t_ts=]6;
" Alarm character.
set t_fs=
" Write out the full path to the current file in the title string.
set titlestring=file://%{expand('%:p')}
endif
" use syntax highlighting if the terminal can support it (or we're in a GUI)
if &t_Co > 2 || has('gui_running')
syntax on " turn on syntax highlighting
endif
" Dark backgrounds are the only way to travel
set bg=dark
" Try to use the solarized colorscheme if the terminal can support it
let g:solarized_termtrans = 0 " transparent terminals
let g:solarized_visibility = 'low' " visibility of list chars
try
colorscheme tomorrow_night
endtry
" Empty snipmate options dictionary
let g:snipMate = {}
" tell SnipMate who I am
let g:snips_author = 'Eryn Wells <eryn@erynwells.me>'
" Set up some snippet scope aliases
let g:snipMate.scope_aliases = {}
let g:snipMate.scope_aliases["java"] = "android"
" set the Gundo preview window on the bottom
let g:gundo_preview_bottom = 1
"
" PATHS
"
set path=.,,/usr/local/include,/usr/include
if has('mac')
let g:xcode_path = system('xcode-select -p')
let s:clang_library_path = g:xcode_path . 'Toolchains/XcodeDefault.xctoolchain/usr/lib'
if isdirectory(s:clang_library_path)
let g:clang_library_path = s:clang_library_path
endif
endif
"
" Mappings
"
noremap <silent> <F2> :NERDTreeToggle<CR>
noremap <silent> <F3> :GundoToggle<CR>
noremap <silent> <F4> :setlocal invlist<CR>
inoremap kj <ESC>
" allow starting commands with ; instead of :
nnoremap ; :
" tab to skip between braces and such in normal
"nnoremap <silent> <tab> %
"vnoremap <silent> <tab> %
" use PCREs for searches
nnoremap / /\v
vnoremap / /\v
" disable the help key!
noremap <silent> <F1> <ESC>
" make switching windows easier
nnoremap <silent> <C-h> <C-w>h
nnoremap <silent> <C-j> <C-w>j
nnoremap <silent> <C-k> <C-w>k
nnoremap <silent> <C-l> <C-w>l
" Usual EMACS (oh the horror!) begin-line and end-line keys for first and last
" buffer.
"nnoremap <silent> <C-a> :bfirst<CR>
"nnoremap <silent> <C-e> :blast<CR>
" Move between buffers with <C-n> and <C-p>
nnoremap <silent> <C-n> :bn<CR>
nnoremap <silent> <C-p> :bp<CR>
function! <SID>strip_trailing_whitespace()
" save last search
let _s=@/
" save cursor position
let l = line('.')
let c = col('.')
" do the clean up
%s/\s\+$//e
" restore saved stuff
let @/=_s
call cursor(l, c)
endfunction
function! SelectaCommand(choice_command, selecta_args, vim_command)
try
silent let selection = system(a:choice_command . " | selecta " . a:selecta_args)
catch /Vim:Interrupt/
" Swallow ^C so the redraw below happens; otherwise there will be
" leftovers of selecta on screen.
redraw!
return
endtry
redraw!
exec a:vim_command . " " . selection
endfunction
" Key Mappings {{{
let mapleader=','
" hide search terms
nnoremap <silent> <leader><space> :setlocal invhlsearch<CR>
" find all
nnoremap <leader>fa :%s/\v
" strip all trailing whitespace in the current file
nnoremap <silent> <leader>W :call <SID>strip_trailing_whitespace()<CR>
" Source .vimrc
nnoremap <leader>sv :source $MYVIMRC<CR>
" Edit my .vimrc
nnoremap <leader>ev :split $MYVIMRC<CR>
" Edit the snippet file for the current filetype
nnoremap <leader>es :e ~/.vim/bundle/snipmate-snippets/snippets/<C-r>=&filetype<CR>.snippets<CR>
" Edit the ftplugin-after script for the current filetype
nnoremap <leader>ef :e ~/.vim/after/ftplugin/<C-r>=&filetype<CR>.vim<CR>
" hide search terms
nnoremap <silent> <leader><space> :setlocal invhlsearch<CR>
" find all
nnoremap <leader>fa :%s/\v
nnoremap <leader>f :call SelectaCommand("find * -type f", "", ":e")<cr>
nnoremap <silent> <leader>cl :setlocal invcursorline<CR>
nnoremap <silent> <leader>cc :setlocal invcursorcolumn<CR>
" Text bubbling (these depend on tpope's unimpaired plugin)
nnoremap <C-Up> [e
nnoremap <C-Down> ]e
vnoremap <C-Up> [egv
vnoremap <C-Down> ]egv
" Select last edited text after cut and paste
nnoremap gV `[v`]
" }}}
" Command-T should open files in tabs when I hit <CR>; move opening files in
" buffers to <C-b>
"let g:CommandTAcceptSelectionMap='<C-b>'
"let g:CommandTAcceptSelectionTabMap='<CR>'
" GitGutter shows changed lines in files.
"let g:gitgutter_enabled = 0
"highlight clear SignColumn
"nnoremap <silent> <leader>gg :ToggleGitGutter<CR>
" Don't underline folded lines
highlight Folded cterm=bold term=bold ctermfg=NONE ctermbg=NONE
" Line numbers are a touch darker...
"highlight LineNr ctermfg=8 ctermbg=0
" Don't underline the CursorLine in color terminals; use dark black.
highlight CursorLine term=underline cterm=NONE ctermbg=0
highlight CursorLineNr term=underline cterm=NONE ctermfg=7 ctermbg=0
" Autocommands {{{
if has('autocmd')
filetype plugin indent on
" Jump to last known cursor position unless it's the first line, or past the
" end of the file
augroup RestoreCursorPosition
autocmd!
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") |
\ exe "normal! g`\"" |
\ endif
augroup END
" Reload snippets after editing the snippets file. Snippet files are
" <filetype>.snippets. Get <filetype> from the filename and reload the
" snippets for that type.
"augroup ReloadSnippets
" autocmd!
" autocmd BufWritePost *.snippets :call ReloadSnippets(expand('%:t:r'))
"augroup END
" Clean whitespace before saving: Python, C, HTML, and Objective-C
augroup StripTrailingWhitespace
autocmd!
autocmd FileType python call <SID>strip_trailing_whitespace()
autocmd FileType c,cpp,objc,objcpp call <SID>strip_trailing_whitespace()
autocmd FileType html,css call <SID>strip_trailing_whitespace()
augroup END
" Indent wrapped long lines of code to leading indent
augroup WrapLongLinesWithProperIndentation
autocmd!
autocmd FileType python,c,cpp,objc,objcpp,html,css setlocal breakindent showbreak=\ \ \ \
augroup END
augroup SConsFileType
autocmd!
autocmd BufRead SCons{truct,cript} setf python
augroup END
" Toggle position highlighting
augroup HighlightCursorLineInNormalMode
autocmd!
autocmd BufEnter * setlocal cursorline
autocmd InsertEnter * setlocal nocursorline
autocmd InsertLeave * setlocal cursorline
augroup END
augroup XCodeProjectFileType
autocmd!
autocmd BufRead *.pbxproj setf xcodepbx
augroup END
endif
" }}}
if has('unix')
if filereadable($HOME."/.vimrc.local")
source $HOME/.vimrc.local
endif
endif