[
  {
    "path": ".gitignore",
    "content": ".DS_Store\n*.pyc\n*._*\n.vim/\n"
  },
  {
    "path": ".vimrc",
    "content": "\" Modeline and Notes {\n\" vim: set sw=4 ts=4 sts=4 et tw=78 foldmarker={,} foldlevel=0 foldmethod=marker spell:\n\"\n\"                    __ _ _____              _\n\"         ___ _ __  / _/ |___ /      __   __(_)_ __ ___\n\"        / __| '_ \\| |_| | |_ \\ _____\\ \\ / /| | '_ ` _ \\\n\"        \\__ \\ |_) |  _| |___) |_____|\\ V / | | | | | | |\n\"        |___/ .__/|_| |_|____/        \\_/  |_|_| |_| |_|\n\"            |_|\n\"\n\"   This is the personal .vimrc file of Steve Francia.\n\"   While much of it is beneficial for general use, I would\n\"   recommend picking out the parts you want and understand.\n\"\n\"   You can find me at http://spf13.com\n\"\n\"   Copyright 2014 Steve Francia\n\"\n\"   Licensed under the Apache License, Version 2.0 (the \"License\");\n\"   you may not use this file except in compliance with the License.\n\"   You may obtain a copy of the License at\n\"\n\"       http://www.apache.org/licenses/LICENSE-2.0\n\"\n\"   Unless required by applicable law or agreed to in writing, software\n\"   distributed under the License is distributed on an \"AS IS\" BASIS,\n\"   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\"   See the License for the specific language governing permissions and\n\"   limitations under the License.\n\" }\n\n\" Environment {\n\n    \" Identify platform {\n        silent function! OSX()\n            return has('macunix')\n        endfunction\n        silent function! LINUX()\n            return has('unix') && !has('macunix') && !has('win32unix')\n        endfunction\n        silent function! WINDOWS()\n            return  (has('win32') || has('win64'))\n        endfunction\n    \" }\n\n    \" Basics {\n        set nocompatible        \" Must be first line\n        if !WINDOWS()\n            set shell=/bin/sh\n        endif\n    \" }\n\n    \" Windows Compatible {\n        \" On Windows, also use '.vim' instead of 'vimfiles'; this makes synchronization\n        \" across (heterogeneous) systems easier.\n        if WINDOWS()\n          set runtimepath=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after\n        endif\n    \" }\n    \n    \" Arrow Key Fix {\n        \" https://github.com/spf13/spf13-vim/issues/780\n        if &term[:4] == \"xterm\" || &term[:5] == 'screen' || &term[:3] == 'rxvt'\n            inoremap <silent> <C-[>OC <RIGHT>\n        endif\n    \" }\n\n\" }\n\n\" Use before config if available {\n    if filereadable(expand(\"~/.vimrc.before\"))\n        source ~/.vimrc.before\n    endif\n\" }\n\n\" Use bundles config {\n    if filereadable(expand(\"~/.vimrc.bundles\"))\n        source ~/.vimrc.bundles\n    endif\n\" }\n\n\" General {\n\n    set background=dark         \" Assume a dark background\n\n    \" Allow to trigger background\n    function! ToggleBG()\n        let s:tbg = &background\n        \" Inversion\n        if s:tbg == \"dark\"\n            set background=light\n        else\n            set background=dark\n        endif\n    endfunction\n    noremap <leader>bg :call ToggleBG()<CR>\n\n    \" if !has('gui')\n        \"set term=$TERM          \" Make arrow and other keys work\n    \" endif\n    filetype plugin indent on   \" Automatically detect file types.\n    syntax on                   \" Syntax highlighting\n    set mouse=a                 \" Automatically enable mouse usage\n    set mousehide               \" Hide the mouse cursor while typing\n    scriptencoding utf-8\n\n    if has('clipboard')\n        if has('unnamedplus')  \" When possible use + register for copy-paste\n            set clipboard=unnamed,unnamedplus\n        else         \" On mac and Windows, use * register for copy-paste\n            set clipboard=unnamed\n        endif\n    endif\n\n    \" Most prefer to automatically switch to the current file directory when\n    \" a new buffer is opened; to prevent this behavior, add the following to\n    \" your .vimrc.before.local file:\n    \"   let g:spf13_no_autochdir = 1\n    if !exists('g:spf13_no_autochdir')\n        autocmd BufEnter * if bufname(\"\") !~ \"^\\[A-Za-z0-9\\]*://\" | lcd %:p:h | endif\n        \" Always switch to the current file directory\n    endif\n\n    \"set autowrite                       \" Automatically write a file when leaving a modified buffer\n    set shortmess+=filmnrxoOtT          \" Abbrev. of messages (avoids 'hit enter')\n    set viewoptions=folds,options,cursor,unix,slash \" Better Unix / Windows compatibility\n    set virtualedit=onemore             \" Allow for cursor beyond last character\n    set history=1000                    \" Store a ton of history (default is 20)\n    set spell                           \" Spell checking on\n    set hidden                          \" Allow buffer switching without saving\n    set iskeyword-=.                    \" '.' is an end of word designator\n    set iskeyword-=#                    \" '#' is an end of word designator\n    set iskeyword-=-                    \" '-' is an end of word designator\n\n    \" Instead of reverting the cursor to the last position in the buffer, we\n    \" set it to the first line when editing a git commit message\n    au FileType gitcommit au! BufEnter COMMIT_EDITMSG call setpos('.', [0, 1, 1, 0])\n\n    \" http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session\n    \" Restore cursor to file position in previous editing session\n    \" To disable this, add the following to your .vimrc.before.local file:\n    \"   let g:spf13_no_restore_cursor = 1\n    if !exists('g:spf13_no_restore_cursor')\n        function! ResCur()\n            if line(\"'\\\"\") <= line(\"$\")\n                silent! normal! g`\"\n                return 1\n            endif\n        endfunction\n\n        augroup resCur\n            autocmd!\n            autocmd BufWinEnter * call ResCur()\n        augroup END\n    endif\n\n    \" Setting up the directories {\n        set backup                  \" Backups are nice ...\n        if has('persistent_undo')\n            set undofile                \" So is persistent undo ...\n            set undolevels=1000         \" Maximum number of changes that can be undone\n            set undoreload=10000        \" Maximum number lines to save for undo on a buffer reload\n        endif\n\n        \" To disable views add the following to your .vimrc.before.local file:\n        \"   let g:spf13_no_views = 1\n        if !exists('g:spf13_no_views')\n            \" Add exclusions to mkview and loadview\n            \" eg: *.*, svn-commit.tmp\n            let g:skipview_files = [\n                \\ '\\[example pattern\\]'\n                \\ ]\n        endif\n    \" }\n\n\" }\n\n\" Vim UI {\n\n    if !exists('g:override_spf13_bundles') && filereadable(expand(\"~/.vim/bundle/vim-colors-solarized/colors/solarized.vim\"))\n        let g:solarized_termcolors=256\n        let g:solarized_termtrans=1\n        let g:solarized_contrast=\"normal\"\n        let g:solarized_visibility=\"normal\"\n        color solarized             \" Load a colorscheme\n    endif\n\n    set tabpagemax=15               \" Only show 15 tabs\n    set showmode                    \" Display the current mode\n\n    set cursorline                  \" Highlight current line\n\n    highlight clear SignColumn      \" SignColumn should match background\n    highlight clear LineNr          \" Current line number row will have same background color in relative mode\n    \"highlight clear CursorLineNr    \" Remove highlight color from current line number\n\n    if has('cmdline_info')\n        set ruler                   \" Show the ruler\n        set rulerformat=%30(%=\\:b%n%y%m%r%w\\ %l,%c%V\\ %P%) \" A ruler on steroids\n        set showcmd                 \" Show partial commands in status line and\n                                    \" Selected characters/lines in visual mode\n    endif\n\n    if has('statusline')\n        set laststatus=2\n\n        \" Broken down into easily includeable segments\n        set statusline=%<%f\\                     \" Filename\n        set statusline+=%w%h%m%r                 \" Options\n        if !exists('g:override_spf13_bundles')\n            set statusline+=%{fugitive#statusline()} \" Git Hotness\n        endif\n        set statusline+=\\ [%{&ff}/%Y]            \" Filetype\n        set statusline+=\\ [%{getcwd()}]          \" Current dir\n        set statusline+=%=%-14.(%l,%c%V%)\\ %p%%  \" Right aligned file nav info\n    endif\n\n    set backspace=indent,eol,start  \" Backspace for dummies\n    set linespace=0                 \" No extra spaces between rows\n    set number                      \" Line numbers on\n    set showmatch                   \" Show matching brackets/parenthesis\n    set incsearch                   \" Find as you type search\n    set hlsearch                    \" Highlight search terms\n    set winminheight=0              \" Windows can be 0 line high\n    set ignorecase                  \" Case insensitive search\n    set smartcase                   \" Case sensitive when uc present\n    set wildmenu                    \" Show list instead of just completing\n    set wildmode=list:longest,full  \" Command <Tab> completion, list matches, then longest common part, then all.\n    set whichwrap=b,s,h,l,<,>,[,]   \" Backspace and cursor keys wrap too\n    set scrolljump=5                \" Lines to scroll when cursor leaves screen\n    set scrolloff=3                 \" Minimum lines to keep above and below cursor\n    set foldenable                  \" Auto fold code\n    set list\n    set listchars=tab:›\\ ,trail:•,extends:#,nbsp:. \" Highlight problematic whitespace\n\n\" }\n\n\" Formatting {\n\n    set nowrap                      \" Do not wrap long lines\n    set autoindent                  \" Indent at the same level of the previous line\n    set shiftwidth=4                \" Use indents of 4 spaces\n    set expandtab                   \" Tabs are spaces, not tabs\n    set tabstop=4                   \" An indentation every four columns\n    set softtabstop=4               \" Let backspace delete indent\n    set nojoinspaces                \" Prevents inserting two spaces after punctuation on a join (J)\n    set splitright                  \" Puts new vsplit windows to the right of the current\n    set splitbelow                  \" Puts new split windows to the bottom of the current\n    \"set matchpairs+=<:>             \" Match, to be used with %\n    set pastetoggle=<F12>           \" pastetoggle (sane indentation on pastes)\n    \"set comments=sl:/*,mb:*,elx:*/  \" auto format comment blocks\n    \" Remove trailing whitespaces and ^M chars\n    \" To disable the stripping of whitespace, add the following to your\n    \" .vimrc.before.local file:\n    \"   let g:spf13_keep_trailing_whitespace = 1\n    autocmd FileType c,cpp,java,go,php,javascript,puppet,python,rust,twig,xml,yml,perl,sql autocmd BufWritePre <buffer> if !exists('g:spf13_keep_trailing_whitespace') | call StripTrailingWhitespace() | endif\n    \"autocmd FileType go autocmd BufWritePre <buffer> Fmt\n    autocmd BufNewFile,BufRead *.html.twig set filetype=html.twig\n    autocmd FileType haskell,puppet,ruby,yml setlocal expandtab shiftwidth=2 softtabstop=2\n    \" preceding line best in a plugin but here for now.\n\n    autocmd BufNewFile,BufRead *.coffee set filetype=coffee\n\n    \" Workaround vim-commentary for Haskell\n    autocmd FileType haskell setlocal commentstring=--\\ %s\n    \" Workaround broken colour highlighting in Haskell\n    autocmd FileType haskell,rust setlocal nospell\n\n\" }\n\n\" Key (re)Mappings {\n\n    \" The default leader is '\\', but many people prefer ',' as it's in a standard\n    \" location. To override this behavior and set it back to '\\' (or any other\n    \" character) add the following to your .vimrc.before.local file:\n    \"   let g:spf13_leader='\\'\n    if !exists('g:spf13_leader')\n        let mapleader = ','\n    else\n        let mapleader=g:spf13_leader\n    endif\n    if !exists('g:spf13_localleader')\n        let maplocalleader = '_'\n    else\n        let maplocalleader=g:spf13_localleader\n    endif\n\n    \" The default mappings for editing and applying the spf13 configuration\n    \" are <leader>ev and <leader>sv respectively. Change them to your preference\n    \" by adding the following to your .vimrc.before.local file:\n    \"   let g:spf13_edit_config_mapping='<leader>ec'\n    \"   let g:spf13_apply_config_mapping='<leader>sc'\n    if !exists('g:spf13_edit_config_mapping')\n        let s:spf13_edit_config_mapping = '<leader>ev'\n    else\n        let s:spf13_edit_config_mapping = g:spf13_edit_config_mapping\n    endif\n    if !exists('g:spf13_apply_config_mapping')\n        let s:spf13_apply_config_mapping = '<leader>sv'\n    else\n        let s:spf13_apply_config_mapping = g:spf13_apply_config_mapping\n    endif\n\n    \" Easier moving in tabs and windows\n    \" The lines conflict with the default digraph mapping of <C-K>\n    \" If you prefer that functionality, add the following to your\n    \" .vimrc.before.local file:\n    \"   let g:spf13_no_easyWindows = 1\n    if !exists('g:spf13_no_easyWindows')\n        map <C-J> <C-W>j<C-W>_\n        map <C-K> <C-W>k<C-W>_\n        map <C-L> <C-W>l<C-W>_\n        map <C-H> <C-W>h<C-W>_\n    endif\n\n    \" Wrapped lines goes down/up to next row, rather than next line in file.\n    noremap j gj\n    noremap k gk\n\n    \" End/Start of line motion keys act relative to row/wrap width in the\n    \" presence of `:set wrap`, and relative to line for `:set nowrap`.\n    \" Default vim behaviour is to act relative to text line in both cases\n    \" If you prefer the default behaviour, add the following to your\n    \" .vimrc.before.local file:\n    \"   let g:spf13_no_wrapRelMotion = 1\n    if !exists('g:spf13_no_wrapRelMotion')\n        \" Same for 0, home, end, etc\n        function! WrapRelativeMotion(key, ...)\n            let vis_sel=\"\"\n            if a:0\n                let vis_sel=\"gv\"\n            endif\n            if &wrap\n                execute \"normal!\" vis_sel . \"g\" . a:key\n            else\n                execute \"normal!\" vis_sel . a:key\n            endif\n        endfunction\n\n        \" Map g* keys in Normal, Operator-pending, and Visual+select\n        noremap $ :call WrapRelativeMotion(\"$\")<CR>\n        noremap <End> :call WrapRelativeMotion(\"$\")<CR>\n        noremap 0 :call WrapRelativeMotion(\"0\")<CR>\n        noremap <Home> :call WrapRelativeMotion(\"0\")<CR>\n        noremap ^ :call WrapRelativeMotion(\"^\")<CR>\n        \" Overwrite the operator pending $/<End> mappings from above\n        \" to force inclusive motion with :execute normal!\n        onoremap $ v:call WrapRelativeMotion(\"$\")<CR>\n        onoremap <End> v:call WrapRelativeMotion(\"$\")<CR>\n        \" Overwrite the Visual+select mode mappings from above\n        \" to ensure the correct vis_sel flag is passed to function\n        vnoremap $ :<C-U>call WrapRelativeMotion(\"$\", 1)<CR>\n        vnoremap <End> :<C-U>call WrapRelativeMotion(\"$\", 1)<CR>\n        vnoremap 0 :<C-U>call WrapRelativeMotion(\"0\", 1)<CR>\n        vnoremap <Home> :<C-U>call WrapRelativeMotion(\"0\", 1)<CR>\n        vnoremap ^ :<C-U>call WrapRelativeMotion(\"^\", 1)<CR>\n    endif\n\n    \" The following two lines conflict with moving to top and\n    \" bottom of the screen\n    \" If you prefer that functionality, add the following to your\n    \" .vimrc.before.local file:\n    \"   let g:spf13_no_fastTabs = 1\n    if !exists('g:spf13_no_fastTabs')\n        map <S-H> gT\n        map <S-L> gt\n    endif\n\n    \" Stupid shift key fixes\n    if !exists('g:spf13_no_keyfixes')\n        if has(\"user_commands\")\n            command! -bang -nargs=* -complete=file E e<bang> <args>\n            command! -bang -nargs=* -complete=file W w<bang> <args>\n            command! -bang -nargs=* -complete=file Wq wq<bang> <args>\n            command! -bang -nargs=* -complete=file WQ wq<bang> <args>\n            command! -bang Wa wa<bang>\n            command! -bang WA wa<bang>\n            command! -bang Q q<bang>\n            command! -bang QA qa<bang>\n            command! -bang Qa qa<bang>\n        endif\n\n        cmap Tabe tabe\n    endif\n\n    \" Yank from the cursor to the end of the line, to be consistent with C and D.\n    nnoremap Y y$\n\n    \" Code folding options\n    nmap <leader>f0 :set foldlevel=0<CR>\n    nmap <leader>f1 :set foldlevel=1<CR>\n    nmap <leader>f2 :set foldlevel=2<CR>\n    nmap <leader>f3 :set foldlevel=3<CR>\n    nmap <leader>f4 :set foldlevel=4<CR>\n    nmap <leader>f5 :set foldlevel=5<CR>\n    nmap <leader>f6 :set foldlevel=6<CR>\n    nmap <leader>f7 :set foldlevel=7<CR>\n    nmap <leader>f8 :set foldlevel=8<CR>\n    nmap <leader>f9 :set foldlevel=9<CR>\n\n    \" Most prefer to toggle search highlighting rather than clear the current\n    \" search results. To clear search highlighting rather than toggle it on\n    \" and off, add the following to your .vimrc.before.local file:\n    \"   let g:spf13_clear_search_highlight = 1\n    if exists('g:spf13_clear_search_highlight')\n        nmap <silent> <leader>/ :nohlsearch<CR>\n    else\n        nmap <silent> <leader>/ :set invhlsearch<CR>\n    endif\n\n\n    \" Find merge conflict markers\n    map <leader>fc /\\v^[<\\|=>]{7}( .*\\|$)<CR>\n\n    \" Shortcuts\n    \" Change Working Directory to that of the current file\n    cmap cwd lcd %:p:h\n    cmap cd. lcd %:p:h\n\n    \" Visual shifting (does not exit Visual mode)\n    vnoremap < <gv\n    vnoremap > >gv\n\n    \" Allow using the repeat operator with a visual selection (!)\n    \" http://stackoverflow.com/a/8064607/127816\n    vnoremap . :normal .<CR>\n\n    \" For when you forget to sudo.. Really Write the file.\n    cmap w!! w !sudo tee % >/dev/null\n\n    \" Some helpers to edit mode\n    \" http://vimcasts.org/e/14\n    cnoremap %% <C-R>=fnameescape(expand('%:h')).'/'<cr>\n    map <leader>ew :e %%\n    map <leader>es :sp %%\n    map <leader>ev :vsp %%\n    map <leader>et :tabe %%\n\n    \" Adjust viewports to the same size\n    map <Leader>= <C-w>=\n\n    \" Map <Leader>ff to display all lines with keyword under cursor\n    \" and ask which one to jump to\n    nmap <Leader>ff [I:let nr = input(\"Which one: \")<Bar>exe \"normal \" . nr .\"[\\t\"<CR>\n\n    \" Easier horizontal scrolling\n    map zl zL\n    map zh zH\n\n    \" Easier formatting\n    nnoremap <silent> <leader>q gwip\n\n    \" FIXME: Revert this f70be548\n    \" fullscreen mode for GVIM and Terminal, need 'wmctrl' in you PATH\n    map <silent> <F11> :call system(\"wmctrl -ir \" . v:windowid . \" -b toggle,fullscreen\")<CR>\n\n\" }\n\n\" Plugins {\n\n    \" GoLang {\n        if count(g:spf13_bundle_groups, 'go')\n            let g:go_highlight_functions = 1\n            let g:go_highlight_methods = 1\n            let g:go_highlight_structs = 1\n            let g:go_highlight_operators = 1\n            let g:go_highlight_build_constraints = 1\n            let g:go_fmt_command = \"goimports\"\n            let g:syntastic_go_checkers = ['golint', 'govet', 'errcheck']\n            let g:syntastic_mode_map = { 'mode': 'active', 'passive_filetypes': ['go'] }\n            au FileType go nmap <Leader>s <Plug>(go-implements)\n            au FileType go nmap <Leader>i <Plug>(go-info)\n            au FileType go nmap <Leader>e <Plug>(go-rename)\n            au FileType go nmap <leader>r <Plug>(go-run)\n            au FileType go nmap <leader>b <Plug>(go-build)\n            au FileType go nmap <leader>t <Plug>(go-test)\n            au FileType go nmap <Leader>gd <Plug>(go-doc)\n            au FileType go nmap <Leader>gv <Plug>(go-doc-vertical)\n            au FileType go nmap <leader>co <Plug>(go-coverage)\n        endif\n        \" }\n\n\n    \" TextObj Sentence {\n        if count(g:spf13_bundle_groups, 'writing')\n            augroup textobj_sentence\n              autocmd!\n              autocmd FileType markdown call textobj#sentence#init()\n              autocmd FileType textile call textobj#sentence#init()\n              autocmd FileType text call textobj#sentence#init()\n            augroup END\n        endif\n    \" }\n\n    \" TextObj Quote {\n        if count(g:spf13_bundle_groups, 'writing')\n            augroup textobj_quote\n                autocmd!\n                autocmd FileType markdown call textobj#quote#init()\n                autocmd FileType textile call textobj#quote#init()\n                autocmd FileType text call textobj#quote#init({'educate': 0})\n            augroup END\n        endif\n    \" }\n\n    \" PIV {\n        if isdirectory(expand(\"~/.vim/bundle/PIV\"))\n            let g:DisableAutoPHPFolding = 0\n            let g:PIVAutoClose = 0\n        endif\n    \" }\n\n    \" Misc {\n        if isdirectory(expand(\"~/.vim/bundle/nerdtree\"))\n            let g:NERDShutUp=1\n        endif\n        if isdirectory(expand(\"~/.vim/bundle/matchit.zip\"))\n            let b:match_ignorecase = 1\n        endif\n    \" }\n\n    \" OmniComplete {\n        \" To disable omni complete, add the following to your .vimrc.before.local file:\n        \"   let g:spf13_no_omni_complete = 1\n        if !exists('g:spf13_no_omni_complete')\n            if has(\"autocmd\") && exists(\"+omnifunc\")\n                autocmd Filetype *\n                    \\if &omnifunc == \"\" |\n                    \\setlocal omnifunc=syntaxcomplete#Complete |\n                    \\endif\n            endif\n\n            hi Pmenu  guifg=#000000 guibg=#F8F8F8 ctermfg=black ctermbg=Lightgray\n            hi PmenuSbar  guifg=#8A95A7 guibg=#F8F8F8 gui=NONE ctermfg=darkcyan ctermbg=lightgray cterm=NONE\n            hi PmenuThumb  guifg=#F8F8F8 guibg=#8A95A7 gui=NONE ctermfg=lightgray ctermbg=darkcyan cterm=NONE\n\n            \" Some convenient mappings\n            \"inoremap <expr> <Esc>      pumvisible() ? \"\\<C-e>\" : \"\\<Esc>\"\n            if exists('g:spf13_map_cr_omni_complete')\n                inoremap <expr> <CR>     pumvisible() ? \"\\<C-y>\" : \"\\<CR>\"\n            endif\n            inoremap <expr> <Down>     pumvisible() ? \"\\<C-n>\" : \"\\<Down>\"\n            inoremap <expr> <Up>       pumvisible() ? \"\\<C-p>\" : \"\\<Up>\"\n            inoremap <expr> <C-d>      pumvisible() ? \"\\<PageDown>\\<C-p>\\<C-n>\" : \"\\<C-d>\"\n            inoremap <expr> <C-u>      pumvisible() ? \"\\<PageUp>\\<C-p>\\<C-n>\" : \"\\<C-u>\"\n\n            \" Automatically open and close the popup menu / preview window\n            au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif\n            set completeopt=menu,preview,longest\n        endif\n    \" }\n\n    \" Ctags {\n        set tags=./tags;/,~/.vimtags\n\n        \" Make tags placed in .git/tags file available in all levels of a repository\n        let gitroot = substitute(system('git rev-parse --show-toplevel'), '[\\n\\r]', '', 'g')\n        if gitroot != ''\n            let &tags = &tags . ',' . gitroot . '/.git/tags'\n        endif\n    \" }\n\n    \" AutoCloseTag {\n        \" Make it so AutoCloseTag works for xml and xhtml files as well\n        au FileType xhtml,xml ru ftplugin/html/autoclosetag.vim\n        nmap <Leader>ac <Plug>ToggleAutoCloseMappings\n    \" }\n\n    \" SnipMate {\n        \" Setting the author var\n        \" If forking, please overwrite in your .vimrc.local file\n        let g:snips_author = 'Steve Francia <steve.francia@gmail.com>'\n    \" }\n\n    \" NerdTree {\n        if isdirectory(expand(\"~/.vim/bundle/nerdtree\"))\n            map <C-e> <plug>NERDTreeTabsToggle<CR>\n            map <leader>e :NERDTreeFind<CR>\n            nmap <leader>nt :NERDTreeFind<CR>\n\n            let NERDTreeShowBookmarks=1\n            let NERDTreeIgnore=['\\.py[cd]$', '\\~$', '\\.swo$', '\\.swp$', '^\\.git$', '^\\.hg$', '^\\.svn$', '\\.bzr$']\n            let NERDTreeChDirMode=0\n            let NERDTreeQuitOnOpen=1\n            let NERDTreeMouseMode=2\n            let NERDTreeShowHidden=1\n            let NERDTreeKeepTreeInNewTab=1\n            let g:nerdtree_tabs_open_on_gui_startup=0\n        endif\n    \" }\n\n    \" Tabularize {\n        if isdirectory(expand(\"~/.vim/bundle/tabular\"))\n            nmap <Leader>a& :Tabularize /&<CR>\n            vmap <Leader>a& :Tabularize /&<CR>\n            nmap <Leader>a= :Tabularize /^[^=]*\\zs=<CR>\n            vmap <Leader>a= :Tabularize /^[^=]*\\zs=<CR>\n            nmap <Leader>a=> :Tabularize /=><CR>\n            vmap <Leader>a=> :Tabularize /=><CR>\n            nmap <Leader>a: :Tabularize /:<CR>\n            vmap <Leader>a: :Tabularize /:<CR>\n            nmap <Leader>a:: :Tabularize /:\\zs<CR>\n            vmap <Leader>a:: :Tabularize /:\\zs<CR>\n            nmap <Leader>a, :Tabularize /,<CR>\n            vmap <Leader>a, :Tabularize /,<CR>\n            nmap <Leader>a,, :Tabularize /,\\zs<CR>\n            vmap <Leader>a,, :Tabularize /,\\zs<CR>\n            nmap <Leader>a<Bar> :Tabularize /<Bar><CR>\n            vmap <Leader>a<Bar> :Tabularize /<Bar><CR>\n        endif\n    \" }\n\n    \" Session List {\n        set sessionoptions=blank,buffers,curdir,folds,tabpages,winsize\n        if isdirectory(expand(\"~/.vim/bundle/sessionman.vim/\"))\n            nmap <leader>sl :SessionList<CR>\n            nmap <leader>ss :SessionSave<CR>\n            nmap <leader>sc :SessionClose<CR>\n        endif\n    \" }\n\n    \" JSON {\n        nmap <leader>jt <Esc>:%!python -m json.tool<CR><Esc>:set filetype=json<CR>\n        let g:vim_json_syntax_conceal = 0\n    \" }\n\n    \" PyMode {\n        \" Disable if python support not present\n        if !has('python') && !has('python3')\n            let g:pymode = 0\n        endif\n\n        if isdirectory(expand(\"~/.vim/bundle/python-mode\"))\n            let g:pymode_lint_checkers = ['pyflakes']\n            let g:pymode_trim_whitespaces = 0\n            let g:pymode_options = 0\n            let g:pymode_rope = 0\n        endif\n    \" }\n\n    \" ctrlp {\n        if isdirectory(expand(\"~/.vim/bundle/ctrlp.vim/\"))\n            let g:ctrlp_working_path_mode = 'ra'\n            nnoremap <silent> <D-t> :CtrlP<CR>\n            nnoremap <silent> <D-r> :CtrlPMRU<CR>\n            let g:ctrlp_custom_ignore = {\n                \\ 'dir':  '\\.git$\\|\\.hg$\\|\\.svn$',\n                \\ 'file': '\\.exe$\\|\\.so$\\|\\.dll$\\|\\.pyc$' }\n\n            if executable('ag')\n                let s:ctrlp_fallback = 'ag %s --nocolor -l -g \"\"'\n            elseif executable('ack-grep')\n                let s:ctrlp_fallback = 'ack-grep %s --nocolor -f'\n            elseif executable('ack')\n                let s:ctrlp_fallback = 'ack %s --nocolor -f'\n            \" On Windows use \"dir\" as fallback command.\n            elseif WINDOWS()\n                let s:ctrlp_fallback = 'dir %s /-n /b /s /a-d'\n            else\n                let s:ctrlp_fallback = 'find %s -type f'\n            endif\n            if exists(\"g:ctrlp_user_command\")\n                unlet g:ctrlp_user_command\n            endif\n            let g:ctrlp_user_command = {\n                \\ 'types': {\n                    \\ 1: ['.git', 'cd %s && git ls-files . --cached --exclude-standard --others'],\n                    \\ 2: ['.hg', 'hg --cwd %s locate -I .'],\n                \\ },\n                \\ 'fallback': s:ctrlp_fallback\n            \\ }\n\n            if isdirectory(expand(\"~/.vim/bundle/ctrlp-funky/\"))\n                \" CtrlP extensions\n                let g:ctrlp_extensions = ['funky']\n\n                \"funky\n                nnoremap <Leader>fu :CtrlPFunky<Cr>\n            endif\n        endif\n    \"}\n\n    \" TagBar {\n        if isdirectory(expand(\"~/.vim/bundle/tagbar/\"))\n            nnoremap <silent> <leader>tt :TagbarToggle<CR>\n        endif\n    \"}\n\n    \" Rainbow {\n        if isdirectory(expand(\"~/.vim/bundle/rainbow/\"))\n            let g:rainbow_active = 1 \"0 if you want to enable it later via :RainbowToggle\n        endif\n    \"}\n\n    \" Fugitive {\n        if isdirectory(expand(\"~/.vim/bundle/vim-fugitive/\"))\n            nnoremap <silent> <leader>gs :Gstatus<CR>\n            nnoremap <silent> <leader>gd :Gdiff<CR>\n            nnoremap <silent> <leader>gc :Gcommit<CR>\n            nnoremap <silent> <leader>gb :Gblame<CR>\n            nnoremap <silent> <leader>gl :Glog<CR>\n            nnoremap <silent> <leader>gp :Git push<CR>\n            nnoremap <silent> <leader>gr :Gread<CR>\n            nnoremap <silent> <leader>gw :Gwrite<CR>\n            nnoremap <silent> <leader>ge :Gedit<CR>\n            \" Mnemonic _i_nteractive\n            nnoremap <silent> <leader>gi :Git add -p %<CR>\n            nnoremap <silent> <leader>gg :SignifyToggle<CR>\n        endif\n    \"}\n\n    \" YouCompleteMe {\n        if count(g:spf13_bundle_groups, 'youcompleteme')\n            let g:acp_enableAtStartup = 0\n\n            \" enable completion from tags\n            let g:ycm_collect_identifiers_from_tags_files = 1\n\n            \" remap Ultisnips for compatibility for YCM\n            let g:UltiSnipsExpandTrigger = '<C-j>'\n            let g:UltiSnipsJumpForwardTrigger = '<C-j>'\n            let g:UltiSnipsJumpBackwardTrigger = '<C-k>'\n\n            \" Enable omni completion.\n            autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS\n            autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags\n            autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS\n            autocmd FileType python setlocal omnifunc=pythoncomplete#Complete\n            autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags\n            autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete\n            autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc\n\n            \" Haskell post write lint and check with ghcmod\n            \" $ `cabal install ghcmod` if missing and ensure\n            \" ~/.cabal/bin is in your $PATH.\n            if !executable(\"ghcmod\")\n                autocmd BufWritePost *.hs GhcModCheckAndLintAsync\n            endif\n\n            \" For snippet_complete marker.\n            if !exists(\"g:spf13_no_conceal\")\n                if has('conceal')\n                    set conceallevel=2 concealcursor=i\n                endif\n            endif\n\n            \" Disable the neosnippet preview candidate window\n            \" When enabled, there can be too much visual noise\n            \" especially when splits are used.\n            set completeopt-=preview\n        endif\n    \" }\n\n    \" neocomplete {\n        if count(g:spf13_bundle_groups, 'neocomplete')\n            let g:acp_enableAtStartup = 0\n            let g:neocomplete#enable_at_startup = 1\n            let g:neocomplete#enable_smart_case = 1\n            let g:neocomplete#enable_auto_delimiter = 1\n            let g:neocomplete#max_list = 15\n            let g:neocomplete#force_overwrite_completefunc = 1\n\n\n            \" Define dictionary.\n            let g:neocomplete#sources#dictionary#dictionaries = {\n                        \\ 'default' : '',\n                        \\ 'vimshell' : $HOME.'/.vimshell_hist',\n                        \\ 'scheme' : $HOME.'/.gosh_completions'\n                        \\ }\n\n            \" Define keyword.\n            if !exists('g:neocomplete#keyword_patterns')\n                let g:neocomplete#keyword_patterns = {}\n            endif\n            let g:neocomplete#keyword_patterns['default'] = '\\h\\w*'\n\n            \" Plugin key-mappings {\n                \" These two lines conflict with the default digraph mapping of <C-K>\n                if !exists('g:spf13_no_neosnippet_expand')\n                    imap <C-k> <Plug>(neosnippet_expand_or_jump)\n                    smap <C-k> <Plug>(neosnippet_expand_or_jump)\n                endif\n                if exists('g:spf13_noninvasive_completion')\n                    inoremap <CR> <CR>\n                    \" <ESC> takes you out of insert mode\n                    inoremap <expr> <Esc>   pumvisible() ? \"\\<C-y>\\<Esc>\" : \"\\<Esc>\"\n                    \" <CR> accepts first, then sends the <CR>\n                    inoremap <expr> <CR>    pumvisible() ? \"\\<C-y>\\<CR>\" : \"\\<CR>\"\n                    \" <Down> and <Up> cycle like <Tab> and <S-Tab>\n                    inoremap <expr> <Down>  pumvisible() ? \"\\<C-n>\" : \"\\<Down>\"\n                    inoremap <expr> <Up>    pumvisible() ? \"\\<C-p>\" : \"\\<Up>\"\n                    \" Jump up and down the list\n                    inoremap <expr> <C-d>   pumvisible() ? \"\\<PageDown>\\<C-p>\\<C-n>\" : \"\\<C-d>\"\n                    inoremap <expr> <C-u>   pumvisible() ? \"\\<PageUp>\\<C-p>\\<C-n>\" : \"\\<C-u>\"\n                else\n                    \" <C-k> Complete Snippet\n                    \" <C-k> Jump to next snippet point\n                    imap <silent><expr><C-k> neosnippet#expandable() ?\n                                \\ \"\\<Plug>(neosnippet_expand_or_jump)\" : (pumvisible() ?\n                                \\ \"\\<C-e>\" : \"\\<Plug>(neosnippet_expand_or_jump)\")\n                    smap <TAB> <Right><Plug>(neosnippet_jump_or_expand)\n\n                    inoremap <expr><C-g> neocomplete#undo_completion()\n                    inoremap <expr><C-l> neocomplete#complete_common_string()\n                    \"inoremap <expr><CR> neocomplete#complete_common_string()\n\n                    \" <CR>: close popup\n                    \" <s-CR>: close popup and save indent.\n                    inoremap <expr><s-CR> pumvisible() ? neocomplete#smart_close_popup().\"\\<CR>\" : \"\\<CR>\"\n\n                    function! CleverCr()\n                        if pumvisible()\n                            if neosnippet#expandable()\n                                let exp = \"\\<Plug>(neosnippet_expand)\"\n                                return exp . neocomplete#smart_close_popup()\n                            else\n                                return neocomplete#smart_close_popup()\n                            endif\n                        else\n                            return \"\\<CR>\"\n                        endif\n                    endfunction\n\n                    \" <CR> close popup and save indent or expand snippet\n                    imap <expr> <CR> CleverCr()\n                    \" <C-h>, <BS>: close popup and delete backword char.\n                    inoremap <expr><BS> neocomplete#smart_close_popup().\"\\<C-h>\"\n                    inoremap <expr><C-y> neocomplete#smart_close_popup()\n                endif\n                \" <TAB>: completion.\n                inoremap <expr><TAB> pumvisible() ? \"\\<C-n>\" : \"\\<TAB>\"\n                inoremap <expr><S-TAB> pumvisible() ? \"\\<C-p>\" : \"\\<TAB>\"\n\n                \" Courtesy of Matteo Cavalleri\n\n                function! CleverTab()\n                    if pumvisible()\n                        return \"\\<C-n>\"\n                    endif\n                    let substr = strpart(getline('.'), 0, col('.') - 1)\n                    let substr = matchstr(substr, '[^ \\t]*$')\n                    if strlen(substr) == 0\n                        \" nothing to match on empty string\n                        return \"\\<Tab>\"\n                    else\n                        \" existing text matching\n                        if neosnippet#expandable_or_jumpable()\n                            return \"\\<Plug>(neosnippet_expand_or_jump)\"\n                        else\n                            return neocomplete#start_manual_complete()\n                        endif\n                    endif\n                endfunction\n\n                imap <expr> <Tab> CleverTab()\n            \" }\n\n            \" Enable heavy omni completion.\n            if !exists('g:neocomplete#sources#omni#input_patterns')\n                let g:neocomplete#sources#omni#input_patterns = {}\n            endif\n            let g:neocomplete#sources#omni#input_patterns.php = '[^. \\t]->\\h\\w*\\|\\h\\w*::'\n            let g:neocomplete#sources#omni#input_patterns.perl = '\\h\\w*->\\h\\w*\\|\\h\\w*::'\n            let g:neocomplete#sources#omni#input_patterns.c = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)'\n            let g:neocomplete#sources#omni#input_patterns.cpp = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\|\\h\\w*::'\n            let g:neocomplete#sources#omni#input_patterns.ruby = '[^. *\\t]\\.\\h\\w*\\|\\h\\w*::'\n    \" }\n    \" neocomplcache {\n        elseif count(g:spf13_bundle_groups, 'neocomplcache')\n            let g:acp_enableAtStartup = 0\n            let g:neocomplcache_enable_at_startup = 1\n            let g:neocomplcache_enable_camel_case_completion = 1\n            let g:neocomplcache_enable_smart_case = 1\n            let g:neocomplcache_enable_underbar_completion = 1\n            let g:neocomplcache_enable_auto_delimiter = 1\n            let g:neocomplcache_max_list = 15\n            let g:neocomplcache_force_overwrite_completefunc = 1\n\n            \" Define dictionary.\n            let g:neocomplcache_dictionary_filetype_lists = {\n                        \\ 'default' : '',\n                        \\ 'vimshell' : $HOME.'/.vimshell_hist',\n                        \\ 'scheme' : $HOME.'/.gosh_completions'\n                        \\ }\n\n            \" Define keyword.\n            if !exists('g:neocomplcache_keyword_patterns')\n                let g:neocomplcache_keyword_patterns = {}\n            endif\n            let g:neocomplcache_keyword_patterns._ = '\\h\\w*'\n\n            \" Plugin key-mappings {\n                \" These two lines conflict with the default digraph mapping of <C-K>\n                imap <C-k> <Plug>(neosnippet_expand_or_jump)\n                smap <C-k> <Plug>(neosnippet_expand_or_jump)\n                if exists('g:spf13_noninvasive_completion')\n                    inoremap <CR> <CR>\n                    \" <ESC> takes you out of insert mode\n                    inoremap <expr> <Esc>   pumvisible() ? \"\\<C-y>\\<Esc>\" : \"\\<Esc>\"\n                    \" <CR> accepts first, then sends the <CR>\n                    inoremap <expr> <CR>    pumvisible() ? \"\\<C-y>\\<CR>\" : \"\\<CR>\"\n                    \" <Down> and <Up> cycle like <Tab> and <S-Tab>\n                    inoremap <expr> <Down>  pumvisible() ? \"\\<C-n>\" : \"\\<Down>\"\n                    inoremap <expr> <Up>    pumvisible() ? \"\\<C-p>\" : \"\\<Up>\"\n                    \" Jump up and down the list\n                    inoremap <expr> <C-d>   pumvisible() ? \"\\<PageDown>\\<C-p>\\<C-n>\" : \"\\<C-d>\"\n                    inoremap <expr> <C-u>   pumvisible() ? \"\\<PageUp>\\<C-p>\\<C-n>\" : \"\\<C-u>\"\n                else\n                    imap <silent><expr><C-k> neosnippet#expandable() ?\n                                \\ \"\\<Plug>(neosnippet_expand_or_jump)\" : (pumvisible() ?\n                                \\ \"\\<C-e>\" : \"\\<Plug>(neosnippet_expand_or_jump)\")\n                    smap <TAB> <Right><Plug>(neosnippet_jump_or_expand)\n\n                    inoremap <expr><C-g> neocomplcache#undo_completion()\n                    inoremap <expr><C-l> neocomplcache#complete_common_string()\n                    \"inoremap <expr><CR> neocomplcache#complete_common_string()\n\n                    function! CleverCr()\n                        if pumvisible()\n                            if neosnippet#expandable()\n                                let exp = \"\\<Plug>(neosnippet_expand)\"\n                                return exp . neocomplcache#close_popup()\n                            else\n                                return neocomplcache#close_popup()\n                            endif\n                        else\n                            return \"\\<CR>\"\n                        endif\n                    endfunction\n\n                    \" <CR> close popup and save indent or expand snippet\n                    imap <expr> <CR> CleverCr()\n\n                    \" <CR>: close popup\n                    \" <s-CR>: close popup and save indent.\n                    inoremap <expr><s-CR> pumvisible() ? neocomplcache#close_popup().\"\\<CR>\" : \"\\<CR>\"\n                    \"inoremap <expr><CR> pumvisible() ? neocomplcache#close_popup() : \"\\<CR>\"\n\n                    \" <C-h>, <BS>: close popup and delete backword char.\n                    inoremap <expr><BS> neocomplcache#smart_close_popup().\"\\<C-h>\"\n                    inoremap <expr><C-y> neocomplcache#close_popup()\n                endif\n                \" <TAB>: completion.\n                inoremap <expr><TAB> pumvisible() ? \"\\<C-n>\" : \"\\<TAB>\"\n                inoremap <expr><S-TAB> pumvisible() ? \"\\<C-p>\" : \"\\<TAB>\"\n            \" }\n\n            \" Enable omni completion.\n            autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS\n            autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags\n            autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS\n            autocmd FileType python setlocal omnifunc=pythoncomplete#Complete\n            autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags\n            autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete\n            autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc\n\n            \" Enable heavy omni completion.\n            if !exists('g:neocomplcache_omni_patterns')\n                let g:neocomplcache_omni_patterns = {}\n            endif\n            let g:neocomplcache_omni_patterns.php = '[^. \\t]->\\h\\w*\\|\\h\\w*::'\n            let g:neocomplcache_omni_patterns.perl = '\\h\\w*->\\h\\w*\\|\\h\\w*::'\n            let g:neocomplcache_omni_patterns.c = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)'\n            let g:neocomplcache_omni_patterns.cpp = '[^.[:digit:] *\\t]\\%(\\.\\|->\\)\\|\\h\\w*::'\n            let g:neocomplcache_omni_patterns.ruby = '[^. *\\t]\\.\\h\\w*\\|\\h\\w*::'\n            let g:neocomplcache_omni_patterns.go = '\\h\\w*\\.\\?'\n    \" }\n    \" Normal Vim omni-completion {\n    \" To disable omni complete, add the following to your .vimrc.before.local file:\n    \"   let g:spf13_no_omni_complete = 1\n        elseif !exists('g:spf13_no_omni_complete')\n            \" Enable omni-completion.\n            autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS\n            autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags\n            autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS\n            autocmd FileType python setlocal omnifunc=pythoncomplete#Complete\n            autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags\n            autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete\n            autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc\n\n        endif\n    \" }\n\n    \" Snippets {\n        if count(g:spf13_bundle_groups, 'neocomplcache') ||\n                    \\ count(g:spf13_bundle_groups, 'neocomplete')\n\n            \" Use honza's snippets.\n            let g:neosnippet#snippets_directory='~/.vim/bundle/vim-snippets/snippets'\n\n            \" Enable neosnippet snipmate compatibility mode\n            let g:neosnippet#enable_snipmate_compatibility = 1\n\n            \" For snippet_complete marker.\n            if !exists(\"g:spf13_no_conceal\")\n                if has('conceal')\n                    set conceallevel=2 concealcursor=i\n                endif\n            endif\n\n            \" Enable neosnippets when using go\n            let g:go_snippet_engine = \"neosnippet\"\n\n            \" Disable the neosnippet preview candidate window\n            \" When enabled, there can be too much visual noise\n            \" especially when splits are used.\n            set completeopt-=preview\n        endif\n    \" }\n\n    \" FIXME: Isn't this for Syntastic to handle?\n    \" Haskell post write lint and check with ghcmod\n    \" $ `cabal install ghcmod` if missing and ensure\n    \" ~/.cabal/bin is in your $PATH.\n    if !executable(\"ghcmod\")\n        autocmd BufWritePost *.hs GhcModCheckAndLintAsync\n    endif\n\n    \" UndoTree {\n        if isdirectory(expand(\"~/.vim/bundle/undotree/\"))\n            nnoremap <Leader>u :UndotreeToggle<CR>\n            \" If undotree is opened, it is likely one wants to interact with it.\n            let g:undotree_SetFocusWhenToggle=1\n        endif\n    \" }\n\n    \" indent_guides {\n        if isdirectory(expand(\"~/.vim/bundle/vim-indent-guides/\"))\n            let g:indent_guides_start_level = 2\n            let g:indent_guides_guide_size = 1\n            let g:indent_guides_enable_on_vim_startup = 1\n        endif\n    \" }\n\n    \" Wildfire {\n    let g:wildfire_objects = {\n                \\ \"*\" : [\"i'\", 'i\"', \"i)\", \"i]\", \"i}\", \"ip\"],\n                \\ \"html,xml\" : [\"at\"],\n                \\ }\n    \" }\n\n    \" vim-airline {\n        \" Set configuration options for the statusline plugin vim-airline.\n        \" Use the powerline theme and optionally enable powerline symbols.\n        \" To use the symbols , , , , , , and .in the statusline\n        \" segments add the following to your .vimrc.before.local file:\n        \"   let g:airline_powerline_fonts=1\n        \" If the previous symbols do not render for you then install a\n        \" powerline enabled font.\n\n        \" See `:echo g:airline_theme_map` for some more choices\n        \" Default in terminal vim is 'dark'\n        if isdirectory(expand(\"~/.vim/bundle/vim-airline-themes/\"))\n            if !exists('g:airline_theme')\n                let g:airline_theme = 'solarized'\n            endif\n            if !exists('g:airline_powerline_fonts')\n                \" Use the default set of separators with a few customizations\n                let g:airline_left_sep='›'  \" Slightly fancier than '>'\n                let g:airline_right_sep='‹' \" Slightly fancier than '<'\n            endif\n        endif\n    \" }\n\n\n\n\" }\n\n\" GUI Settings {\n\n    \" GVIM- (here instead of .gvimrc)\n    if has('gui_running')\n        set guioptions-=T           \" Remove the toolbar\n        set lines=40                \" 40 lines of text instead of 24\n        if !exists(\"g:spf13_no_big_font\")\n            if LINUX() && has(\"gui_running\")\n                set guifont=Andale\\ Mono\\ Regular\\ 12,Menlo\\ Regular\\ 11,Consolas\\ Regular\\ 12,Courier\\ New\\ Regular\\ 14\n            elseif OSX() && has(\"gui_running\")\n                set guifont=Andale\\ Mono\\ Regular:h12,Menlo\\ Regular:h11,Consolas\\ Regular:h12,Courier\\ New\\ Regular:h14\n            elseif WINDOWS() && has(\"gui_running\")\n                set guifont=Andale_Mono:h10,Menlo:h10,Consolas:h10,Courier_New:h10\n            endif\n        endif\n    else\n        if &term == 'xterm' || &term == 'screen'\n            set t_Co=256            \" Enable 256 colors to stop the CSApprox warning and make xterm vim shine\n        endif\n        \"set term=builtin_ansi       \" Make arrow and other keys work\n    endif\n\n\" }\n\n\" Functions {\n\n    \" Initialize directories {\n    function! InitializeDirectories()\n        let parent = $HOME\n        let prefix = 'vim'\n        let dir_list = {\n                    \\ 'backup': 'backupdir',\n                    \\ 'views': 'viewdir',\n                    \\ 'swap': 'directory' }\n\n        if has('persistent_undo')\n            let dir_list['undo'] = 'undodir'\n        endif\n\n        \" To specify a different directory in which to place the vimbackup,\n        \" vimviews, vimundo, and vimswap files/directories, add the following to\n        \" your .vimrc.before.local file:\n        \"   let g:spf13_consolidated_directory = <full path to desired directory>\n        \"   eg: let g:spf13_consolidated_directory = $HOME . '/.vim/'\n        if exists('g:spf13_consolidated_directory')\n            let common_dir = g:spf13_consolidated_directory . prefix\n        else\n            let common_dir = parent . '/.' . prefix\n        endif\n\n        for [dirname, settingname] in items(dir_list)\n            let directory = common_dir . dirname . '/'\n            if exists(\"*mkdir\")\n                if !isdirectory(directory)\n                    call mkdir(directory)\n                endif\n            endif\n            if !isdirectory(directory)\n                echo \"Warning: Unable to create backup directory: \" . directory\n                echo \"Try: mkdir -p \" . directory\n            else\n                let directory = substitute(directory, \" \", \"\\\\\\\\ \", \"g\")\n                exec \"set \" . settingname . \"=\" . directory\n            endif\n        endfor\n    endfunction\n    call InitializeDirectories()\n    \" }\n\n    \" Initialize NERDTree as needed {\n    function! NERDTreeInitAsNeeded()\n        redir => bufoutput\n        buffers!\n        redir END\n        let idx = stridx(bufoutput, \"NERD_tree\")\n        if idx > -1\n            NERDTreeMirror\n            NERDTreeFind\n            wincmd l\n        endif\n    endfunction\n    \" }\n\n    \" Strip whitespace {\n    function! StripTrailingWhitespace()\n        \" Preparation: save last search, and cursor position.\n        let _s=@/\n        let l = line(\".\")\n        let c = col(\".\")\n        \" do the business:\n        %s/\\s\\+$//e\n        \" clean up: restore previous search history, and cursor position\n        let @/=_s\n        call cursor(l, c)\n    endfunction\n    \" }\n\n    \" Shell command {\n    function! s:RunShellCommand(cmdline)\n        botright new\n\n        setlocal buftype=nofile\n        setlocal bufhidden=delete\n        setlocal nobuflisted\n        setlocal noswapfile\n        setlocal nowrap\n        setlocal filetype=shell\n        setlocal syntax=shell\n\n        call setline(1, a:cmdline)\n        call setline(2, substitute(a:cmdline, '.', '=', 'g'))\n        execute 'silent $read !' . escape(a:cmdline, '%#')\n        setlocal nomodifiable\n        1\n    endfunction\n\n    command! -complete=file -nargs=+ Shell call s:RunShellCommand(<q-args>)\n    \" e.g. Grep current file for <search_term>: Shell grep -Hn <search_term> %\n    \" }\n\n    function! s:IsSpf13Fork()\n        let s:is_fork = 0\n        let s:fork_files = [\"~/.vimrc.fork\", \"~/.vimrc.before.fork\", \"~/.vimrc.bundles.fork\"]\n        for fork_file in s:fork_files\n            if filereadable(expand(fork_file, \":p\"))\n                let s:is_fork = 1\n                break\n            endif\n        endfor\n        return s:is_fork\n    endfunction\n     \n    function! s:ExpandFilenameAndExecute(command, file)\n        execute a:command . \" \" . expand(a:file, \":p\")\n    endfunction\n     \n    function! s:EditSpf13Config()\n        call <SID>ExpandFilenameAndExecute(\"tabedit\", \"~/.vimrc\")\n        call <SID>ExpandFilenameAndExecute(\"vsplit\", \"~/.vimrc.before\")\n        call <SID>ExpandFilenameAndExecute(\"vsplit\", \"~/.vimrc.bundles\")\n     \n        execute bufwinnr(\".vimrc\") . \"wincmd w\"\n        call <SID>ExpandFilenameAndExecute(\"split\", \"~/.vimrc.local\")\n        wincmd l\n        call <SID>ExpandFilenameAndExecute(\"split\", \"~/.vimrc.before.local\")\n        wincmd l\n        call <SID>ExpandFilenameAndExecute(\"split\", \"~/.vimrc.bundles.local\")\n     \n        if <SID>IsSpf13Fork()\n            execute bufwinnr(\".vimrc\") . \"wincmd w\"\n            call <SID>ExpandFilenameAndExecute(\"split\", \"~/.vimrc.fork\")\n            wincmd l\n            call <SID>ExpandFilenameAndExecute(\"split\", \"~/.vimrc.before.fork\")\n            wincmd l\n            call <SID>ExpandFilenameAndExecute(\"split\", \"~/.vimrc.bundles.fork\")\n        endif\n     \n        execute bufwinnr(\".vimrc.local\") . \"wincmd w\"\n    endfunction\n     \n    execute \"noremap \" . s:spf13_edit_config_mapping \" :call <SID>EditSpf13Config()<CR>\"\n    execute \"noremap \" . s:spf13_apply_config_mapping . \" :source ~/.vimrc<CR>\"\n\" }\n\n\" Use fork vimrc if available {\n    if filereadable(expand(\"~/.vimrc.fork\"))\n        source ~/.vimrc.fork\n    endif\n\" }\n\n\" Use local vimrc if available {\n    if filereadable(expand(\"~/.vimrc.local\"))\n        source ~/.vimrc.local\n    endif\n\" }\n\n\" Use local gvimrc if available and gui is running {\n    if has('gui_running')\n        if filereadable(expand(\"~/.gvimrc.local\"))\n            source ~/.gvimrc.local\n        endif\n    endif\n\" }\n"
  },
  {
    "path": ".vimrc.before",
    "content": "\" Modeline and Notes {\n\" vim: set sw=4 ts=4 sts=4 et tw=78 foldmarker={,} foldlevel=0 foldmethod=marker:\n\"\n\"                    __ _ _____              _\n\"         ___ _ __  / _/ |___ /      __   __(_)_ __ ___\n\"        / __| '_ \\| |_| | |_ \\ _____\\ \\ / /| | '_ ` _ \\\n\"        \\__ \\ |_) |  _| |___) |_____|\\ V / | | | | | | |\n\"        |___/ .__/|_| |_|____/        \\_/  |_|_| |_| |_|\n\"            |_|\n\"\n\"   This is the personal .vimrc.before file of Steve Francia.\n\"   While much of it is beneficial for general use, I would\n\"   recommend picking out the parts you want and understand.\n\"\n\"   This file is for options which must be set *before* plugins\n\"   are loaded and the main .vimrc config is run. Most of these\n\"   are for preventing mappings or commands from being created.\n\"\n\"   You can find me at http://spf13.com\n\" }\n\n\" spf13 options {\n\n    \" Prevent automatically changing to open file directory\n    \"   let g:spf13_no_autochdir = 1\n\n    \" Disable views\n    \"   let g:spf13_no_views = 1\n\n    \" Leader keys\n    \"   let g:spf13_leader='\\'\n    \"   let g:spf13_localleader='_'\n\n    \" Disable easier moving in tabs and windows\n    \"   let g:spf13_no_easyWindows = 1\n\n    \" Disable wrap relative motion for start/end line motions\n    \"   let g:spf13_no_wrapRelMotion = 1\n\n    \" Disable fast tab navigation\n    \"   let g:spf13_no_fastTabs = 1\n\n    \" Clear search highlighting\n    \"   let g:spf13_clear_search_highlight = 1\n\n    \" Disable neosnippet expansion\n    \" This maps over <C-k> and does some Supertab\n    \" emulation with snippets\n    \"   let g:spf13_no_neosnippet_expand = 1\n\n    \" Disable whitespace stripping\n    \"   let g:spf13_keep_trailing_whitespace = 1\n\n    \" Enable powerline symbols\n    \"   let g:airline_powerline_fonts = 1\n\n    \" vim files directory\n    \"   let g:spf13_consolidated_directory = <full path to desired directory>\n    \"   eg: let g:spf13_consolidated_directory = $HOME . '/.vim/'\n\n    \" This makes the completion popup strictly passive.\n    \" Keypresses acts normally. <ESC> takes you of insert mode, words don't\n    \" automatically complete, pressing <CR> inserts a newline, etc. Iff the\n    \" menu is open, tab will cycle through it. If a snippet is selected, <C-k>\n    \" expands it and jumps between fields.\n    \"   let g:spf13_noninvasive_completion = 1\n\n    \" Don't turn conceallevel or concealcursor\n    \"   let g:spf13_no_conceal = 1\n\n    \" For some colorschemes, autocolor will not work (eg: 'desert', 'ir_black')\n    \" Indent guides will attempt to set your colors smartly. If you\n    \" want to control them yourself, do it here.\n    \"   let g:indent_guides_auto_colors = 0\n    \"   autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd  guibg=#212121 ctermbg=233\n    \"   autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=#404040 ctermbg=234\n\n    \" Leave the default font and size in GVim\n    \" To set your own font, do it from ~/.vimrc.local\n    \"   let g:spf13_no_big_font = 1\n\n    \" Disable  omni complete\n    \"   let g:spf13_no_omni_complete = 1\n\n    \" Don't create default mappings for multicursors\n    \" See :help multiple-cursors-mappings\n    \"   let g:multi_cursor_use_default_mapping=0\n    \"   let g:multi_cursor_next_key='<C-n>'\n    \"   let g:multi_cursor_prev_key='<C-p>'\n    \"   let g:multi_cursor_skip_key='<C-x>'\n    \"   let g:multi_cursor_quit_key='<Esc>'\n    \" Require a special keypress to enter multiple cursors mode\n    \"   let g:multi_cursor_start_key='+'\n\n    \" Mappings for editing/applying spf13 config\n    \"   let g:spf13_edit_config_mapping='<leader>ev'\n    \"   let g:spf13_apply_config_mapping='<leader>sv'\n    \n\" }\n\n\" Use fork before if available {\n    if filereadable(expand(\"~/.vimrc.before.fork\"))\n        source ~/.vimrc.before.fork\n    endif\n\" }\n\n\" Use local before if available {\n    if filereadable(expand(\"~/.vimrc.before.local\"))\n        source ~/.vimrc.before.local\n    endif\n\" }\n"
  },
  {
    "path": ".vimrc.bundles",
    "content": "\" Modeline and Notes {\n\" vim: set sw=4 ts=4 sts=4 et tw=78 foldmarker={,} foldlevel=0 foldmethod=marker spell:\n\"\n\"                    __ _ _____              _\n\"         ___ _ __  / _/ |___ /      __   __(_)_ __ ___\n\"        / __| '_ \\| |_| | |_ \\ _____\\ \\ / /| | '_ ` _ \\\n\"        \\__ \\ |_) |  _| |___) |_____|\\ V / | | | | | | |\n\"        |___/ .__/|_| |_|____/        \\_/  |_|_| |_| |_|\n\"            |_|\n\"\n\"   This is the personal .vimrc.bundles file of Steve Francia.\n\"   While much of it is beneficial for general use, I would\n\"   recommend picking out the parts you want and understand.\n\"\n\"   This file imports the various plugins of spf13. If you\n\"   wish to alter which groups are imported, see vimrc.before.\n\"   If you wish to add or remove individual bundles, create\n\"   ~/.vimrc.bundles.local and `Bundle` or `UnBundle` as needed\n\"   from there.\n\"\n\"   You can find me at http://spf13.com\n\" }\n\n\" Environment {\n\n    \" Basics {\n        set nocompatible        \" Must be first line\n        set background=dark     \" Assume a dark background\n    \" }\n\n    \" Windows Compatible {\n        \" On Windows, also use '.vim' instead of 'vimfiles'; this makes synchronization\n        \" across (heterogeneous) systems easier.\n        if has('win32') || has('win64')\n          set runtimepath=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after\n\n          \" Be nice and check for multi_byte even if the config requires\n          \" multi_byte support most of the time\n          if has(\"multi_byte\")\n            \" Windows cmd.exe still uses cp850. If Windows ever moved to\n            \" Powershell as the primary terminal, this would be utf-8\n            set termencoding=cp850\n            \" Let Vim use utf-8 internally, because many scripts require this\n            set encoding=utf-8\n            setglobal fileencoding=utf-8\n            \" Windows has traditionally used cp1252, so it's probably wise to\n            \" fallback into cp1252 instead of eg. iso-8859-15.\n            \" Newer Windows files might contain utf-8 or utf-16 LE so we might\n            \" want to try them first.\n            set fileencodings=ucs-bom,utf-8,utf-16le,cp1252,iso-8859-15\n          endif\n        endif\n    \" }\n\n    \" Setup Bundle Support {\n        \" The next three lines ensure that the ~/.vim/bundle/ system works\n        filetype off\n        set rtp+=~/.vim/bundle/vundle\n        call vundle#rc()\n    \" }\n\n    \" Add an UnBundle command {\n    function! UnBundle(arg, ...)\n      let bundle = vundle#config#init_bundle(a:arg, a:000)\n      call filter(g:vundle#bundles, 'v:val[\"name_spec\"] != \"' . a:arg . '\"')\n    endfunction\n\n    com! -nargs=+         UnBundle\n    \\ call UnBundle(<args>)\n    \" }\n\n\" }\n\n\" Bundles {\n\n    \" Deps {\n        Bundle 'gmarik/vundle'\n        Bundle 'MarcWeber/vim-addon-mw-utils'\n        Bundle 'tomtom/tlib_vim'\n        if executable('ag')\n            Bundle 'mileszs/ack.vim'\n            let g:ackprg = 'ag --nogroup --nocolor --column --smart-case'\n        elseif executable('ack-grep')\n            let g:ackprg=\"ack-grep -H --nocolor --nogroup --column\"\n            Bundle 'mileszs/ack.vim'\n        elseif executable('ack')\n            Bundle 'mileszs/ack.vim'\n        endif\n    \" }\n\n    \" In your .vimrc.before.local file\n    \" list only the plugin groups you will use\n    if !exists('g:spf13_bundle_groups')\n        let g:spf13_bundle_groups=['general', 'writing', 'neocomplete', 'programming', 'php', 'ruby', 'python', 'javascript', 'html', 'misc',]\n    endif\n\n    \" To override all the included bundles, add the following to your\n    \" .vimrc.bundles.local file:\n    \"   let g:override_spf13_bundles = 1\n    if !exists(\"g:override_spf13_bundles\")\n\n    \" General {\n        if count(g:spf13_bundle_groups, 'general')\n            Bundle 'scrooloose/nerdtree'\n            Bundle 'altercation/vim-colors-solarized'\n            Bundle 'spf13/vim-colors'\n            Bundle 'tpope/vim-surround'\n            Bundle 'tpope/vim-repeat'\n            Bundle 'rhysd/conflict-marker.vim'\n            Bundle 'jiangmiao/auto-pairs'\n            Bundle 'ctrlpvim/ctrlp.vim'\n            Bundle 'tacahiroy/ctrlp-funky'\n            Bundle 'terryma/vim-multiple-cursors'\n            Bundle 'vim-scripts/sessionman.vim'\n            Bundle 'matchit.zip'\n            if (has(\"python\") || has(\"python3\")) && exists('g:spf13_use_powerline') && !exists('g:spf13_use_old_powerline')\n                Bundle 'Lokaltog/powerline', {'rtp':'/powerline/bindings/vim'}\n            elseif exists('g:spf13_use_powerline') && exists('g:spf13_use_old_powerline')\n                Bundle 'Lokaltog/vim-powerline'\n            else\n                Bundle 'vim-airline/vim-airline'\n                Bundle 'vim-airline/vim-airline-themes'\n            endif\n            Bundle 'powerline/fonts'\n            Bundle 'bling/vim-bufferline'\n            Bundle 'easymotion/vim-easymotion'\n            Bundle 'jistr/vim-nerdtree-tabs'\n            Bundle 'flazz/vim-colorschemes'\n            Bundle 'mbbill/undotree'\n            Bundle 'nathanaelkane/vim-indent-guides'\n            if !exists('g:spf13_no_views')\n                Bundle 'vim-scripts/restore_view.vim'\n            endif\n            Bundle 'mhinz/vim-signify'\n            Bundle 'tpope/vim-abolish.git'\n            Bundle 'osyo-manga/vim-over'\n            Bundle 'kana/vim-textobj-user'\n            Bundle 'kana/vim-textobj-indent'\n            Bundle 'gcmt/wildfire.vim'\n        endif\n    \" }\n\n    \" Writing {\n        if count(g:spf13_bundle_groups, 'writing')\n            Bundle 'reedes/vim-litecorrect'\n            Bundle 'reedes/vim-textobj-sentence'\n            Bundle 'reedes/vim-textobj-quote'\n            Bundle 'reedes/vim-wordy'\n        endif\n    \" }\n\n    \" General Programming {\n        if count(g:spf13_bundle_groups, 'programming')\n            \" Pick one of the checksyntax, jslint, or syntastic\n            Bundle 'scrooloose/syntastic'\n            Bundle 'tpope/vim-fugitive'\n            Bundle 'mattn/webapi-vim'\n            Bundle 'mattn/gist-vim'\n            Bundle 'scrooloose/nerdcommenter'\n            Bundle 'tpope/vim-commentary'\n            Bundle 'godlygeek/tabular'\n            Bundle 'luochen1990/rainbow'\n            if executable('ctags')\n                Bundle 'majutsushi/tagbar'\n            endif\n        endif\n    \" }\n\n    \" Snippets & AutoComplete {\n        if count(g:spf13_bundle_groups, 'snipmate')\n            Bundle 'garbas/vim-snipmate'\n            Bundle 'honza/vim-snippets'\n            \" Source support_function.vim to support vim-snippets.\n            if filereadable(expand(\"~/.vim/bundle/vim-snippets/snippets/support_functions.vim\"))\n                source ~/.vim/bundle/vim-snippets/snippets/support_functions.vim\n            endif\n        elseif count(g:spf13_bundle_groups, 'youcompleteme')\n            Bundle 'Valloric/YouCompleteMe'\n            Bundle 'SirVer/ultisnips'\n            Bundle 'honza/vim-snippets'\n        elseif count(g:spf13_bundle_groups, 'neocomplcache')\n            Bundle 'Shougo/neocomplcache'\n            Bundle 'Shougo/neosnippet'\n            Bundle 'Shougo/neosnippet-snippets'\n            Bundle 'honza/vim-snippets'\n        elseif count(g:spf13_bundle_groups, 'neocomplete')\n            Bundle 'Shougo/neocomplete.vim.git'\n            Bundle 'Shougo/neosnippet'\n            Bundle 'Shougo/neosnippet-snippets'\n            Bundle 'honza/vim-snippets'\n        endif\n    \" }\n\n    \" PHP {\n        if count(g:spf13_bundle_groups, 'php')\n            Bundle 'spf13/PIV'\n            Bundle 'arnaud-lb/vim-php-namespace'\n            Bundle 'beyondwords/vim-twig'\n        endif\n    \" }\n\n    \" Python {\n        if count(g:spf13_bundle_groups, 'python')\n            \" Pick either python-mode or pyflakes & pydoc\n            Bundle 'klen/python-mode'\n            Bundle 'yssource/python.vim'\n            Bundle 'python_match.vim'\n            Bundle 'pythoncomplete'\n        endif\n    \" }\n\n    \" Javascript {\n        if count(g:spf13_bundle_groups, 'javascript')\n            Bundle 'elzr/vim-json'\n            Bundle 'groenewege/vim-less'\n            Bundle 'pangloss/vim-javascript'\n            Bundle 'briancollins/vim-jst'\n            Bundle 'kchmck/vim-coffee-script'\n        endif\n    \" }\n\n    \" Scala {\n        if count(g:spf13_bundle_groups, 'scala')\n            Bundle 'derekwyatt/vim-scala'\n            Bundle 'derekwyatt/vim-sbt'\n            Bundle 'xptemplate'\n        endif\n    \" }\n\n    \" Haskell {\n        if count(g:spf13_bundle_groups, 'haskell')\n            Bundle 'travitch/hasksyn'\n            Bundle 'dag/vim2hs'\n            Bundle 'Twinside/vim-haskellConceal'\n            Bundle 'Twinside/vim-haskellFold'\n            Bundle 'lukerandall/haskellmode-vim'\n            Bundle 'eagletmt/neco-ghc'\n            Bundle 'eagletmt/ghcmod-vim'\n            Bundle 'Shougo/vimproc.vim'\n            Bundle 'adinapoli/cumino'\n            Bundle 'bitc/vim-hdevtools'\n        endif\n    \" }\n\n    \" HTML {\n        if count(g:spf13_bundle_groups, 'html')\n            Bundle 'amirh/HTML-AutoCloseTag'\n            Bundle 'hail2u/vim-css3-syntax'\n            Bundle 'gorodinskiy/vim-coloresque'\n            Bundle 'tpope/vim-haml'\n            Bundle 'mattn/emmet-vim'\n        endif\n    \" }\n\n    \" Ruby {\n        if count(g:spf13_bundle_groups, 'ruby')\n            Bundle 'tpope/vim-rails'\n            let g:rubycomplete_buffer_loading = 1\n            \"let g:rubycomplete_classes_in_global = 1\n            \"let g:rubycomplete_rails = 1\n        endif\n    \" }\n\n    \" Puppet {\n        if count(g:spf13_bundle_groups, 'puppet')\n            Bundle 'rodjek/vim-puppet'\n        endif\n    \" }\n\n    \" Go Lang {\n        if count(g:spf13_bundle_groups, 'go')\n            \"Bundle 'Blackrush/vim-gocode'\n            Bundle 'fatih/vim-go'\n        endif\n    \" }\n\n    \" Elixir {\n        if count(g:spf13_bundle_groups, 'elixir')\n            Bundle 'elixir-lang/vim-elixir'\n            Bundle 'carlosgaldino/elixir-snippets'\n            Bundle 'mattreduce/vim-mix'\n        endif\n    \" }\n\n    \" Misc {\n        if count(g:spf13_bundle_groups, 'misc')\n            Bundle 'rust-lang/rust.vim'\n            Bundle 'tpope/vim-markdown'\n            Bundle 'spf13/vim-preview'\n            Bundle 'tpope/vim-cucumber'\n            Bundle 'cespare/vim-toml'\n            Bundle 'quentindecock/vim-cucumber-align-pipes'\n            Bundle 'saltstack/salt-vim'\n        endif\n    \" }\n\n    endif\n\n\" }\n\n\" Use fork bundles config if available {\n    if filereadable(expand(\"~/.vimrc.bundles.fork\"))\n        source ~/.vimrc.bundles.fork\n    endif\n\" }\n\n\" Use local bundles config if available {\n    if filereadable(expand(\"~/.vimrc.bundles.local\"))\n        source ~/.vimrc.bundles.local\n    endif\n\" }\n"
  },
  {
    "path": ".vimrc.bundles.default",
    "content": "\" Default Bundles {\n\n    \" Use before config if available {\n        if filereadable(expand(\"~/.vimrc.before\"))\n            source ~/.vimrc.before\n        endif\n    \" }\n\n    \" Use bundles config {\n        if filereadable(expand(\"~/.vimrc.bundles\"))\n            source ~/.vimrc.bundles\n        endif\n    \" }\n\" }\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2014 Steve Francia\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "README.markdown",
    "content": "# spf13-vim : Steve Francia's Vim Distribution\n\n                    __ _ _____              _\n         ___ _ __  / _/ |___ /      __   __(_)_ __ ___\n        / __| '_ \\| |_| | |_ \\ _____\\ \\ / /| | '_ ` _ \\\n        \\__ \\ |_) |  _| |___) |_____|\\ V / | | | | | | |\n        |___/ .__/|_| |_|____/        \\_/  |_|_| |_| |_|\n            |_|\n\nspf13-vim is a distribution of vim plugins and resources for Vim, Gvim and [MacVim].\n\nIt is a good starting point for anyone intending to use VIM for development running equally well on Windows, Linux, \\*nix and Mac.\n\nThe distribution is completely customisable using a `~/.vimrc.local`, `~/.vimrc.bundles.local`, and `~/.vimrc.before.local` Vim RC files.\n\n![spf13-vim image][spf13-vim-img]\n\nUnlike traditional VIM plugin structure, which similar to UNIX throws all files into common directories, making updating or disabling plugins a real mess, spf13-vim 3 uses the [Vundle] plugin management system to have a well organized vim directory (Similar to mac's app folders). Vundle also ensures that the latest versions of your plugins are installed and makes it easy to keep them up to date.\n\nGreat care has been taken to ensure that each plugin plays nicely with others, and optional configuration has been provided for what we believe is the most efficient use.\n\nLastly (and perhaps, most importantly) It is completely cross platform. It works well on Windows, Linux and OSX without any modifications or additional configurations. If you are using [MacVim] or Gvim additional features are enabled. So regardless of your environment just clone and run.\n\n# Installation\n## Requirements\nTo make all the plugins work, specifically [neocomplete](https://github.com/Shougo/neocomplete.vim), you need [vim with lua](https://github.com/Shougo/neocomplete.vim#requirements).\n\n## Linux, \\*nix, Mac OSX Installation\n\nThe easiest way to install spf13-vim is to use our [automatic installer](https://j.mp/spf13-vim3) by simply copying and pasting the following line into a terminal. This will install spf13-vim and backup your existing vim configuration. If you are upgrading from a prior version (before 3.0) this is also the recommended installation.\n\n*Requires Git 1.7+ and Vim 7.3+*\n\n```bash\n\n    curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh\n```\n\nIf you have a bash-compatible shell you can run the script directly:\n```bash\n\n    sh <(curl https://j.mp/spf13-vim3 -L)\n```\n\n## Installing on Windows\n\nOn Windows and \\*nix [Git] and [Curl] are required. Also, if you haven't done so already, you'll need to install [Vim].\nThe quickest option to install all three dependencies ([Git], [Curl], [Vim] and [spf13-vim]) is via [Chocolatey] NuGet. After installing [Chocolatey], execute the following commands on the _command prompt_:\n\n    C:\\> choco install spf13-vim\n\n_Note: The [spf13-vim package] will install Vim also!_\n\nIf you want to install [msysgit], [Curl] and [spf13-vim] individually, follow the directions below.\n\n### Installing dependencies\n\n#### Install [Vim]\n\nAfter the installation of Vim you must add a new directory to your environment variables path to make it work with the script installation of spf13.\n\nOpen Vim and write the following command, it will show the installed directory:\n\n    :echo $VIMRUNTIME\n    C:\\Program Files (X86)\\Vim\\vim74\n\nThen you need to add it to your environment variable path. After that try execute `vim` within command prompt (press Win-R, type `cmd`, press Enter) and you’ll see the default vim page.\n\n#### Install [msysgit]\n\nAfter installation try running `git --version` within _command prompt_ (press Win-R,  type `cmd`, press Enter) to make sure all good:\n\n    C:\\> git --version\n    git version 1.7.4.msysgit.0\n\n#### Setup [Curl]\n_Instructions blatently copied from vundle readme_\nInstalling Curl on Windows is easy as [Curl] is bundled with [msysgit]!\nBut before it can be used with [Vundle] it's required make `curl` run in _command prompt_.\nThe easiest way is to create `curl.cmd` with [this content](https://gist.github.com/912993)\n\n    @rem Do not use \"echo off\" to not affect any child calls.\n    @setlocal\n\n    @rem Get the abolute path to the parent directory, which is assumed to be the\n    @rem Git installation root.\n    @for /F \"delims=\" %%I in (\"%~dp0..\") do @set git_install_root=%%~fI\n    @set PATH=%git_install_root%\\bin;%git_install_root%\\mingw\\bin;%PATH%\n\n    @if not exist \"%HOME%\" @set HOME=%HOMEDRIVE%%HOMEPATH%\n    @if not exist \"%HOME%\" @set HOME=%USERPROFILE%\n\n    @curl.exe %*\n\n\nAnd copy it to `C:\\Program Files\\Git\\cmd\\curl.cmd`, assuming [msysgit] was installed to `c:\\Program Files\\Git`\n\nto verify all good, run:\n\n    C:\\> curl --version\n    curl 7.21.1 (i686-pc-mingw32) libcurl/7.21.1 OpenSSL/0.9.8k zlib/1.2.3\n    Protocols: dict file ftp ftps http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp\n    Features: Largefile NTLM SSL SSPI libz\n\n\n#### Installing spf13-vim on Windows\n\nThe easiest way is to download and run the spf13-vim-windows-install.cmd file. Remember to run this file in **Administrator Mode** if you want the symlinks to be created successfully.\n\n## Updating to the latest version\nThe simpliest (and safest) way to update is to simply rerun the installer. It will completely and non destructively upgrade to the latest version.\n\n```bash\n\n    curl https://j.mp/spf13-vim3 -L -o - | sh\n\n```\n\nAlternatively you can manually perform the following steps. If anything has changed with the structure of the configuration you will need to create the appropriate symlinks.\n\n```bash\n    cd $HOME/to/spf13-vim/\n    git pull\n    vim +BundleInstall! +BundleClean +q\n```\n\n### Fork me on GitHub\n\nI'm always happy to take pull requests from others. A good number of people are already [contributors] to [spf13-vim]. Go ahead and fork me.\n\n# A highly optimized .vimrc config file\n\n![spf13-vimrc image][spf13-vimrc-img]\n\nThe .vimrc file is suited to programming. It is extremely well organized and folds in sections.\nEach section is labeled and each option is commented.\n\nIt fixes many of the inconveniences of vanilla vim including\n\n * A single config can be used across Windows, Mac and linux\n * Eliminates swap and backup files from littering directories, preferring to store in a central location.\n * Fixes common typos like :W, :Q, etc\n * Setup a solid set of settings for Formatting (change to meet your needs)\n * Setup the interface to take advantage of vim's features including\n   * omnicomplete\n   * line numbers\n   * syntax highlighting\n   * A better ruler & status line\n   * & more\n * Configuring included plugins\n\n## Customization\n\nCreate `~/.vimrc.local` and `~/.gvimrc.local` for any local\ncustomizations.\n\nFor example, to override the default color schemes:\n\n```bash\n    echo colorscheme ir_black  >> ~/.vimrc.local\n```\n\n### Before File\n\nCreate a `~/.vimrc.before.local` file to define any customizations\nthat get loaded *before* the spf13-vim `.vimrc`.\n\nFor example, to prevent autocd into a file directory:\n```bash\n    echo let g:spf13_no_autochdir = 1 >> ~/.vimrc.before.local\n```\nFor a list of available spf13-vim specific customization options, look at the `~/.vimrc.before` file.\n\n\n### Fork Customization\n\nThere is an additional tier of customization available to those who want to maintain a\nfork of spf13-vim specialized for a particular group. These users can create `.vimrc.fork`\nand `.vimrc.bundles.fork` files in the root of their fork.  The load order for the configuration is:\n\n1. `.vimrc.before` - spf13-vim before configuration\n2. `.vimrc.before.fork` - fork before configuration\n3. `.vimrc.before.local` - before user configuration\n4. `.vimrc.bundles` - spf13-vim bundle configuration\n5. `.vimrc.bundles.fork` - fork bundle configuration\n6. `.vimrc.bundles.local` - local user bundle configuration\n6. `.vimrc` - spf13-vim vim configuration\n7. `.vimrc.fork` - fork vim configuration\n8. `.vimrc.local` - local user configuration\n\nSee `.vimrc.bundles` for specifics on what options can be set to override bundle configuration. See `.vimrc.before` for specifics\non what options can be overridden. Most vim configuration options should be set in your `.vimrc.fork` file, bundle configuration\nneeds to be set in your `.vimrc.bundles.fork` file.\n\nYou can specify the default bundles for your fork using `.vimrc.before.fork` file. Here is how to create an example `.vimrc.before.fork` file\nin a fork repo for the default bundles.\n```bash\n    echo let g:spf13_bundle_groups=[\\'general\\', \\'programming\\', \\'misc\\', \\'youcompleteme\\'] >> .vimrc.before.fork\n```\nOnce you have this file in your repo, only the bundles you specified will be installed during the first installation of your fork.\n\nYou may also want to update your `README.markdown` file so that the `bootstrap.sh` link points to your repository and your `bootstrap.sh`\nfile to pull down your fork.\n\nFor an example of a fork of spf13-vim that provides customization in this manner see [taxilian's fork](https://github.com/taxilian/spf13-vim).\n\n### Easily Editing Your Configuration\n\n`<Leader>ev` opens a new tab containing the .vimrc configuration files listed above. This makes it easier to get an overview of your\nconfiguration and make customizations.\n\n`<Leader>sv` sources the .vimrc file, instantly applying your customizations to the currently running vim instance.\n\nThese two mappings can themselves be customized by setting the following in .vimrc.before.local:\n```bash\nlet g:spf13_edit_config_mapping='<Leader>ev'\nlet g:spf13_apply_config_mapping='<Leader>sv'\n```\n\n# Plugins\n\nspf13-vim contains a curated set of popular vim plugins, colors, snippets and syntaxes. Great care has been made to ensure that these plugins play well together and have optimal configuration.\n\n## Adding new plugins\n\nCreate `~/.vimrc.bundles.local` for any additional bundles.\n\nTo add a new bundle, just add one line for each bundle you want to install. The line should start with the word \"Bundle\" followed by a string of either the vim.org project name or the githubusername/githubprojectname. For example, the github project [spf13/vim-colors](https://github.com/spf13/vim-colors) can be added with the following command\n\n```bash\n    echo Bundle \\'spf13/vim-colors\\' >> ~/.vimrc.bundles.local\n```\n\nOnce new plugins are added, they have to be installed.\n\n```bash\n    vim +BundleInstall! +BundleClean +q\n```\n\n## Removing (disabling) an included plugin\n\nCreate `~/.vimrc.local` if it doesn't already exist.\n\nAdd the UnBundle command to this line. It takes the same input as the Bundle line, so simply copy the line you want to disable and add 'Un' to the beginning.\n\nFor example, disabling the 'AutoClose' and 'scrooloose/syntastic' plugins\n\n```bash\n    echo UnBundle \\'AutoClose\\' >> ~/.vimrc.bundles.local\n    echo UnBundle \\'scrooloose/syntastic\\' >> ~/.vimrc.bundles.local\n```\n\n**Remember to run ':BundleClean!' after this to remove the existing directories**\n\n\nHere are a few of the plugins:\n\n\n## [Undotree]\n\nIf you undo changes and then make a new change, in most editors the changes you undid are gone forever, as their undo-history is a simple list.\nSince version 7.0 vim uses an undo-tree instead. If you make a new change after undoing changes, a new branch is created in that tree.\nCombined with persistent undo, this is nearly as flexible and safe as git ;-)\n\nUndotree makes that feature more accessible by creating a visual representation of said undo-tree.\n\n**QuickStart** Launch using `<Leader>u`.\n\n## [NERDTree]\n\nNERDTree is a file explorer plugin that provides \"project drawer\"\nfunctionality to your vim editing.  You can learn more about it with\n`:help NERDTree`.\n\n**QuickStart** Launch using `<Leader>e`.\n\n**Customizations**:\n\n* Use `<C-E>` to toggle NERDTree\n* Use `<leader>e` or `<leader>nt` to load NERDTreeFind which opens NERDTree where the current file is located.\n* Hide clutter ('\\.pyc', '\\.git', '\\.hg', '\\.svn', '\\.bzr')\n* Treat NERDTree more like a panel than a split.\n\n## [ctrlp]\nCtrlp replaces the Command-T plugin with a 100% viml plugin. It provides an intuitive and fast mechanism to load files from the file system (with regex and fuzzy find), from open buffers, and from recently used files.\n\n**QuickStart** Launch using `<c-p>`.\n\n## [Surround]\n\nThis plugin is a tool for dealing with pairs of \"surroundings.\"  Examples\nof surroundings include parentheses, quotes, and HTML tags.  They are\nclosely related to what Vim refers to as text-objects.  Provided\nare mappings to allow for removing, changing, and adding surroundings.\n\nDetails follow on the exact semantics, but first, consider the following\nexamples.  An asterisk (*) is used to denote the cursor position.\n\n      Old text                  Command     New text ~\n      \"Hello *world!\"           ds\"         Hello world!\n      [123+4*56]/2              cs])        (123+456)/2\n      \"Look ma, I'm *HTML!\"     cs\"<q>      <q>Look ma, I'm HTML!</q>\n      if *x>3 {                 ysW(        if ( x>3 ) {\n      my $str = *whee!;         vllllS'     my $str = 'whee!';\n\nFor instance, if the cursor was inside `\"foo bar\"`, you could type\n`cs\"'` to convert the text to `'foo bar'`.\n\nThere's a lot more, check it out at `:help surround`\n\n## [NERDCommenter]\n\nNERDCommenter allows you to wrangle your code comments, regardless of\nfiletype. View `help :NERDCommenter` or checkout my post on [NERDCommenter](http://spf13.com/post/vim-plugins-nerd-commenter).\n\n**QuickStart** Toggle comments using `<Leader>c<space>` in Visual or Normal mode.\n\n## [neocomplete]\n\nNeocomplete is an amazing autocomplete plugin with additional support for snippets. It can complete simulatiously from the dictionary, buffer, omnicomplete and snippets. This is the one true plugin that brings Vim autocomplete on par with the best editors.\n\n**QuickStart** Just start typing, it will autocomplete where possible\n\n**Customizations**:\n\n * Automatically present the autocomplete menu\n * Support tab and enter for autocomplete\n * `<C-k>` for completing snippets using [Neosnippet](https://github.com/Shougo/neosnippet.vim).\n\n![neocomplete image][autocomplete-img]\n\n## [YouCompleteMe]\n\nYouCompleteMe is another amazing completion engine. It is slightly more involved to set up as it contains a binary component that the user needs to compile before it will work. As a result of this however it is very fast.\n\nTo enable YouCompleteMe add `youcompleteme` to your list of groups by overriding it in your `.vimrc.before.local` like so: `let g:spf13_bundle_groups=['general', 'programming', 'misc', 'scala', 'youcompleteme']` This is just an example. Remember to choose the other groups you want here.\n\nOnce you have done this you will need to get Vundle to grab the latest code from git. You can do this by calling `:BundleInstall!`. You should see YouCompleteMe in the list.\n\nYou will now have the code in your bundles directory and can proceed to compile the core. Change to the directory it has been downloaded to. If you have a vanilla install then `cd ~/.spf13-vim-3/.vim/bundle/YouCompleteMe/` should do the trick. You should see a file in this directory called install.sh. There are a few options to consider before running the installer:\n\n  * Do you want clang support (if you don't know what this is then you likely don't need it)?\n    * Do you want to link against a local libclang or have the installer download the latest for you?\n  * Do you want support for c# via the omnisharp server?\n\nThe plugin is well documented on the site linked above. Be sure to give that a read and make sure you understand the options you require.\n\nFor java users wanting to use eclim be sure to add `let g:EclimCompletionMethod = 'omnifunc'` to your .vimrc.local.\n\n## [Syntastic]\n\nSyntastic is a syntax checking plugin that runs buffers through external syntax\ncheckers as they are saved and opened. If syntax errors are detected, the user\nis notified and is happy because they didn't have to compile their code or\nexecute their script to find them.\n\n## [AutoClose]\n\nAutoClose does what you expect. It's simple, if you open a bracket, paren, brace, quote,\netc, it automatically closes it. It handles curlys correctly and doesn't get in the\nway of double curlies for things like jinja and twig.\n\n## [Fugitive]\n\nFugitive adds pervasive git support to git directories in vim. For more\ninformation, use `:help fugitive`\n\nUse `:Gstatus` to view `git status` and type `-` on any file to stage or\nunstage it. Type `p` on a file to enter `git add -p` and stage specific\nhunks in the file.\n\nUse `:Gdiff` on an open file to see what changes have been made to that\nfile\n\n**QuickStart** `<leader>gs` to bring up git status\n\n**Customizations**:\n\n * `<leader>gs` :Gstatus<CR>\n * `<leader>gd` :Gdiff<CR>\n * `<leader>gc` :Gcommit<CR>\n * `<leader>gb` :Gblame<CR>\n * `<leader>gl` :Glog<CR>\n * `<leader>gp` :Git push<CR>\n * `<leader>gw` :Gwrite<CR>\n * :Git ___ will pass anything along to git.\n\n![fugitive image][fugitive-img]\n\n## [PIV]\n\nThe most feature complete and up to date PHP Integration for Vim with proper support for PHP 5.3+ including latest syntax, functions, better fold support, etc.\n\nPIV provides:\n\n * PHP 5.3 support\n * Auto generation of PHP Doc (,pd on (function, variable, class) definition line)\n * Autocomplete of classes, functions, variables, constants and language keywords\n * Better indenting\n * Full PHP documentation manual (hit K on any function for full docs)\n\n![php vim itegration image][phpmanual-img]\n\n## [Ack.vim]\n\nAck.vim uses ack to search inside the current directory for a pattern.\nYou can learn more about it with `:help Ack`\n\n**QuickStart** :Ack\n\n## [Tabularize]\n\nTabularize lets you align statements on their equal signs and other characters\n\n**Customizations**:\n\n * `<Leader>a= :Tabularize /=<CR>`\n * `<Leader>a: :Tabularize /:<CR>`\n * `<Leader>a:: :Tabularize /:\\zs<CR>`\n * `<Leader>a, :Tabularize /,<CR>`\n * `<Leader>a<Bar> :Tabularize /<Bar><CR>`\n\n## [Tagbar]\n\nspf13-vim includes the Tagbar plugin. This plugin requires exuberant-ctags and will automatically generate tags for your open files. It also provides a panel to navigate easily via tags\n\n**QuickStart** `CTRL-]` while the cursor is on a keyword (such as a function name) to jump to its definition.\n\n**Customizations**: spf13-vim binds `<Leader>tt` to toggle the tagbar panel\n\n![tagbar image][tagbar-img]\n\n**Note**: For full language support, run `brew install ctags` to install\nexuberant-ctags.\n\n**Tip**: Check out `:help ctags` for information about VIM's built-in\nctag support. Tag navigation creates a stack which can traversed via\n`Ctrl-]` (to find the source of a token) and `Ctrl-T` (to jump back up\none level).\n\n## [EasyMotion]\n\nEasyMotion provides an interactive way to use motions in Vim.\n\nIt quickly maps each possible jump destination to a key allowing very fast and\nstraightforward movement.\n\n**QuickStart** EasyMotion is triggered using the normal movements, but prefixing them with `<leader><leader>`\n\nFor example this screen shot demonstrates pressing `,,w`\n\n![easymotion image][easymotion-img]\n\n## [Airline]\n\nAirline provides a lightweight themable statusline with no external dependencies. By default this configuration uses the symbols `‹` and `›` as separators for different statusline sections but can be configured to use the same symbols as [Powerline]. An example first without and then with powerline symbols is shown here:\n\n![airline image][airline-img]\n\nTo enable powerline symbols first install one of the [Powerline Fonts] or patch your favorite font using the provided instructions. Configure your terminal, MacVim, or Gvim to use the desired font. Finally add `let g:airline_powerline_fonts=1` to your `.vimrc.before.local`.\n\n## Additional Syntaxes\n\nspf13-vim ships with a few additional syntaxes:\n\n* Markdown (bound to \\*.markdown, \\*.md, and \\*.mk)\n* Twig\n* Git commits (set your `EDITOR` to `mvim -f`)\n\n## Amazing Colors\n\nspf13-vim includes [solarized] and [spf13 vim color pack](https://github.com/spf13/vim-colors/):\n\n* ir_black\n* molokai\n* peaksea\n\nUse `:color molokai` to switch to a color scheme.\n\nTerminal Vim users will benefit from solarizing their terminal emulators and setting solarized support to 16 colors:\n\n    let g:solarized_termcolors=16\n    color solarized\n\nTerminal emulator colorschemes:\n\n* http://ethanschoonover.com/solarized (iTerm2, Terminal.app)\n* https://github.com/phiggins/konsole-colors-solarized (KDE Konsole)\n* https://github.com/sigurdga/gnome-terminal-colors-solarized (Gnome Terminal)\n\n## Snippets\n\nIt also contains a very complete set of [snippets](https://github.com/spf13/snipmate-snippets) for use with snipmate or [neocomplete].\n\n\n# Intro to VIM\n\nHere's some tips if you've never used VIM before:\n\n## Tutorials\n\n* Type `vimtutor` into a shell to go through a brief interactive\n  tutorial inside VIM.\n* Read the slides at [VIM: Walking Without Crutches](https://walking-without-crutches.heroku.com/#1).\n\n## Modes\n\n* VIM has two (common) modes:\n  * insert mode- stuff you type is added to the buffer\n  * normal mode- keys you hit are interpreted as commands\n* To enter insert mode, hit `i`\n* To exit insert mode, hit `<ESC>`\n\n## Useful commands\n\n* Use `:q` to exit vim\n* Certain commands are prefixed with a `<Leader>` key, which by default maps to `\\`.\n  Spf13-vim uses `let mapleader = \",\"` to change this to `,` which is in a consistent and\n  convenient location.\n* Keyboard [cheat sheet](http://www.viemu.com/vi-vim-cheat-sheet.gif).\n\n[![Analytics](https://ga-beacon.appspot.com/UA-7131036-5/spf13-vim/readme)](https://github.com/igrigorik/ga-beacon)\n[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/spf13/spf13-vim/trend.png)](https://bitdeli.com/free \"Bitdeli Badge\")\n\n\n[Git]:http://git-scm.com\n[Curl]:http://curl.haxx.se\n[Vim]:http://www.vim.org/download.php#pc\n[msysgit]:http://msysgit.github.io\n[Chocolatey]: http://chocolatey.org/\n[spf13-vim package]: https://chocolatey.org/packages/spf13-vim\n[MacVim]:http://code.google.com/p/macvim/\n[spf13-vim]:https://github.com/spf13/spf13-vim\n[contributors]:https://github.com/spf13/spf13-vim/contributors\n\n[Vundle]:https://github.com/gmarik/vundle\n[PIV]:https://github.com/spf13/PIV\n[NERDCommenter]:https://github.com/scrooloose/nerdcommenter\n[Undotree]:https://github.com/mbbill/undotree\n[NERDTree]:https://github.com/scrooloose/nerdtree\n[ctrlp]:https://github.com/kien/ctrlp.vim\n[solarized]:https://github.com/altercation/vim-colors-solarized\n[neocomplete]:https://github.com/shougo/neocomplete\n[Fugitive]:https://github.com/tpope/vim-fugitive\n[Surround]:https://github.com/tpope/vim-surround\n[Tagbar]:https://github.com/majutsushi/tagbar\n[Syntastic]:https://github.com/scrooloose/syntastic\n[vim-easymotion]:https://github.com/Lokaltog/vim-easymotion\n[YouCompleteMe]:https://github.com/Valloric/YouCompleteMe\n[Matchit]:http://www.vim.org/scripts/script.php?script_id=39\n[Tabularize]:https://github.com/godlygeek/tabular\n[EasyMotion]:https://github.com/Lokaltog/vim-easymotion\n[Airline]:https://github.com/bling/vim-airline\n[Powerline]:https://github.com/lokaltog/powerline\n[Powerline Fonts]:https://github.com/Lokaltog/powerline-fonts\n[AutoClose]:https://github.com/spf13/vim-autoclose\n[Ack.vim]:https://github.com/mileszs/ack.vim\n\n[spf13-vim-img]:https://i.imgur.com/UKToY.png\n[spf13-vimrc-img]:https://i.imgur.com/kZWj1.png\n[autocomplete-img]:https://i.imgur.com/90Gg7.png\n[tagbar-img]:https://i.imgur.com/cjbrC.png\n[fugitive-img]:https://i.imgur.com/4NrxV.png\n[nerdtree-img]:https://i.imgur.com/9xIfu.png\n[phpmanual-img]:https://i.imgur.com/c0GGP.png\n[easymotion-img]:https://i.imgur.com/ZsrVL.png\n[airline-img]:https://i.imgur.com/D4ZYADr.png\n"
  },
  {
    "path": "bootstrap.sh",
    "content": "#!/usr/bin/env bash\n\n#   Copyright 2014 Steve Francia\n#\n#   Licensed under the Apache License, Version 2.0 (the \"License\");\n#   you may not use this file except in compliance with the License.\n#   You may obtain a copy of the License at\n#\n#       http://www.apache.org/licenses/LICENSE-2.0\n#\n#   Unless required by applicable law or agreed to in writing, software\n#   distributed under the License is distributed on an \"AS IS\" BASIS,\n#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#   See the License for the specific language governing permissions and\n#   limitations under the License.\n\n############################  SETUP PARAMETERS\napp_name='spf13-vim'\n[ -z \"$APP_PATH\" ] && APP_PATH=\"$HOME/.spf13-vim-3\"\n[ -z \"$REPO_URI\" ] && REPO_URI='https://github.com/spf13/spf13-vim.git'\n[ -z \"$REPO_BRANCH\" ] && REPO_BRANCH='3.0'\ndebug_mode='0'\nfork_maintainer='0'\n[ -z \"$VUNDLE_URI\" ] && VUNDLE_URI=\"https://github.com/gmarik/vundle.git\"\n\n############################  BASIC SETUP TOOLS\nmsg() {\n    printf '%b\\n' \"$1\" >&2\n}\n\nsuccess() {\n    if [ \"$ret\" -eq '0' ]; then\n        msg \"\\33[32m[✔]\\33[0m ${1}${2}\"\n    fi\n}\n\nerror() {\n    msg \"\\33[31m[✘]\\33[0m ${1}${2}\"\n    exit 1\n}\n\ndebug() {\n    if [ \"$debug_mode\" -eq '1' ] && [ \"$ret\" -gt '1' ]; then\n        msg \"An error occurred in function \\\"${FUNCNAME[$i+1]}\\\" on line ${BASH_LINENO[$i+1]}, we're sorry for that.\"\n    fi\n}\n\nprogram_exists() {\n    local ret='0'\n    command -v $1 >/dev/null 2>&1 || { local ret='1'; }\n\n    # fail on non-zero return value\n    if [ \"$ret\" -ne 0 ]; then\n        return 1\n    fi\n\n    return 0\n}\n\nprogram_must_exist() {\n    program_exists $1\n\n    # throw error on non-zero return value\n    if [ \"$?\" -ne 0 ]; then\n        error \"You must have '$1' installed to continue.\"\n    fi\n}\n\nvariable_set() {\n    if [ -z \"$1\" ]; then\n        error \"You must have your HOME environmental variable set to continue.\"\n    fi\n}\n\nlnif() {\n    if [ -e \"$1\" ]; then\n        ln -sf \"$1\" \"$2\"\n    fi\n    ret=\"$?\"\n    debug\n}\n\n############################ SETUP FUNCTIONS\n\ndo_backup() {\n    if [ -e \"$1\" ] || [ -e \"$2\" ] || [ -e \"$3\" ]; then\n        msg \"Attempting to back up your original vim configuration.\"\n        today=`date +%Y%m%d_%s`\n        for i in \"$1\" \"$2\" \"$3\"; do\n            [ -e \"$i\" ] && [ ! -L \"$i\" ] && mv -v \"$i\" \"$i.$today\";\n        done\n        ret=\"$?\"\n        success \"Your original vim configuration has been backed up.\"\n        debug\n   fi\n}\n\nsync_repo() {\n    local repo_path=\"$1\"\n    local repo_uri=\"$2\"\n    local repo_branch=\"$3\"\n    local repo_name=\"$4\"\n\n    msg \"Trying to update $repo_name\"\n\n    if [ ! -e \"$repo_path\" ]; then\n        mkdir -p \"$repo_path\"\n        git clone -b \"$repo_branch\" \"$repo_uri\" \"$repo_path\"\n        ret=\"$?\"\n        success \"Successfully cloned $repo_name.\"\n    else\n        cd \"$repo_path\" && git pull origin \"$repo_branch\"\n        ret=\"$?\"\n        success \"Successfully updated $repo_name\"\n    fi\n\n    debug\n}\n\ncreate_symlinks() {\n    local source_path=\"$1\"\n    local target_path=\"$2\"\n\n    lnif \"$source_path/.vimrc\"         \"$target_path/.vimrc\"\n    lnif \"$source_path/.vimrc.bundles\" \"$target_path/.vimrc.bundles\"\n    lnif \"$source_path/.vimrc.before\"  \"$target_path/.vimrc.before\"\n    lnif \"$source_path/.vim\"           \"$target_path/.vim\"\n\n    if program_exists \"nvim\"; then\n        lnif \"$source_path/.vim\"       \"$target_path/.config/nvim\"\n        lnif \"$source_path/.vimrc\"     \"$target_path/.config/nvim/init.vim\"\n    fi\n\n    touch  \"$target_path/.vimrc.local\"\n\n    ret=\"$?\"\n    success \"Setting up vim symlinks.\"\n    debug\n}\n\nsetup_fork_mode() {\n    local source_path=\"$2\"\n    local target_path=\"$3\"\n\n    if [ \"$1\" -eq '1' ]; then\n        touch \"$target_path/.vimrc.fork\"\n        touch \"$target_path/.vimrc.bundles.fork\"\n        touch \"$target_path/.vimrc.before.fork\"\n\n        lnif \"$source_path/.vimrc.fork\"         \"$target_path/.vimrc.fork\"\n        lnif \"$source_path/.vimrc.bundles.fork\" \"$target_path/.vimrc.bundles.fork\"\n        lnif \"$source_path/.vimrc.before.fork\"  \"$target_path/.vimrc.before.fork\"\n\n        ret=\"$?\"\n        success \"Created fork maintainer files.\"\n        debug\n    fi\n}\n\nsetup_vundle() {\n    local system_shell=\"$SHELL\"\n    export SHELL='/bin/sh'\n\n    vim \\\n        -u \"$1\" \\\n        \"+set nomore\" \\\n        \"+BundleInstall!\" \\\n        \"+BundleClean\" \\\n        \"+qall\"\n\n    export SHELL=\"$system_shell\"\n\n    success \"Now updating/installing plugins using Vundle\"\n    debug\n}\n\n############################ MAIN()\nvariable_set \"$HOME\"\nprogram_must_exist \"vim\"\nprogram_must_exist \"git\"\n\ndo_backup       \"$HOME/.vim\" \\\n                \"$HOME/.vimrc\" \\\n                \"$HOME/.gvimrc\"\n\nsync_repo       \"$APP_PATH\" \\\n                \"$REPO_URI\" \\\n                \"$REPO_BRANCH\" \\\n                \"$app_name\"\n\ncreate_symlinks \"$APP_PATH\" \\\n                \"$HOME\"\n\nsetup_fork_mode \"$fork_maintainer\" \\\n                \"$APP_PATH\" \\\n                \"$HOME\"\n\nsync_repo       \"$HOME/.vim/bundle/vundle\" \\\n                \"$VUNDLE_URI\" \\\n                \"master\" \\\n                \"vundle\"\n\nsetup_vundle    \"$APP_PATH/.vimrc.bundles.default\"\n\nmsg             \"\\nThanks for installing $app_name.\"\nmsg             \"© `date +%Y` http://vim.spf13.com/\"\n"
  },
  {
    "path": "config-dependencies.gv",
    "content": "digraph G {\n\tgraph [layout=dot]\n\n// This is just an example for you to use as a template.\n// Edit as you like. Whenever you save a legal graph\n// the layout in the graphviz window will be updated.\n\n\t/* vim [href=\"http://www.vim.org/\"] */\n\t/* dot [href=\"http://www.graphviz.org/\"] */\n\t/* vimdot [href=\"file:///usr/bin/vimdot\"] */\n\n\t{_} -> _before\n\t{_before} -> _before_fork\n\t{_before_fork} -> _before_local\n        {_ _before_local} -> _bundles\n\t{_bundles} -> _bundles_fork\n\t{_bundles} -> _bundles_local\n\t{_bundles_fork} -> _bundles_local\n        {_ _bundles_local} -> _fork\n        {_ _fork} -> _local\n        {_ _local} -> g_local\n}\n"
  },
  {
    "path": "spf13-vim-windows-install.cmd",
    "content": "REM    Copyright 2014 Steve Francia\nREM \nREM    Licensed under the Apache License, Version 2.0 (the \"License\");\nREM    you may not use this file except in compliance with the License.\nREM    You may obtain a copy of the License at\nREM \nREM        http://www.apache.org/licenses/LICENSE-2.0\nREM \nREM    Unless required by applicable law or agreed to in writing, software\nREM    distributed under the License is distributed on an \"AS IS\" BASIS,\nREM    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nREM    See the License for the specific language governing permissions and\nREM    limitations under the License.\n\n\n@if not exist \"%HOME%\" @set HOME=%HOMEDRIVE%%HOMEPATH%\n@if not exist \"%HOME%\" @set HOME=%USERPROFILE%\n\n@set APP_PATH=%HOME%\\.spf13-vim-3\nIF NOT EXIST \"%APP_PATH%\" (\n    call git clone -b 3.0 https://github.com/spf13/spf13-vim.git \"%APP_PATH%\"\n) ELSE (\n    @set ORIGINAL_DIR=%CD%\n    echo updating spf13-vim\n    chdir /d \"%APP_PATH%\"\n    call git pull\n    chdir /d \"%ORIGINAL_DIR%\"\n    call cd \"%APP_PATH%\"\n)\n\ncall mklink \"%HOME%\\.vimrc\" \"%APP_PATH%\\.vimrc\"\ncall mklink \"%HOME%\\_vimrc\" \"%APP_PATH%\\.vimrc\"\ncall mklink \"%HOME%\\.vimrc.fork\" \"%APP_PATH%\\.vimrc.fork\"\ncall mklink \"%HOME%\\.vimrc.bundles\" \"%APP_PATH%\\.vimrc.bundles\"\ncall mklink \"%HOME%\\.vimrc.bundles.fork\" \"%APP_PATH%\\.vimrc.bundles.fork\"\ncall mklink \"%HOME%\\.vimrc.before\" \"%APP_PATH%\\.vimrc.before\"\ncall mklink \"%HOME%\\.vimrc.before.fork\" \"%APP_PATH%\\.vimrc.before.fork\"\ncall mklink /J \"%HOME%\\.vim\" \"%APP_PATH%\\.vim\"\n\nIF NOT EXIST \"%APP_PATH%\\.vim\\bundle\" (\n    call mkdir \"%APP_PATH%\\.vim\\bundle\"\n)\n\nIF NOT EXIST \"%HOME%/.vim/bundle/vundle\" (\n    call git clone https://github.com/gmarik/vundle.git \"%HOME%/.vim/bundle/vundle\"\n) ELSE (\n  call cd \"%HOME%/.vim/bundle/vundle\"\n  call git pull\n  call cd %HOME%\n)\n\ncall vim -u \"%APP_PATH%/.vimrc.bundles\" +BundleInstall! +BundleClean +qall\n"
  },
  {
    "path": "spf13-vim-windows-xp-install.cmd",
    "content": "REM    Copyright 2014 Steve Francia\nREM \nREM    Licensed under the Apache License, Version 2.0 (the \"License\");\nREM    you may not use this file except in compliance with the License.\nREM    You may obtain a copy of the License at\nREM \nREM        http://www.apache.org/licenses/LICENSE-2.0\nREM \nREM    Unless required by applicable law or agreed to in writing, software\nREM    distributed under the License is distributed on an \"AS IS\" BASIS,\nREM    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nREM    See the License for the specific language governing permissions and\nREM    limitations under the License.\n\n@if not exist \"%HOME%\" @set HOME=%HOMEDRIVE%%HOMEPATH%\n@if not exist \"%HOME%\" @set HOME=%USERPROFILE%\n\n@set APP_PATH=%HOME%\\.spf13-vim-3\n\n@if not exist \"%APP_PATH%\" (\n    echo backing up existing vim config\n    @set today=%DATE%\n    @if exist \"%HOME%\\.vim\" call xcopy /s/e/h/y/r/q/i \"%HOME%\\.vim\" \"%HOME%\\.vim.%today%\"\n    @if exist \"%HOME%\\.vimrc\" call copy \"%HOME%\\.vimrc\" \"%HOME%\\.vimrc.%today%\"\n    @if exist \"%HOME%\\_vimrc\" call copy \"%HOME%\\_vimrc\" \"%HOME%\\_vimrc.%today%\"\n    @if exist \"%HOME%\\.gvimrc\" call copy \"%HOME%\\.gvimrc\" \"%HOME%\\.gvimrc.%today%\"\n)\n\n@if exist \"%APP_PATH%\" (\n    @set ORIGINAL_DIR=%CD%\n    echo updating spf13-vim\n    chdir /d \"%APP_PATH%\" && git pull\n    chdir /d \"%ORIGINAL_DIR%\"\n) else (\n    echo cloning spf13-vim\n    call git clone -b 3.0 git://github.com/spf13/spf13-vim.git \"%APP_PATH%\"\n)\n\n@if not exist  \"%APP_PATH%\\.vim\\bundle\" call mkdir \"%APP_PATH%\\.vim\\bundle\"\ncall xcopy /s/e/h/y/r/q/i \"%APP_PATH%\\.vim\" \"%HOME%\\.vim\"\ncall copy \"%APP_PATH%\\.vimrc\" \"%HOME%\\.vimrc\"\ncall copy \"%APP_PATH%\\.vimrc\" \"%HOME%\\_vimrc\"\ncall copy \"%APP_PATH%\\.vimrc.fork\" \"%HOME%\\.vimrc.fork\"\ncall copy \"%APP_PATH%\\.vimrc.bundles\" \"%HOME%\\.vimrc.bundles\"\ncall copy \"%APP_PATH%\\.vimrc.bundles.fork\" \"%HOME%\\.vimrc.bundles.fork\"\ncall copy \"%APP_PATH%\\.vimrc.before\" \"%HOME%\\.vimrc.before\"\ncall copy \"%APP_PATH%\\.vimrc.before.fork\" \"%HOME%\\.vimrc.before.fork\"\n\n@if not exist \"%HOME%/.vim/bundle/vundle\" call git clone https://github.com/gmarik/vundle.git \"%HOME%/.vim/bundle/vundle\"\ncall vim -u \"%APP_PATH%/.vimrc.bundles\" - +BundleInstall! +BundleClean +qall\n"
  },
  {
    "path": "uninstall.sh",
    "content": "#!/usr/bin/env sh\n\napp_dir=\"$HOME/.spf13-vim-3\"\n\nwarn() {\n    echo \"$1\" >&2\n}\n\ndie() {\n    warn \"$1\"\n    exit 1\n}\n\nrm $HOME/.vimrc\nrm $HOME/.vimrc.bundles\nrm $HOME/.vim\n\nrm -rf $app_dir\n"
  }
]