X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=vimrc;h=6fc405bbd278713d454d46fe195876ab0c489713;hb=86818cd627d124febb40ae8f144fd15baa92e30a;hp=e48c21943e01b4353cac05a8a76198ae5c409cdc;hpb=6ec52f7a8f36cf8ea2cfdf3b50640f37099d2294;p=config%2Fdotfiles.git diff --git a/vimrc b/vimrc index e48c219..6fc405b 100644 --- a/vimrc +++ b/vimrc @@ -386,23 +386,21 @@ endif " PLUGIN SETTINGS +if has('eval') " Use pathogen which allows one 'runtimepath' entry per plugin. This makes " installing/removing/updating plugins simple. (Used for plugins with more " than one file.) -if has('eval') && v:version >= 700 - execute 'call pathogen#runtime_append_all_bundles()' -endif + if v:version >= 700 + execute 'call pathogen#runtime_append_all_bundles()' + endif " Settings for the NERD commenter. " Don't create any mappings I don't want to use. -if has('eval') let NERDCreateDefaultMappings = 0 -endif " Map toggle comment. -map NERDCommenterToggle + map NERDCommenterToggle " XPTemplate settings. -if has('eval') " Try to maintain snippet rendering even after editing outside of a " snippet. let g:xptemplate_strict = 0 @@ -489,3 +487,52 @@ if has('autocmd') augroup END endif + + +" CUSTOM FUNCTIONS + +if has('eval') + " New text-objects ii and ai to work on text with the same indentation. + " Thanks to + " http://vim.wikia.com/index.php?title=Indent_text_object&oldid=27126 + " (visited on 2011-11-19). + onoremap ai :call IndTxtObj(0) + onoremap ii :call IndTxtObj(1) + vnoremap ai :call IndTxtObj(0)gv + vnoremap ii :call IndTxtObj(1)gv + + function! s:IndTxtObj(inner) + let curline = line(".") + let lastline = line("$") + let i = indent(line(".")) - &shiftwidth * (v:count1 - 1) + let i = i < 0 ? 0 : i + if getline(".") !~ "^\\s*$" + let p = line(".") - 1 + let nextblank = getline(p) =~ "^\\s*$" + while p > 0 + \ && ((i == 0 && !nextblank) + \ || (i > 0 && ((indent(p) >= i + \ && !(nextblank && a:inner)) + \ || (nextblank && !a:inner)))) + - + let p = line(".") - 1 + let nextblank = getline(p) =~ "^\\s*$" + endwhile + normal! 0V + call cursor(curline, 0) + let p = line(".") + 1 + let nextblank = getline(p) =~ "^\\s*$" + while p <= lastline + \ && ((i == 0 && !nextblank) + \ || (i > 0 && ((indent(p) >= i + \ && !(nextblank && a:inner)) + \ || (nextblank && !a:inner)))) + + + let p = line(".") + 1 + let nextblank = getline(p) =~ "^\\s*$" + endwhile + normal! $ + endif + endfunction + +endif