X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=vimrc;h=c3a85eb20042b900e658becc8ca0d7e0b2e71469;hb=b122832efa953ed888415f7a3959d4cbeae6e265;hp=b4e44dcb487bd3f6017a9f289189abb6c5359f4b;hpb=fdffc1631ecbd8da645304a30a8ace5bc2a137c7;p=config%2Fdotfiles.git diff --git a/vimrc b/vimrc index b4e44dc..c3a85eb 100644 --- a/vimrc +++ b/vimrc @@ -3,14 +3,6 @@ " EDITOR SETTINGS -" Prevent editing as root as it may cause security problems. Use sudoedit -" instead. Thanks to godlygeek in #vim on Freenode (2009-06-19 22:21 CEST). -if $HOME == '/root' || exists('$SUDO_USER') - echomsg 'Running as root is forbidden! Use sudoedit.' - qall -endif - - " Save 'runtimepath' in case it was changed by the system's configuration " files. if has('eval') @@ -22,6 +14,7 @@ set all& " And restore it after all other options were reset. if has('eval') let &runtimepath = s:save_runtimepath + unlet s:save_runtimepath endif " Make sure Vim (and not Vi) settings are used. @@ -34,6 +27,8 @@ set runtimepath^=~/.vim,~/.vim/runtime " Don't store swap files in the same directory as the edited file. set directory-=. +" But store them in ~/.tmp if available. +set directory^=~/.tmp " Disable modelines as they may cause security problems. Instead use " securemodelines (Vim script #1876). @@ -51,7 +46,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 @@ -60,6 +55,7 @@ endif " Enable automatic file detection, plugin and indention support. if has('autocmd') + filetype off " necessary for pathogen to force a reload of ftplugins filetype plugin indent on endif @@ -117,7 +113,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 @@ -137,7 +133,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 @@ -151,7 +147,7 @@ set showcmd set lazyredraw " Visualize the line the cursor is currently in. -if v:version >= 700 +if exists('+cursorline') set cursorline endif @@ -220,15 +216,18 @@ cmap cnoremap cnoremap +" Write before suspending, thanks to deryni in #vim on Freenode (2011-05-09 +" 20:02 CEST). To suspend without saving either unmap this 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 - -" Behave like 'scrolloff' but only while searching. Thanks to "Benjamin R. -" Haskell" from the Vim mailing list (2010-10-26). -nnoremap n nzv3j3k -nnoremap N Nzv3k3j - " Go to next and previous buffer. Thanks to elik in #vim on Freenode " (2010-05-16 18:38 CEST) for this idea. nnoremap gb :bnext @@ -246,12 +245,12 @@ nnoremap 8 :8b nnoremap 9 :9b nnoremap 0 :10b -" Make last active window the only window. Similar to o. +" Make last active window the only window. Similar to o. 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 @@ -314,8 +313,8 @@ if has('mac') || filereadable('/Users/.localized') endif " Disable Apple style movements in MacVim. -if has('gui_macvim') && has('eval') - let macvim_skip_cmd_opt_movement = 1 +if has('gui_macvim') + let g:macvim_skip_cmd_opt_movement = 1 endif " In case 'hlsearch' is used disable it with . Thanks to frogonwheels and @@ -339,30 +338,62 @@ 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. + + " Haskell. + let g:hs_highlight_boolean = 1 + let g:hs_highlight_types = 1 + let g:hs_highlight_more_types = 1 + + " 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 " PLUGIN SETTINGS +" 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 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 + let g:NERDCreateDefaultMappings = 0 endif " Map toggle comment. map NERDCommenterToggle @@ -385,6 +416,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. @@ -409,7 +441,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 @@ -426,11 +463,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 @@ -450,3 +486,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