" .vimrc.common " Eryn Wells " This file holds settings common to nvim and vim. " " 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 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 " Save swap, backup, and undo files. Each editor dictates where these will live. set swapfile set backup set undofile set history=1000 " remember 1000 commands in history set undolevels=1000 " keep lots of undo history 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= " 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 set title " 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 let g:snipMate = { 'snippet_version': 1 } " tell SnipMate who I am let g:snips_author = 'Eryn Wells ' " Set up some snippet scope aliases let g:snipMate.scope_aliases = {} let g:snipMate.scope_aliases["java"] = "android" if has('mac') let g:rust_clip_command = 'pbcopy' endif let g:rustfmt_autosave = 1 " " Mappings " noremap :NERDTreeToggle noremap :GundoToggle noremap :setlocal invlist inoremap kj " allow starting commands with ; instead of : nnoremap ; : " tab to skip between braces and such in normal "nnoremap % "vnoremap % " use PCREs for searches nnoremap / /\v vnoremap / /\v " disable the help key! noremap " make switching windows easier nnoremap h nnoremap j nnoremap k nnoremap l " Usual EMACS (oh the horror!) begin-line and end-line keys for first and last " buffer. "nnoremap :bfirst "nnoremap :blast " Move between buffers with and nnoremap :bn nnoremap :bp function! 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 " Key Mappings {{{ let mapleader=',' " strip all trailing whitespace in the current file nnoremap W :call strip_trailing_whitespace() " Source .vimrc nnoremap sv :source $MYVIMRC " Edit my .vimrc nnoremap ev :split $MYVIMRC " Edit the snippet file for the current filetype nnoremap es :e ~/.vim/bundle/snipmate-snippets/snippets/=&filetype.snippets " Edit the ftplugin-after script for the current filetype nnoremap ef :e ~/.vim/after/ftplugin/=&filetype.vim " hide search terms nnoremap :setlocal invhlsearch " find all nnoremap fa :%s/\v " Text bubbling (these depend on tpope's unimpaired plugin) nnoremap [e nnoremap ]e vnoremap [egv vnoremap ]egv " Select last edited text after cut and paste nnoremap gV `[v`] " }}} " GitGutter shows changed lines in files. "let g:gitgutter_enabled = 0 "highlight clear SignColumn "nnoremap gg :ToggleGitGutter " 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 " .snippets. Get 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 strip_trailing_whitespace() autocmd FileType c,cpp,objc,objcpp call strip_trailing_whitespace() autocmd FileType html,css call strip_trailing_whitespace() autocmd FileType lua call 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 augroup PListFileType autocmd! autocmd BufRead *.plist setf xml.plist augroup END endif " }}}