" Arpeggio lets us define key-chord combos (simultaneous key presses) call arpeggio#load() " ======================================== " General vim sanity improvements " ======================================== " " " Change leader to a comma because the backslash is too far away " That means all \x commands turn into ,x let mapleader="," " alias yw to yank the entire word 'yank inner word' " even if the cursor is halfway inside the word " FIXME: will not properly repeat when you use a dot (tie into repeat.vim) nnoremap ,yw yiww " ,ow = 'overwrite word', replace a word with what's in the yank buffer " FIXME: will not properly repeat when you use a dot (tie into repeat.vim) nnoremap ,ow "_diwhp "make Y consistent with C and D nnoremap Y y$ " ======================================== " RSI Prevention - keyboard remaps " ======================================== " Certain things we do every day as programmers stress " out our hands. For example, typing underscores and " dashes are very common, and in position that require " a lot of hand movement. Vim to the rescue " " Now using the middle finger of either hand you can type " underscores with apple-k or apple-d, and add Shift " to type dashes imap <silent> <D-k> _ imap <silent> <D-d> _ imap <silent> <D-K> - imap <silent> <D-D> - " ,# Surround a word with #{ruby interpolation} map ,# ysiw# vmap ,# c#{<C-R>"}<ESC> " ," Surround a word with "quotes" map ," ysiw" vmap ," c"<C-R>""<ESC> " ,' Surround a word with 'single quotes' map ,' ysiw' vmap ,' c'<C-R>"'<ESC> " ,) or ,( Surround a word with (parens) " The difference is in whether a space is put in map ,( ysiw( map ,) ysiw) vmap ,( c( <C-R>" )<ESC> vmap ,) c(<C-R>")<ESC> " ,[ Surround a word with [brackets] map ,] ysiw] map ,[ ysiw[ vmap ,[ c[ <C-R>" ]<ESC> vmap ,] c[<C-R>"]<ESC> " ,{ Surround a word with {braces} map ,} ysiw} map ,{ ysiw{ vmap ,} c{ <C-R>" }<ESC> vmap ,{ c{<C-R>"}<ESC> " gary bernhardt's hashrocket imap <c-l> <space>=><space> " Change inside various enclosures with Cmd-" and Cmd-' " The f makes it find the enclosure so you don't have " to be standing inside it nnoremap <D-'> f'ci' nnoremap <D-"> f"ci" nnoremap <D-(> f(ci( nnoremap <D-)> f)ci) nnoremap <D-[> f[ci[ nnoremap <D-]> f]ci] "Go to last edit location with ,. nnoremap ,. '. "When typing a string, your quotes auto complete. Move past the quote "while still in insert mode by hitting Ctrl-a. Example: " " type 'foo<c-a> " " the first quote will autoclose so you'll get 'foo' and hitting <c-a> will " put the cursor right after the quote imap <C-a> <esc>wa " ==== NERD tree " Cmd-Shift-N for nerd tree nmap <D-N> :NERDTreeToggle<CR> " Open the project tree and expose current file in the nerdtree with Ctrl-\ nnoremap <silent> <C-\> :NERDTreeFind<CR>:vertical res 30<CR> " ,q to toggle quickfix window (where you have stuff like GitGrep) " ,oq to open it back up (rare) nmap <silent> ,qc :CloseSingleConque<CR>:cclose<CR> nmap <silent> ,qo :copen<CR> " move up/down quickly by using Cmd-j, Cmd-k " which will move us around by functions nnoremap <silent> <D-j> } nnoremap <silent> <D-k> { autocmd FileType ruby map <buffer> <D-j> ]m autocmd FileType ruby map <buffer> <D-k> [m autocmd FileType rspec map <buffer> <D-j> } autocmd FileType rspec map <buffer> <D-k> { " Command-/ to toggle comments map <D-/> :TComment<CR> imap <D-/> <Esc>:TComment<CR>i "GitGrep - open up a git grep line, with a quote started for the search nnoremap ,gg :GitGrep ""<left> "GitGrep Current Partial nnoremap ,gcp :GitGrepCurrentPartial<CR> "GitGrep Current File nnoremap ,gcf :call GitGrep(expand("%:t:r"))<CR> "Move back and forth through previous and next buffers "with ,z and ,x nnoremap <silent> ,z :bp<CR> nnoremap <silent> ,x :bn<CR> " ============================== " Window/Tab/Split Manipulation " ============================== " Move between split windows by using the four directions H, L, I, N " (note that I use I and N instead of J and K because J already does " line joins and K is mapped to GitGrep the current word nnoremap <silent> <C-h> <C-w>h nnoremap <silent> <C-l> <C-w>l nnoremap <silent> <C-k> <C-w>k nnoremap <silent> <C-j> <C-w>j " Zoom in and out of current window with ,gz map <silent> ,gz <C-w>o " Use numbers to pick the tab you want (like iTerm) map <silent> <D-1> :tabn 1<cr> map <silent> <D-2> :tabn 2<cr> map <silent> <D-3> :tabn 3<cr> map <silent> <D-4> :tabn 4<cr> map <silent> <D-5> :tabn 5<cr> map <silent> <D-6> :tabn 6<cr> map <silent> <D-7> :tabn 7<cr> map <silent> <D-8> :tabn 8<cr> map <silent> <D-9> :tabn 9<cr> " Create window splits easier. The default " way is Ctrl-w,v and Ctrl-w,s. I remap " this to vv and ss nnoremap <silent> vv <C-w>v nnoremap <silent> ss <C-w>s " Resize windows with arrow keys nnoremap <D-Up> <C-w>+ nnoremap <D-Down> <C-w>- nnoremap <D-Left> <C-w>< nnoremap <D-Right> <C-w>> " create <%= foo %> erb tags using Ctrl-k in edit mode imap <silent> <C-K> <%= %><Esc>3hi " create <%= foo %> erb tags using Ctrl-j in edit mode imap <silent> <C-J> <% %><Esc>2hi " ============================ " Shortcuts for everyday tasks " ============================ " copy current filename into system clipboard - mnemonic: (c)urrent(f)ilename " this is helpful to paste someone the path you're looking at nnoremap <silent> ,cf :let @* = expand("%:~")<CR> nnoremap <silent> ,cn :let @* = expand("%:t")<CR> "Clear current search highlight by double tapping // nmap <silent> // :nohlsearch<CR> "(v)im (c)ommand - execute current line as a vim command nmap <silent> ,vc yy:<C-f>p<C-c><CR> "(v)im (r)eload nmap <silent> ,vr :so %<CR> " Type ,hl to toggle highlighting on/off, and show current value. noremap ,hl :set hlsearch! hlsearch?<CR> " Apple-* Highlight all occurrences of current word (like '*' but without moving) " http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches nnoremap <D-*> :let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR> " These are very similar keys. Typing 'a will jump to the line in the current " file marked with ma. However, `a will jump to the line and column marked " with ma. It’s more useful in any case I can imagine, but it’s located way " off in the corner of the keyboard. The best way to handle this is just to " swap them: http://items.sjbach.com/319/configuring-vim-right nnoremap ' ` nnoremap ` ' " ============================ " Tabularize - alignment " ============================ " Hit Cmd-Shift-A then type a character you want to align by nmap <D-A> :Tabularize / vmap <D-A> :Tabularize / " ============================ " SplitJoin plugin " ============================ nmap sj :SplitjoinSplit<cr> nmap sk :SplitjoinJoin<cr> " ============================ " vim-ruby-conque " ============================ " Cmd-Shift-R for RSpec nmap <silent> <D-R> :call RunRspecCurrentFileConque()<CR> " Cmd-Shift-L for RSpec Current Line nmap <silent> <D-L> :call RunRspecCurrentLineConque()<CR> " ,Cmd-R for Last conque command nmap <silent> ,<D-R> :call RunLastConqueCommand()<CR> " Get the current highlight group. Useful for then remapping the color map ,hi :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#")<CR> " Source current file Cmd-% (good for vim development) map <D-%> :so %<CR> " ,hp = html preview map <silent> ,hp :!open -a Safari %<CR><CR>