X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=vimrc;h=e209796979a08a4f66f23a6a80a387538415d569;hb=1c420fe0d57fd9e8bfbe59ab3fccca48f2f9ae2b;hp=35edbdfd31b057f2f582cfe370fccd0c9d979b5c;hpb=6809eb2f93254f331798c1474e15f280dd476414;p=config%2Fdotfiles.git diff --git a/vimrc b/vimrc index 35edbdf..e209796 100644 --- a/vimrc +++ b/vimrc @@ -53,7 +53,7 @@ set history=1000 set undolevels=1000 " Use strong encryption if possible, also used for swap/undo files. -if v:version >= 703 +if exists('+cryptmethod') set cryptmethod=blowfish endif @@ -120,7 +120,7 @@ set smartcase " Activate spell checking, use English as default. Don't use spell checking " when diffing. -if v:version >= 700 && has('syntax') && !&diff +if exists('+spell') && has('syntax') && !&diff set spell set spelllang=en_us endif @@ -140,7 +140,7 @@ set background=dark set number " But use as little space as necessary for the numbers column. Thanks to James " Vega (http://git.jamessan.com/?p=etc/vim.git;a=summary). -if v:version >= 700 +if exists('+numberwidth') set numberwidth=1 endif " Display the ruler with current line/file position. If 'statusline' is used @@ -154,7 +154,7 @@ set showcmd set lazyredraw " Visualize the line the cursor is currently in. -if v:version >= 700 +if exists('+cursorline') set cursorline endif @@ -227,6 +227,10 @@ cnoremap " 20:02 CEST). To suspend without saving either unmap it or use :stop. nnoremap :update:stop +" 2 gives more verbose information, use it by default. Thanks to NCS_One +" in #vim on Freenode (2011-08-15 00:17 CEST). +nnoremap 2 + " Use to move down a page and - to move up one like in mutt. nnoremap nnoremap - @@ -253,7 +257,7 @@ nnoremap O po " Maps to change spell language between English and German and disable spell " checking. -if v:version >= 700 +if exists('+spell') noremap sn :set nospell noremap se :set spell spelllang=en_us noremap sd :set spell spelllang=de_de @@ -341,21 +345,42 @@ if has('syntax') " Don't highlight more than 500 columns as I normally don't have that long " lines and they slow down syntax coloring. Thanks to Derek Wyatt " (http://www.derekwyatt.org/vim/the-vimrc-file/). - set synmaxcol=500 + if exists('+synmaxcol') + set synmaxcol=500 + endif " Highlight lines longer than 78 characters. Thanks to Tony Mechelynck " from the Vim mailing list. It can easily be " disabled when necessary with :2match (in Vim >= 700). - if v:version >= 700 + if exists(':2match') 2match Todo /\%>78v./ else match Todo /\%>78v./ endif -" Highlight TODO, FIXME, CHANGED and XXX in all documents. - if v:version > 701 || (v:version == 701 && has('patch42')) - call matchadd('Todo', '\(TODO\|FIXME\|CHANGED\|XXX\)') + if exists('*matchadd') +" Highlight some important keywords in all documents. + for x in ['TODO', 'XXX', 'FIXME', 'CHANGED', 'REMOVED', 'DELETED'] + call matchadd('Todo', x) + endfor + +" Highlight unicode whitespace which is no normal whitespace (0x20). + for x in ['00a0', '1680', '180e', '2000', '2001', '2002', '2003', + \ '2004', '2005', '2006', '2007', '2008', '2009', '200a', + \ '200b', '200c', '200d', '202f', '205f', '2060', '3000', + \ 'feff'] + call matchadd('Error', '\%u' . x) + endfor endif + +" Settings for specific filetypes. + + " Perl. + let g:perl_fold = 1 + let g:perl_fold_blocks = 1 + let g:perl_nofold_packages = 1 + let g:perl_include_pod = 1 " syntax coloring for PODs + endif @@ -364,8 +389,8 @@ endif " 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') - call pathogen#runtime_append_all_bundles() +if has('eval') && v:version >= 700 + execute 'call pathogen#runtime_append_all_bundles()' endif " Settings for the NERD commenter. @@ -394,6 +419,7 @@ endif " twice. if has('autocmd') augroup vimrc +" Remove all autocmds from the current group. autocmd! " Go to last position of opened files. Taken from :help last-position-jump. @@ -418,7 +444,12 @@ if has('autocmd') " Automatically disable 'paste' mode when leaving insert mode. Thanks to " Raimondi in #vim on Freenode (2010-08-14 23:01 CEST). Very useful as I only " want to paste once and then 'paste' gets automatically unset. - autocmd InsertLeave * set nopaste + if exists('##InsertLeave') + autocmd InsertLeave * set nopaste + endif + +" Save changes when running :mak[e] before 'makeprg' is called. + autocmd QuickFixCmdPre * write " AFTER/FTPLUGIN AUTO COMMANDS @@ -435,11 +466,10 @@ if has('autocmd') " the recommendation for git commit messages (http://tpope.net/node/106). autocmd FileType gitcommit let g:secure_modelines_allowed_items = [] | \ setlocal textwidth=72 -" Allow folding in perl. - autocmd FileType perl let perl_fold = 1 | - \ let perl_fold_blocks = 1 " Use the same comment string as for Vim files in Vimperator files. autocmd FileType vimperator setlocal commentstring=\"%s +" Use tex compiler for (La)TeX files. + autocmd FileType tex compiler tex " FTDETECT AUTO COMMANDS @@ -459,3 +489,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! 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