diff options
Diffstat (limited to '.vim/custom-settings.vim')
-rw-r--r-- | .vim/custom-settings.vim | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/.vim/custom-settings.vim b/.vim/custom-settings.vim new file mode 100644 index 0000000..9233b35 --- /dev/null +++ b/.vim/custom-settings.vim @@ -0,0 +1,240 @@ +" ================ keymap settings ================ +" ======================================== +" General vim sanity improvements +" ======================================== +" +" +" 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$ +function! YRRunAfterMaps() + nnoremap Y :<C-U>YRYankCount 'y$'<CR> +endfunction + +" Make 0 go to the first character rather than the beginning +" of the line. When we're programming, we're almost always +" interested in working with text rather than empty space. If +" you want the traditional beginning of line, use ^ +nnoremap 0 ^ +nnoremap ^ 0 + +" ======================================== +" 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> + +map ,` ysiw` + +" 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 Ag) +" ,oq to open it back up (rare) +nmap <silent> ,qc :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> { +autocmd FileType javascript map <buffer> <D-k> } +autocmd FileType javascript map <buffer> <D-j> { + + +" Command-/ to toggle comments +map <D-/> :TComment<CR> +imap <D-/> <Esc>:TComment<CR>i + + +"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 +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 + +" Make gf (go to file) create the file, if not existent +nnoremap gf :e<cfile><CR> +nnoremap <C-w>f :sp +e<cfile><CR> +nnoremap <C-w>gf :tabe<cfile><CR> + +" Zoom in +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> + +" 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> + +" 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> +" ================ search settings ================ +" ================ Search Settings ================= + +set incsearch " Find the next match as we type the search +set hlsearch " Hilight searches by default +set viminfo='100,f1 " Save up to 100 marks, enable capital marks +set ignorecase " Ignore case when searching... +set smartcase " ...unless we type a capital + |