set rtp+=~/.fzf " ---------------------------------------------------------------------------- " KEY MAPS " ---------------------------------------------------------------------------- nmap \A :set formatoptions+=a:echo "autowrap enabled" nmap \M :set noexpandtab tabstop=8 softtabstop=4 shiftwidth=4 nmap \T :set expandtab tabstop=8 shiftwidth=8 softtabstop=4 nmap \a :set formatoptions-=a:echo "autowrap disabled" " Search for the word under the cursor in the current directory nmap mo:Ack! "\b\b" nmap k mo:Ack! "\b\b" nmap ˚ mo:Ack! "\b\b" nmap mo:Ggrep! "\b\b" nmap K mo:Ggrep! "\b\b" " Fix annoyances in the QuickFix window, like scrolling too much autocmd FileType qf setlocal number nolist scrolloff=0 autocmd Filetype qf wincmd J " Makes sure it's at the bottom of the vim window " Commands to send common keystrokes using tmux let g:tmux_console_pane = '0:0.0' let g:tmux_server_pane = '0:0.0' function TmuxPaneRepeat() write silent execute ':!tmux send-keys -t' g:tmux_console_pane 'C-p' 'C-j' redraw! endfunction function TmuxPaneClear() silent execute ':!tmux send-keys -t' g:tmux_server_pane 'C-j' 'C-j' 'C-j' 'C-j' 'C-j' 'C-j' 'C-j' redraw! endfunction " ---------------------------------------------------------------------------- " ABBREVATIONS " ---------------------------------------------------------------------------- " Typing `$c` on the command line expands to `:e` + the current path, so it's easy to edit a file in " the same directory as the current file. cnoremap $c e eCurrentFileDir() function! CurrentFileDir() return "e " . expand("%:p:h") . "/" endfunction " ---------------------------------------------------------------------------- " OPTIONS " ---------------------------------------------------------------------------- set autoindent " Carry over indenting from previous line set autoread " Don't bother me when a file changes set autowrite " Write on :next/:prev/^Z set backspace=indent,eol,start " Allow backspace beyond insertion point set cindent " Automatic program indenting set cinkeys-=0# " Comments don't fiddle with indenting set cino= " See :h cinoptions-values set commentstring=\ \ #%s " When folds are created, add them to this set copyindent " Make autoindent use the same chars as prev line set directory-=. " Don't store temp files in cwd set encoding=utf8 " UTF-8 by default set expandtab " No tabs set fileformats=unix,dos,mac " Prefer Unix set fillchars=vert:\ ,stl:\ ,stlnc:\ ,fold:-,diff:┄ " Unicode chars for diffs/folds, and rely on " Colors for window borders silent! set foldmethod=marker " Use braces by default set formatoptions=tcqn1 " t - autowrap normal text " c - autowrap comments " q - gq formats comments " n - autowrap lists " 1 - break _before_ single-letter words " 2 - use indenting from 2nd line of para set hidden " Don't prompt to save hidden windows until exit set history=200 " How many lines of history to save set hlsearch " Hilight searching set ignorecase " Case insensitive set incsearch " Search as you type set infercase " Completion recognizes capitalization set laststatus=2 " Always show the status bar set linebreak " Break long lines by word, not char set list " Show whitespace as special chars - see listchars set listchars=tab:»\ ,extends:›,precedes:‹,nbsp:·,trail:· " Unicode characters for various things set matchtime=2 " Tenths of second to hilight matching paren set modelines=5 " How many lines of head & tail to look for ml's silent! set mouse=nvc " Use the mouse, but not in insert mode set nobackup " No backups left after done editing set number " Show line numbers to start set visualbell t_vb= " No flashing or beeping at all set nowritebackup " No backups made while editing set ruler " Show row/col and percentage set scroll=4 " Number of lines to scroll with ^U/^D set scrolloff=15 " Keep cursor away from this many chars top/bot set sessionoptions-=options " Don't save runtimepath in Vim session (see tpope/vim-pathogen docs) set shiftround " Shift to certain columns, not just n spaces set shiftwidth=2 " Number of spaces to shift for autoindent or >,< set shortmess+=A " Don't bother me when a swapfile exists set showbreak= " Show for lines that have been wrapped, like Emacs set showmatch " Hilight matching braces/parens/etc. set sidescrolloff=3 " Keep cursor away from this many chars left/right set smartcase " Lets you search for ALL CAPS set softtabstop=2 " Spaces 'feel' like tabs set suffixes+=.pyc " Ignore these files when tab-completing set tabstop=2 " The One True Tab set textwidth=100 " 100 is the new 80 set notitle " Don't set the title of the Vim window set wildmenu " Show possible completions on command line set wildmode=list:longest,full " List all options and complete set wildignore=*.class,*.o,*~,*.pyc,.git,node_modules " Ignore certain files in tab-completion " Essential for filetype plugins. filetype plugin indent on " ---------------------------------------------------------------------------- " CUSTOM COMMANDS AND FUNCTIONS " ---------------------------------------------------------------------------- " ---------------------------------------------------------------------------- " PLUGIN SETTINGS " ---------------------------------------------------------------------------- " Use Pathogen for plugin management. See update.sh in this directory. runtime bundle/vim-pathogen/autoload/pathogen.vim call pathogen#infect() call pathogen#helptags() " GitGutter styling to use · instead of +/- let g:gitgutter_sign_added = '∙' let g:gitgutter_sign_modified = '∙' let g:gitgutter_sign_removed = '∙' let g:gitgutter_sign_modified_removed = '∙' " ALE let g:ale_sign_warning = '▲' let g:ale_sign_error = '✗' highlight link ALEWarningSign String highlight link ALEErrorSign Title " Lightline let g:lightline = { \ 'colorscheme': 'wombat', \ 'active': { \ 'left': [['mode', 'paste'], ['filename', 'modified']], \ 'right': [['lineinfo'], ['percent'], ['readonly', 'linter_warnings', 'linter_errors', 'linter_ok']] \ }, \ 'component_expand': { \ 'linter_warnings': 'LightlineLinterWarnings', \ 'linter_errors': 'LightlineLinterErrors', \ 'linter_ok': 'LightlineLinterOK' \ }, \ 'component_type': { \ 'readonly': 'error', \ 'linter_warnings': 'warning', \ 'linter_errors': 'error' \ }, \ } function! LightlineLinterWarnings() abort let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? '' : printf('%d ◆', all_non_errors) endfunction function! LightlineLinterErrors() abort let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? '' : printf('%d ✗', all_errors) endfunction function! LightlineLinterOK() abort let l:counts = ale#statusline#Count(bufnr('')) let l:all_errors = l:counts.error + l:counts.style_error let l:all_non_errors = l:counts.total - l:all_errors return l:counts.total == 0 ? '✓ ' : '' endfunction " Update and show lightline but only if it's visible (e.g., not in Goyo) autocmd User ALELint call s:MaybeUpdateLightline() function! s:MaybeUpdateLightline() if exists('#lightline') call lightline#update() end endfunction " ---------------------------------------------------------------------------- " COLORS " ---------------------------------------------------------------------------- " Make sure colored syntax mode is on, and make it Just Work with 256-color terminals. set background=dark let g:rehash256 = 1 " Something to do with Molokai? " colorscheme molokai if !has('gui_running') if $TERM == "xterm-256color" || $TERM == "screen-256color" || $COLORTERM == "gnome-terminal" set t_Co=256 elseif has("terminfo") colorscheme default set t_Co=8 set t_Sf=[3%p1%dm set t_Sb=[4%p1%dm else colorscheme default set t_Co=8 set t_Sf=[3%dm set t_Sb=[4%dm endif " Disable Background Color Erase when within tmux - https://stackoverflow.com/q/6427650/102704 if $TMUX != "" set t_ut= endif endif syntax on " Window splits & ruler are too bright, so change to white on grey (non-GUI) highlight StatusLine cterm=NONE ctermbg=blue ctermfg=white highlight StatusLineTerm cterm=NONE ctermbg=blue ctermfg=white highlight StatusLineNC cterm=NONE ctermbg=black ctermfg=white highlight StatusLineTermNC cterm=NONE ctermbg=black ctermfg=white highlight VertSplit cterm=NONE ctermbg=black ctermfg=white " taglist.vim's filenames is linked to LineNr by default, which is too dark highlight def link MyTagListFileName Statement highlight def link MyTagListTagName Question " Turn off horrible coloring for CDATA in XML highlight def link xmlCdata NONE " Some custom spell-checking colors "highlight SpellBad term=underline cterm=underline ctermbg=NONE ctermfg=205 "highlight SpellCap term=underline cterm=underline ctermbg=NONE ctermfg=33 "highlight SpellRare term=underline cterm=underline ctermbg=NONE ctermfg=217 "highlight SpellLocal term=underline cterm=underline ctermbg=NONE ctermfg=72 " The Ignore color should be... ignorable silent! highlight Ignore cterm=bold ctermfg=black ctermbg=bg highlight clear FoldColumn highlight def link FoldColumn Ignore highlight clear Folded highlight link Folded Ignore highlight clear LineNr highlight! def link LineNr Ignore " Custom search colors highlight clear Search highlight Search term=NONE cterm=NONE ctermfg=white ctermbg=black " Make hilighted matching parents less annoying highlight clear MatchParen highlight link MatchParen Search " Custom colors for NERDTree highlight def link NERDTreeRO NERDTreeFile " Make trailing spaces very visible "highlight SpecialKey ctermbg=Yellow guibg=Yellow " Make menu selections visible highlight PmenuSel ctermfg=black ctermbg=magenta " The sign column slows down remote terminals highlight clear SignColumn highlight link SignColumn Ignore " Markdown could be more fruit salady highlight link markdownH1 PreProc highlight link markdownH2 PreProc highlight link markdownLink Character highlight link markdownBold String highlight link markdownItalic Statement highlight link markdownCode Delimiter highlight link markdownCodeBlock Delimiter highlight link markdownListMarker Todo " ---------------------------------------------------------------------------- " FILE TYPE TRIGGERS " ---------------------------------------------------------------------------- " Reset all autocommands augroup vimrc autocmd! au BufNewFile,BufRead *.cson set ft=coffee au BufNewFile,BufRead *.glsl setf glsl au BufNewFile,BufRead *.gyp set ft=python au BufNewFile,BufRead *.html setlocal nocindent smartindent au BufNewFile,BufRead *.i7x setf inform7 au BufNewFile,BufRead *.ini setf conf au BufNewFile,BufRead *.input setf gnuplot au BufNewFile,BufRead *.json set ft=json tw=0 au BufNewFile,BufRead *.less setlocal ft=less nocindent smartindent au BufNewFile,BufRead *.md setlocal ft=markdown nolist au BufNewFile,BufRead *.md,*.markdown setlocal foldlevel=999 tw=0 nocin au BufNewFile,BufRead *.ni setlocal ft=inform nolist ts=2 sw=2 noet au BufNewFile,BufRead *.plist setf xml au BufNewFile,BufRead *.rb setlocal noai au BufNewFile,BufRead *.rxml setf ruby au BufNewFile,BufRead *.sass setf sass au BufNewFile,BufRead *.ttml setf xml au BufNewFile,BufRead *.vert,*.frag set ft=glsl au BufNewFile,BufRead *.xml setlocal ft=xml ts=2 sw=2 et au BufNewFile,BufRead *.zone setlocal nolist ts=4 sw=4 noet au BufNewFile,BufRead *.zsh setf zsh au BufNewFile,BufRead *templates/*.html setf htmldjango au BufNewFile,BufRead .git/config setlocal ft=gitconfig nolist ts=4 sw=4 noet au BufNewFile,BufRead .gitconfig* setlocal ft=gitconfig nolist ts=4 sw=4 noet au BufNewFile,BufRead .vimlocal,.gvimlocal setf vim au BufNewFile,BufRead .zshlocal setf zsh au BufNewFile,BufRead /tmp/crontab* setf crontab au BufNewFile,BufRead COMMIT_EDITMSG setlocal nolist nonumber au BufNewFile,BufRead Makefile setlocal nolist au FileType gitcommit setlocal nolist ts=4 sts=4 sw=4 noet au FileType inform7 setlocal nolist tw=0 ts=4 sw=4 noet foldlevel=999 au FileType json setlocal conceallevel=0 foldmethod=syntax foldlevel=999 au FileType make setlocal nolist ts=4 sts=4 sw=4 noet au FileType markdown syn sync fromstart au Filetype gitcommit setlocal tw=80 augroup END " ---------------------------------------------------------------------------- " HOST-SPECIFIC VIM FILE " ---------------------------------------------------------------------------- " Now load specifics to this host if filereadable(expand("~/.vimlocal")) source ~/.vimlocal endif " vim:set tw=100: