“ =================================================== ” INITIALIZE “ =================================================== if has('vim_starting')
set nocompatible set runtimepath+=$HOME/.vim/bundle/neobundle.vim/
endif call neobundle#begin(expand('$HOME/.vim/bundle'))
NeoBundleFetch 'Shougo/neobundle.vim'
“ File management, search, navigation NeoBundle 'mileszs/ack.vim' NeoBundle 'kien/ctrlp.vim' NeoBundle 'sjl/gundo.vim' NeoBundle 'scrooloose/nerdtree' NeoBundle 'vim-scripts/restore_view.vim' NeoBundle 'jeetsukumaran/vim-buffergator' NeoBundle 'vim-scripts/YankRing.vim' NeoBundle 'vim-scripts/zoomwintab.vim'
“ Vim UI/UX NeoBundle 'bling/vim-airline' NeoBundle 'reedes/vim-colors-pencil' NeoBundle 'gcmt/taboo.vim'
“ Syntax highlighting NeoBundle 'jtratner/vim-flavored-markdown.git' NeoBundle 'elzr/vim-json' NeoBundle 'kchmck/vim-coffee-script' NeoBundle 'pangloss/vim-javascript'
“ Snippets & autocomplete NeoBundle 'sirver/ultisnips' NeoBundle 'Valloric/YouCompleteMe' NeoBundle 'honza/vim-snippets'
“ Formatters, selectors, accelerators NeoBundle 'mattn/emmet-vim' NeoBundle 'vim-scripts/matchit.zip' NeoBundle 'godlygeek/tabular' NeoBundle 'tpope/vim-commentary' NeoBundle 'tpope/vim-endwise' NeoBundle 'terryma/vim-multiple-cursors' NeoBundle 'tpope/vim-repeat' NeoBundle 'tpope/vim-surround'
“ Ruby/Rails NeoBundle 'vim-ruby/vim-ruby' NeoBundle 'tpope/vim-rails' NeoBundle 'henrik/vim-ruby-runner' NeoBundle 'nelstrom/vim-textobj-rubyblock' NeoBundle 'skalnik/vim-vroom'
“ Git NeoBundle 'tpope/vim-fugitive' NeoBundle 'mhinz/vim-signify'
“ Dependencies & utilities NeoBundle 'MarcWeber/vim-addon-mw-utils' NeoBundle 'kana/vim-textobj-user' NeoBundle 'tomtom/tlib_vim'
call neobundle#end()
filetype plugin indent on
NeoBundleCheck
“ =================================================== ” VISUALS “ =================================================== syntax enable
“ Colorscheme set t_Co=256 set background=dark colorscheme pencil ” Fix for pencil comments hi Comment cterm=NONE ctermbg=00 ctermfg=08 “ hi ColorColumn ctermbg=27
“ Tab styles hi TabLineFill ctermfg=08 ctermbg=08 hi TabLine ctermfg=13 ctermbg=08 hi TabLineSel ctermfg=02 ctermbg=00
“ Interactive cursor let &t_SI = ”<esc>]50;CursorShape=1x7“ let &t_EI = ”<esc>]50;CursorShape=0x7“
“ For MacVim if has(”gui_running“)
colorscheme pencil set guifont=Monaco:h13 set guioptions-=r set guioptions-=T set guioptions-=L set fuoptions=maxvert,maxhorz set columns=1000 au GUIEnter * set fullscreen
endif
“ =================================================== ” REMAPS “ =================================================== let mapleader=”,“
“ Movement nnoremap j gj nnoremap k gk nnoremap <c-j> } nnoremap <c-k> { nnoremap <s-j> } nnoremap <s-k> { nnoremap <c-h> ^ nnoremap <c-l> $ vnoremap <c-h> ^ vnoremap <c-l> $
“ Windows nnoremap wl <c-w>l nnoremap wh <c-w>h nnoremap wj <c-w>j nnoremap wk <c-w>k nnoremap w= <c-w>= nnoremap wL <c-w>L nnoremap wH <c-w>H nnoremap wJ <c-w>J nnoremap wK <c-w>K nnoremap wf <c-w>x nnoremap wo :ZoomWinTabToggle<cr>
“ Tabs nnoremap t <esc>:tabnew<cr> nnoremap T <esc><c-w>T nnoremap { <esc>gT nnoremap } <esc>gt
“ File navigation, search, replace nnoremap <leader>n :NERDTreeToggle<cr> nnoremap <leader>f :NERDTreeFind<cr> nnoremap <leader>s :Ack<space> nnoremap <leader><space> :noh<cr> nnoremap <leader>* *:%s//
“ Keep search matches in the middle of the window nnoremap n nzzzv nnoremap N Nzzzv
“ Keep indent selected vnoremap <s-l> >gv vnoremap <s-h> <gv vnoremap > >gv vnoremap < <gv
“ Make F1 useful nmap <F1> <esc> imap <F1> <esc>
“ Convential select all nnoremap <leader>a ggVG
“ Change pwd to current file nnoremap <leader>cd :lcd<space>%:p:h<cr>:pwd<cr>
“ Open in pwd cnoremap e<space> e <c-r>=expand('%:p:h') . '/'<cr>
“ Copy & paste to clipboard vnoremap <leader>y ”*y nnoremap <leader>p “*p
“ Drag block up/down vnoremap <s-j> :m'>+<cr>gv vnoremap <s-k> :m-2<cr>gv
“ Toggle line wrapping nnoremap <leader>w :set wrap!<cr> nnoremap <leader>i :set list!<cr>
“ Toggle relative numbers in visual line mode nnoremap <silent> v v:<c-u>set nonu rnu<cr>gv nnoremap <silent> V V0:<c-u>set nonu rnu<cr>gv nnoremap <silent> <c-v> <c-v>:<c-u>set nonu rnu<cr>gv vnoremap <esc> <esc>:set nornu nu<cr> autocmd CursorMoved * if mode() !~# ”[vV<c-v>]“ | set nornu nu | endif
“ Use sane regexes nnoremap / /v vnoremap / /v
“ Tags nnoremap <c-]> <c-]>mzzvzz15<c-e>`z:Pulse<cr> nnoremap <c-> <c-w>v<c-w>L<c-]>mzzMzvzz15<c-e>`z:Pulse<cr> nnoremap <leader>\ :tab split<CR>:exec(”tag “.expand(”<cword>“))<cr><c-e>`z:Pulse<cr> nnoremap <silent> <leader>tt :!ctags -R . <cr>
“ Sudo to write cnoremap w!! w !sudo tee % >/dev/null
“ Modify command line cursor movement cnoremap <c-a> <home> cnoremap <c-e> <end>
“ Gundo nnoremap <leader>G :GundoToggle<cr>
“ Tabularize vnoremap <leader>T :Tabularize /
“ YankRing nnoremap <leader>Y :YRShow<cr>
“ =================================================== ” Settings “ =================================================== ” Searching set incsearch set ignorecase set smartcase set showmatch set hlsearch set gdefault set wildmenu set wildmode=list:longest,full set wildignore+=/.tmp/,*.so,.swp,.zip,*.git set shellpipe=>
“ Tabbing and indents set autoindent set smartindent set expandtab set shiftwidth=2 set scrolloff=3 set softtabstop=2 set tabstop=8 set shiftround
“ Formatting, layout, misc tweeks set fileencoding=utf-8 set encoding=utf-8 set backspace=indent,eol,start set autoread set autowrite set number set ruler set cursorline set cursorcolumn ” set colorcolumn=80 set visualbell set showcmd set laststatus=2 set showmode! set wrap set linebreak let &showbreak = '↪ ' set listchars=tab:▸\ ,trail:·,eol:¬ “ set splitright
“ Makes things faster? set notimeout set ttimeout set ttimeoutlen=10 set lazyredraw
“ Better completion set complete=.,w,b,u,t set completeopt=longest,menuone,preview
“ Backups, swapfiles, views set backup set noswapfile set history=1000 set undofile set undoreload=10000 set viewoptions=cursor,folds
set undodir=~/.vim/tmp/undo// set backupdir=~/.vim/backup// set directory=~/.vim/tmp/swap// set viewdir=~/.vim/tmp/view// set viminfo+=n$HOME/.vim/tmp/.viminfo set tags=./tmp/tags,./tags,tags
“ Make those folders automatically if they don't already exist. if !isdirectory(expand(&undodir))
call mkdir(expand(&undodir), "p")
endif if !isdirectory(expand(&backupdir))
call mkdir(expand(&backupdir), "p")
endif if !isdirectory(expand(&directory))
call mkdir(expand(&directory), "p")
endif if !isdirectory(expand(&viewdir))
call mkdir(expand(&viewdir), "p")
endif
“ Don't try to highlight lines longer than 800 characters. set synmaxcol=800
“ =================================================== ” PLUGINS “ =================================================== ” NERDTree let NERDTreeShowHidden=1 let NERDTreeQuitOnOpen=1 let NERDTreeBookmarksFile=expand(“$HOME/.vim/tmp/NERDTreeBookmarks”)
“ Ctrlp let g:ctrlp_match_window='order:ttb,max:30' let g:ctrlp_clear_cache_on_exit=1 let g:ctrlp_cache_dir='$HOME/.vim/tmp/cache/ctrlp' let g:ctrlp_arg_map=1 let g:ctrlp_max_files=0 let g:ctrlp_max_depth=40 let g:ctrlp_custom_ignore = 'v(.git|.hg|.svn)$'
“ Ack let g:ackhighlight=1
“ Airline let g:airline_left_sep='' let g:airline_right_sep='' let g:airline#extensions#whitespace#enabled=0 let g:airline_theme='pencil'
“ Buffergator let g:buffergator_viewport_split_policy='R' let g:buffergator_split_size=50
“ Taboo let g:taboo_tab_format=' %f '
“ YankRing let g:yankring_history_dir='$HOME/.vim/tmp' let g:yankring_clipboard_monitor=0 ” YR - Stop polluting my global map space let g:yankring_n_keys='' let g:yankring_o_keys='' let g:yankring_zap_keys='' let g:yankring_ignore_operator='' let g:yankring_v_key='' let g:yankring_del_v_key='' let g:yankring_paste_n_bkey='' let g:yankring_paste_n_akey='' let g:yankring_paste_v_key='' let g:yankring_replace_n_pkey='' let g:yankring_replace_n_nkey=''
“ UltiSnips let g:UltiSnipsExpandTrigger='<c-j>' let g:UltiSnipsEditSplit='vertical'
“ Emmet ” Usage: <Ctrl>e, let g:user_emmet_leader_key='<c-e>' let g:user_emmet_prevkey='<c-e>p'
“ RubyRunner let g:RubyRunner_key = '<Leader>e' let g:RubyRunner_keep_focus_key = '<Leader>E' let g:RubyRunner_open_below = 1 let g:RubyRunner_window_size = 10
“ Vim-Javascript ” let g:javascript_enable_domhtmlcss = 1 “ let g:used_javascript_libs = 'jquery,angularjs,angularui,jasmin,coffeescript' ” let g:syntastic_html_tidy_ignore_errors=[“ proprietary attribute "ng-”] let g:html_indent_inctags = “html,body,head,tbody”
“ Vroom let g:vroom_clear_screen = 0 let g:vroom_use_binstubs = 1 let g:vroom_use_bundle_exec = 0
“ =================================================== ” CUSTOM FUNCTIONS “ =================================================== ” Git autocmd Filetype gitcommit setlocal spell textwidth=72 autocmd Filetype gitcommit setlocal colorcolumn=80
“ Use The Silver Searcher github.com/ggreer/the_silver_searcher if executable('ag')
let g:ackprg='ag --nogroup --column'
“ Use Ag over Grep set grepprg=ag\ –nogroup\ –nocolor
“ Use ag in CtrlP for listing files. Lightning fast and respects .gitignore let g:ctrlp_user_command='ag %s –hidden -l –nocolor -g ”“' endif
“ Hide cursor crosshairs when not in focus augroup cline
au! au WinLeave,InsertEnter * set nocursorline au WinLeave,InsertEnter * set nocursorcolumn au WinEnter,InsertLeave * set cursorline au WinEnter,InsertLeave * set cursorcolumn
augroup END
“ Sets Quickfix window height au FileType qf call AdjustWindowHeight(3, 30) function! AdjustWindowHeight(minheight, maxheight)
exe max([min([line("$"), a:maxheight]), a:minheight]) . "wincmd _"
endfunction
“ Clear register function! <SID>ClearRegisters()
let regs='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-="*+' let i=0 while (i<strlen(regs)) exec 'let @'.regs[i].'=""' let i=i+1 endwhile
endfunction command! -nargs=0 ClearRegisters call <SID>ClearRegisters()
“ Clear undo history function! <SID>ForgetUndo()
let old_undolevels = &undolevels set undolevels=-1 exe "normal a \<BS>\<esc>" let &undolevels = old_undolevels unlet old_undolevels
endfunction command! -nargs=0 ClearUndo call <SID>ForgetUndo()
“ Make JavaScript brackets close properly augroup ft_javascript
au! au Filetype javascript inoremap <buffer> {<cr> {}<left><cr><tab>.<cr><esc>kA<bs>
augroup END
“ Pulse Line - used to highlight matches when navigating ctags function! s:Pulse()
let current_window = winnr() windo set nocursorline execute current_window . 'wincmd w' setlocal cursorline redir => old_hi silent execute 'hi CursorLine' redir END let old_hi = split(old_hi, '\n')[0] let old_hi = substitute(old_hi, 'xxx', '', '') let steps = 9 let width = 1 let start = width let end = steps * width let color = 233 for i in range(start, end, width) execute "hi CursorLine ctermbg=" . (color + i) redraw sleep 6m endfor for i in range(end, start, -1 * width) execute "hi CursorLine ctermbg=" . (color + i) redraw sleep 6m endfor execute 'hi ' . old_hi
endfunction command! -nargs=0 Pulse call s:Pulse()