" vundle plugin options {{{ if has('vim_starting') " vim mode! set nocompatible filetype off set rtp+=~/.vim/bundle/neobundle.vim/ endif call neobundle#rc(expand('~/.vim/bundle/')) NeoBundleFetch 'Shougo/neobundle.vim' " TODO look into: " pomodoro reminder plugin: https://github.com/vim-scripts/vim-airline-tomato " fast HTML tag generation (in insert mode type tr*3CTL-Y, to make three s NeoBundle 'mattn/emmet-vim.git' " debug xdebug NeoBundle 'joonty/vdebug.git' NeoBundle 'kien/ctrlp.vim.git' NeoBundle 'scrooloose/nerdcommenter.git' NeoBundle 'sukima/xmledit' NeoBundle 'vim-scripts/applescript.vim' " editing CSV docs, super handily. " TODO update this repo so that people know to look for chrisba NeoBundle 'dsummersl/wikia-csv.git' " NeoBundle 'chrisba/csv.vim.git' " simple utf2ascii function. NeoBundle 'dsummersl/vim-utf2ascii' NeoBundle 'tpope/vim-fugitive.git' " snippets NeoBundle 'guns/ultisnips.git' NeoBundle 'derekwyatt/vim-scala.git' NeoBundle 'kchmck/vim-coffee-script' " surround things with quotes, etc (csw - surround word) NeoBundle 'tpope/vim-surround.git' NeoBundle 'nathanaelkane/vim-indent-guides' " TODO this? Its a dependency for a number of libs? NeoBundle 'PProvost/vim-ps1' " TODO this? Its a dependency for a number of libs? NeoBundle 'L9' NeoBundle 'vim-scripts/LargeFile.git' NeoBundle 'vim-scripts/genutils.git' " TODO do I need both matchit and xmledit? NeoBundle 'vim-scripts/matchit.zip.git' " many additional mappings for ]q, etc NeoBundle 'tpope/vim-unimpaired.git' NeoBundle 'gregsexton/gitv' " awesome: makes the surround plugin work with the '.' keys (repeatability!) NeoBundle 'tpope/vim-repeat' " via (visual inner arg) NeoBundle 'vim-scripts/argtextobj.vim' " fix spelling errors NeoBundle 'tpope/vim-abolish' " quick find method definitions: NeoBundle 'Shougo/unite.vim' " Nice outline of a file's methods within Unite. NeoBundle 'Shougo/unite-outline' " viI (visual inner Indent) NeoBundle 'michaeljsmith/vim-indent-object' " allow the quicklist to be edited :cw, 'i'. :QFLoad and :LocSave NeoBundle 'jceb/vim-editqf' " javascript omni integration NeoBundle 'marijnh/tern_for_vim' NeoBundle 'Shougo/vimproc' " syntax hilighting for actionscript NeoBundle 'jeroenbourgois/vim-actionscript' " use Cdo to quicklist argument modifications NeoBundle 'dsummersl/vim-cdo' " Go language autocompletion NeoBundle 'jnwhiteh/vim-golang' " automatically detect the indent style of the document NeoBundle 'raymond-w-ko/detectindent' " close quotes and such automatically NeoBundle 'jiangmiao/auto-pairs' NeoBundle 'tpope/vim-rails' NeoBundle 'junegunn/vim-easy-align' " A simple Vim alignment plugin NeoBundle 'danro/rename.vim' " Rename the current file in the vim buffer + retain relative path. NeoBundle 'tpope/vim-eunuch' " eunuch.vim: cp/move/unlink commands " TODO try out this seek plugin (sounds better than the original): " https://github.com/justinmk/vim-sneak NeoBundle 'AndrewRadev/splitjoin.vim' " A vim plugin that simplifies the transition between multiline and single-line code NeoBundle 'ervandew/ag' " vim plugin to search using the silver searcher (ag) NeoBundle 'tommcdo/vim-exchange' " Easy text exchange operator for Vim NeoBundle 'bigfish/vim-js-context-coloring', { \ 'build' : { \ 'mac' : 'npm install --update', \ 'unix' : 'npm install --update', \ }, \ } " user defined textobj implementations NeoBundle 'kana/vim-textobj-user' " vib between any arbitrary object NeoBundle 'thinca/vim-textobj-between' " provide focus of a selected block into its own buffer via 'NR' NeoBundle 'chrisbra/NrrwRgn' " Easily toggle boolean values: NeoBundle 'AndrewRadev/switch.vim' " TODO automatic ctags generation doesn't seem to work, but I love the idea... "NeoBundle 'szw/vim-tags' " run make in the background. (used by vim-tags) NeoBundle 'tpope/vim-dispatch' " utility functions " a hash implementation - make it easy to compute the hash of a string in the " editor (ie, yank a block, then do :echo _#hash(@") ) NeoBundle 'dsummersl/vus' " sluice side screen control NeoBundle 'dsummersl/vim-sluice' " unit testing for vim. NeoBundle 'dsummersl/vimunit' " TODO jcfaria/Vim-R-plugin " TODO https://github.com/vim-scripts/PatternsOnText - delete/replace non " matches (also has some quicklist looking stuff). " TODO move text blocks easily through )}" : https://github.com/vim-scripts/easy-through-pairing.vim " TODO use count in front of jk control keys: https://github.com/vim-scripts/rel-jump " python omni completion " Its annoying b/c it automatically appears when I only want it when I " explicitly ask for it. Maybe there is a way to configure it that way: "NeoBundle 'davidhalter/jedi-vim' " Probably going to remove these: " colorize ansi escaped text (console dumps) NeoBundle 'vim-scripts/AnsiEsc.vim' NeoBundle 'vim-scripts/cecutil.git' NeoBundle 'vim-scripts/Vimball.git' " TODO something like yankstack sounds nice but this breaks the vS feature of " the surround plugin. "NeoBundle 'maxbrunsfeld/vim-yankstack' " TODO plugins to think about " https://github.com/vim-scripts/YankRing.vim " https://github.com/chrisbra/color_highlight " GUI & version specific settings (7+) "{{{ set nospell spelllang=en_us " for the latest version I am both gui/console enabled! if v:version >= 704 " base16 color schemes NeoBundle 'altercation/vim-colors-solarized' " A better powerline plugin: NeoBundle 'bling/vim-airline' " vi/ (last search) NeoBundle 'kana/vim-textobj-lastpat' " I don't really care about trailing spaces so much as the indenting: let g:airline#extensions#whitespace#checks = [ 'indent' ] let g:airline_theme='base16' set laststatus=2 " show undo history nnoremap :GundoToggle let macvim_skip_colorscheme = 1 colorscheme default if !has("gui_running") autocmd BufWinEnter * :colorscheme default endif endif if v:version >= 703 set undofile set undodir=~/.vim/undo set cryptmethod=blowfish NeoBundle 'https://github.com/godlygeek/csapprox.git' NeoBundle 'dsummers/gundo.vim.git' if has("gui_running") " color css colors auto magically - VERY slow on the console. NeoBundle 'skammer/vim-css-color' set background=light colorscheme solarized set macmeta set anti " TODO make the fold highlight non-underlined. " a powerline friendly font might look like " set gfn=Menlo\ Regular\ for\ Powerline:h15 set gfn=Monaco:h15 set cursorline " show column markers beyond the 80 char line. set colorcolumn=+1,+2,+3 endif endif "}}} " my own lame SVN mappings: " NeoBundle "git://github.com/dsummersl/svntools" " this is no longer maintained by me: " "git://github.com/motemen/git-vim" " "git://github.com/dsummersl/lookupfile-grep" " don't like how the tags are displayed. Its kinda annoying. " "git://github.com/kshenoy/vim-signature.git" filetype on filetype indent on " Enable filetype-specific indenting filetype plugin on " Enable filetype-specific plugins " }}} " basic options {{{ set autowrite set number " I want to know about bad tab/space use: set list syntax on set t_Co=256 set guioptions=egt " GUI options " use folding by default set fdm=marker " improve syntax highlighting when we have long lines by not highlighting lines " over 360 columns: set synmaxcol=360 " improve syntax highlighting speed in general syntax sync minlines=64 syntax sync maxlines=128 set diffopt=filler,iwhite set nohls set nowrap " TABS, and tab size of two characters set noet set sw=2 set ts=2 set sts=2 set visualbell " allow backspacing over everything in insert mode set backspace=2 set nobackup set incsearch let mapleader='m' let maplocalleader='=' set viminfo='50,\"50,h set history=100 " keep 100 lines of command line history set ruler " show the cursor position all the time set showcmd " Show (partial) command in status line. set showmatch " Show matching brackets. set encoding=utf-8 " Setup a vertical higlight for the 80+ column positions: set textwidth=80 set fo=croq " when wrap is turned on, break on words set linebreak " let macros go faster set lazyredraw "}}} " Plugin settings, changes."{{{ let g:js_context_colors = [ 22, 28, 34, 106, 178, 166, 124 ] let g:js_context_colors_enabled = 0 " the emmet mappings really f this up: "let g:user_emmet_leader_key = 'm' vmap (LiveEasyAlign) nmap a (LiveEasyAlign) " let the narrow region plugin NR functions automatically update the window " location on change: let g:narrow_rgn_update_orig_win = 1 let g:nrrw_rgn_update_orig_win = 1 " automatically jump to the next )] or what have you let g:AutoPairsFlyMode = 0 let g:fugitive_git_executable = '/usr/local/bin/git' let g:indent_guides_enable_on_vim_startup = 1 let g:indent_guides_color_change_percent = 2 " don't include tabs in 'soft' tabs - I want to see when things are amiss. let g:indent_guides_soft_pattern = ' ' let g:detectindent_preferred_indent = 2 let g:detectindent_max_lines_to_analyse = 256 let g:detectindent_min_indent = 2 " we have very long commit lines - this helps! let g:Gitv_TruncateCommitSubjects = 1 " Setup the VDebug options. Start and stop with f11/12. let g:vdebug_keymap = { \ "run" : "", \ "run_to_cursor" : "", \ "step_over" : "", \ "step_into" : "", \ "step_out" : "", \ "close" : "", \ "detach" : "", \ "set_breakpoint" : "", \ "get_context" : "", \ "eval_under_cursor" : "", \ "eval_visual" : "e", \} " Toggle a setting on or off. function! Toggle(setting) exec "let b=". a:setting if b == '0' echom a:setting ."=1" exec "let ". a:setting ."=1" else echom a:setting ."=0" exec "let ". a:setting ."=0" endif endfunction " automatically "imap :let g:AutoPairsFlyMode=1":let g:AutoPairsFlyMode=0 "imap :let g:AutoPairsFlyMode=1':let g:AutoPairsFlyMode=0 "imap :let g:AutoPairsFlyMode=1]:let g:AutoPairsFlyMode=0 "imap :let g:AutoPairsFlyMode=1):let g:AutoPairsFlyMode=0 "imap :let g:AutoPairsFlyMode=1}:let g:AutoPairsFlyMode=0 " toggle Sluice gutters nnoremap :SluiceMacroOff SluiceToggle nnoremap :SluiceMacroOn SluiceToggle " in insert mode, move up/down one line and stay in insert mode. inoremap o inoremap O " automatically toggle with control- nnoremap . :Switch " left/right and up/down first/last autocmd FileType * let b:switch_custom_definitions = \ [ \ { '\([^=]\)===\([^=]\)': '\1==\2' }, \ { '\([^=]\)==\([^=]\)': '\1===\2' }, \ { 'FALSE': 'TRUE' }, \ { 'TRUE': 'FALSE' }, \ { 'left': 'right' }, \ { 'right': 'left' }, \ { 'up': 'down' }, \ { 'down': 'up' }, \ { 'top': 'bottom' }, \ { 'bottom': 'top' }, \ { 'first': 'last' }, \ { 'last': 'first' }, \ { 'public': 'private' }, \ { 'private': 'protected' }, \ { 'protected': 'public' } \ ] " don't use vif (thats a function, duh!) let g:textobj_between_no_default_key_mappings=0 " use vib and vab instead xmap ab (textobj-between-a) omap ab (textobj-between-a) xmap ib (textobj-between-i) omap ib (textobj-between-i) " enable yanks! let g:unite_source_history_yank_enable = 1 let g:unite_enable_start_insert = 1 " I like the unite thing on the left side all get it going: let g:unite_enable_split_vertically=1 let g:unite_winwidth=60 call unite#set_profile('source/outline', 'ignorecase', 1) let g:UltiSnipsListSnippets='' let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" let g:UltiSnipsJumpBackwardTrigger="" " CtrlP plugin nnoremap :CtrlP cnoremap :CtrlP nnoremap :CtrlPMRU cnoremap :CtrlPMRU let g:ctrlp_by_filename = 1 " use 'r' let g:ctrlp_regexp = 1 " use 'd' let g:ctrlp_mruf_relative = 1 let g:ctrlp_use_caching = 1 let g:ctrlp_clear_cache_on_exit = 0 let g:ctrlp_cache_dir = $HOME.'/.cache/ctrlp' " just use the pwd when finding files. let g:ctrlp_working_path_mode = 'w' " by default ignore subversion things and swap file set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/*.sw?,*/*.pyc,*/*.class " enable the quickfix plugin source: let g:ctrlp_extensions=['changes'] " Unite outline mode nnoremap :Unite outline " look into the current directory nnoremap :UniteWithBufferDir directory let NERDMapleader = ',' let g:tagbar_left = 1 let g:sluice_default_macromode=1 " set the sluice updatetime to fast for quick gutter updates. set updatetime=200 " show diff with git nnoremap :Gvdiff " don't search included files by default - it can be fucked up slow: set complete-=i " project loading functions"{{{ function! LoadProject(type,directory) " type = the type of project. " directory = Directory of the project to set up for. " " Load a project. This is a generic function that loads a script for a type " of project. Each type of project keeps its functions in a directory " named after the project (~/.vim/Project/{type}). When this function is " called, the script ~/.vim/Project/{type}/in.vim is executed, with " b:proj_cd set to the directory of the project that in.vim should setup " for. " let b:proj_cd=getcwd() if (a:directory != '') let b:proj_cd=a:directory endif exec "source ~/.vim/bundle/lookupfile-grep/project/". a:type .".vim" endfunction command! -nargs=? -bang -complete=dir ProjectMaven :call LoadProject("maven",) command! -nargs=? -bang -complete=dir ProjectRails :call LoadProject("rails",) command! -nargs=? -bang -complete=dir ProjectJava :call LoadProject("java",) command! -nargs=? -bang -complete=dir ProjectScript :call LoadProject("script",) command! -nargs=? -bang -complete=dir ProjectGrails :call LoadProject("grails",) command! -nargs=? -bang -complete=dir ProjectScala :call LoadProject("grails",) command! -nargs=? -bang -complete=dir ProjectPython :call LoadProject("grails",) "}}} " tagbar groovy/markdown/scala/php"{{{ let g:tagbar_type_groovy = { \ 'ctagstype' : 'groovy', \ 'kinds' : [ \ 'p:package', \ 'c:class', \ 'i:interface', \ 'f:function', \ 'v:variables', \ ] \ } let g:tagbar_type_markdown = { \ 'ctagstype' : 'markdown', \ 'kinds' : [ \ 'h:Heading_L1', \ 'i:Heading_L2', \ 'k:Heading_L3' \ ] \ } let g:tagbar_type_scala = { \ 'ctagstype' : 'Scala', \ 'kinds' : [ \ 'p:packages:1', \ 'V:values', \ 'v:variables', \ 'T:types', \ 't:traits', \ 'o:objects', \ 'a:aclasses', \ 'c:classes', \ 'r:cclasses', \ 'm:methods' \ ] \ } "}}} " delete all buffers function function! DeleteHiddenBuffers() let tpbl=[] call map(range(1, tabpagenr('$')), 'extend(tpbl, tabpagebuflist(v:val))') for buf in filter(range(1, bufnr('$')), 'bufexists(v:val) && index(tpbl, v:val)==-1') silent execute 'bwipeout' buf endfor endfunction " "}}} " Setup how in 'list' mode characters for white space and tabs appear"{{{ " display tags and trailing white spaces in list mode. set fillchars+=stl:\ ,stlnc:\ set lcs=tab:\ \ ,trail:+ highlight SpecialKey term=underline guifg=Red guibg=LightGrey " syntax match MixedIndentation /^\v +(\t+)|\t+( +)/ " hi MixedIndentation guibg=Red guifg=White ctermbg=Red ctermfg=White "}}} " Mappings"{{{ cabbrev bda call DeleteHiddenBuffers() cabbrev gitv Gitv " quickly clear out search results nnoremap [n :nohlsearch " when switching between the alternate window, automatically save. inoremap :e # " instead of using this, I use 'gt' map " turn off help map imap imap " Make Control up/down scroll up/down in the window...even in insert mode. imap imap " Mappings that I have been using " for moving between windows with ease: map j_ map k_ " console copy to buffer noremap y "*y noremap yy "*Y noremap p :set paste:put *:set nopaste " see all the search matches in a separate window (narrow region) noremap / :exec "g//NRP" \| NRM " For a two parameter function, swap the two paramters - ideally I'd change this so that the cursor was in a position to swap the next terms: " (a,b,c) ... swap this and the next, or swap this and the previous (and leave " me at the previous) map ss F( dia viaPF(p " Open the current directory (or make new directory) map ep :e %:h " Use gp to select the last pasted region. nnoremap gp '`[' . strpart(getregtype(), 0, 1) . '`]' "}}} " Commands"{{{ " Execute something on all files of the same kind: " " See GG and AA commands: function! s:ExecFileType(cmd,search) let extension = substitute(expand('%'),'\v^.*\.',"","") exec printf("silent %s",printf(a:cmd,a:search,extension)) endfunction command! -nargs=1 GG call s:ExecFileType("Ggrep %s -- '*.%s'",'') command! -nargs=1 AA call s:ExecFileType("Ag %s **/*.%s",'') function! ConcealSearch(repl) exe 'syn keyword concealSearch "'. @/ .'" conceal cchar='. a:repl set conceallevel=2 endfunction "}}} " Automappings"{{{ if has("autocmd") && !exists("autocommands_loaded") let autocommands_loaded = 1 if has("gui_running") au WinLeave * setlocal nocursorline au WinEnter * setlocal cursorline au BufNewFile,BufReadPost * :call AutoPairsInit() endif " Set the indenting to what it looks like the file is using: autocmd BufReadPost * :DetectIndent " ensure that tabstop settings for file browsing is big enough for column " alignment: autocmd FileType netrw setlocal ts=30 autocmd FileType ruby,eruby setlocal omnifunc=rubycomplete#Complete autocmd FileType ruby,eruby setlocal fdm& autocmd FileType python setlocal omnifunc=pythoncomplete#Complete autocmd FileType sh setlocal omnifunc=syntaxcomplete#Complete autocmd FileType vim setlocal omnifunc=syntaxcomplete#Complete " use the same comment formatting in groovy/PHP that is used for java: autocmd FileType php setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- autocmd FileType php setlocal fo=croq autocmd FileType php compiler php autocmd FileType groovy setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- autocmd FileType groovy setlocal fo=croq autocmd BufNewFile,BufRead *.rabl setf eruby autocmd BufNewFile,BufRead *.eco setf eruby autocmd BufNewFile,BufRead *.md setf markdown autocmd BufNewFile,BufRead *.md setlocal spell fo-=tn wrap autocmd BufNewFile,BufRead *.pp setf ruby autocmd BufNewFile,BufRead *.csv setf csv autocmd BufNewFile,BufRead *.tsv setf csv autocmd BufNewFile,BufRead *.tsv Delimiter \t autocmd BufNewFile,BufRead *.tsv setlocal ts=20 sw=25 autocmd BufNewFile,BufRead *.gradle set ft=groovy autocmd BufNewFile,BufRead Vagrantfile set ft=ruby autocmd BufNewFile,BufRead *.tss set ft=javascript autocmd BufNewFile,BufRead *.coffee set ft=coffee autocmd BufNewFile,BufRead Cakefile set ft=coffee " make commit messages formatted to 72 columns for optimal reading/history: autocmd BufNewFile,BufRead COMMIT_EDITMSG setlocal tw=72 fo=tc spell " get rid of any extra git fugitive buffers autocmd BufReadPost fugitive://* set bufhidden=delete autocmd FileType groovy setlocal ai endif "}}} " vim: set ai fdm=marker cms="%s: