" vim:foldmethod=marker commentstring="%s " General options {{{ " Miscellaneous {{{ " fuck vi! long live vim! set nocompatible " indentation FTW.. also plugins FTW! heh filetype indent plugin on " automatically flush to disk when using :make, etc. set autowrite "}}} " Display {{{ " color! syntax on " lines, cols in status line set ruler " current mode in status line set showmode " display the number of (characters|lines) in visual mode, also cur command set showcmd " a - terse messages (like [+] instead of [Modified] " t - truncate file names " I - no intro message when starting vim fileless set shortmess=atI " no extra status lines set laststatus=0 " display as much of the last line as possible if it's really long " also display unprintable characters as hex set display=lastline,uhex " give three lines of context when moving the cursor around set scrolloff=3 " don't redraw the screen during macros etc (NetHack's runmode:teleport) set lazyredraw " highlight all matches, we'll see if this works with a different hilight set hlsearch " highlight matching parens for .2s set showmatch set matchtime=2 " threshold for reporting number of lines changed set report=0 " highlight advanced perl vars inside strings let perl_extended_vars=1 " POD! let perl_include_pod=1 " I generally don't want to have to space through things.. :) set nomore "}}} " Improve power of commands {{{ " incremental search! set incsearch " make tilde (flip case) an operator set tildeop " backspace over autoindent, end of line (to join lines), and preexisting test set backspace=indent,eol,start " add the dictionary to tab completion set dictionary=/usr/share/dict/words set complete+=k " tab completion in ex mode set wildmenu " when doing tab completion, ignore files with any of the following extensions set wildignore+=.log,.out,.o " remember lotsa fun stuff set viminfo=!,'1000,f1,/1000,:1000,<1000,@1000,h,n~/.viminfo " add : as a file-name character (mostly for Perl's mod::ules) set isfname+=: "}}} " Make vim less whiny {{{ " :bn with a change in the current buffer? no prob! set hidden " no bells whatsoever set vb t_vb= " if you :q with changes it asks you if you want to continue or not set confirm " 100 milliseconds for escape timeout instead of 1000 set ttimeoutlen=100 "}}} " Indentation {{{ " no-longer skinny tabs! set tabstop=4 " set to the same as tabstop (see #4 in :help tabstop) set shiftwidth=4 " if it looks like a tab, we can delete it like a tab set softtabstop=4 " no tabs! spaces only.. set expandtab " < and > will hit indentation levels instead of always -4/+4 set shiftround " new line has indentation equal to previous line set autoindent " braces affect autoindentation set smartindent " figure out indent when ; is pressed set cinkeys+=; " align break with case in a switch set cinoptions+=b1 "}}} " Folding {{{ " fold only when I ask for it damnit! set foldmethod=marker " close a fold when I leave it set foldclose=all "}}} "}}} " Colors {{{ " miscellaneous {{{ set bg=light " }}} " word completion menu {{{ highlight Pmenu ctermfg=grey ctermbg=darkblue highlight PmenuSel ctermfg=red ctermbg=darkblue highlight PmenuSbar ctermbg=cyan highlight PmenuThumb ctermfg=red highlight WildMenu ctermfg=grey ctermbg=darkblue "}}} " folding {{{ highlight Folded ctermbg=black ctermfg=darkgreen "}}} " hlsearch {{{ highlight Search NONE ctermfg=lightred "}}} "}}} " Autocommands {{{ " When editing a file, always jump to the last cursor position {{{ autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif "}}} " Skeletons {{{ autocmd BufNewFile *.pl silent 0read ~/.vim/skeletons/perl.pl | normal G autocmd BufNewFile *.pm silent 0read ~/.vim/skeletons/perl.pm | normal G3k autocmd BufNewFile *.c silent 0read ~/.vim/skeletons/c.c | normal 4j$ autocmd BufNewFile *.hs silent 0read ~/.vim/skeletons/haskell.hs | normal Gk$ "}}} " Auto +x {{{ au BufWritePost *.sh !chmod +x % au BufWritePost *.pl !chmod +x % "}}} " Automatically invoke darcs record on writing vimrc {{{ autocmd BufWritePost ~/.vimrc !cd /home/sartak/devel/conf/ && darcs record autocmd BufWritePost ~/devel/conf/vimrc !cd /home/sartak/devel/conf/ && darcs record "}}} " Perl :make does a syntax check {{{ autocmd FileType perl setlocal makeprg=$VIMRUNTIME/tools/efm_perl.pl\ -c\ %\ $* autocmd FileType perl setlocal errorformat=%f:%l:%m autocmd FileType perl setlocal keywordprg=perldoc\ -f "}}} "}}} " Insert-mode remappings/abbreviations {{{ " Hit in insert mode after a bad paste (thanks absolon) {{{ inoremap u:set paste.:set nopastegi "}}} " Words I misspell.. {{{ iabbrev lamdba lambda "}}} " Normal-mode remappings {{{ " spacebar (in command mode) inserts a single character before the cursor nmap i r " have Y behave analogously to D rather than to dd nmap Y y$ nnoremap \\ \ nmap \/ :nohl nmap \s :syntax sync fromstart nmap \m :set syn=mason:syntax sync fromstart nmap \n :set invnumber nmap \c :make " darcs convenience mappings {{{ nmap \da :execute 'w !darcs add %' nmap \dA :execute 'wa !darcs amend-record' nmap \dr :execute 'wa !darcs record' nmap \dR :execute 'w !darcs record %' nmap \dn :execute 'wa !darcs whatsnew less' nmap \dN :execute 'w !darcs whatsnew % less' nmap \dd :execute 'wa !darcs diff -u less' nmap \dD :execute 'w !darcs diff -u % less' nmap \dc :execute '!darcs changes less' nmap \dqm :execute '!darcs query manifest less' nmap \dt :execute '!darcs tag' nmap \dp :execute '!darcs push' nmap \du :execute '!darcs unrecord' nmap \db :execute "w :execute '!darcs revert %' :execute 'e'" nmap \dB :execute "w :execute '!darcs unrevert %' :execute 'e'" "}}} nmap :bn nmap :bp " damnit cbus, you've won me over vnoremap < >gv " Make the tab key useful {{{ function TabWrapper() if strpart(getline('.'), 0, col('.')-1) =~ '^\s*$' return "\" elseif exists('&omnifunc') && &omnifunc != '' return "\\" else return "\" endif endfunction imap =TabWrapper() "}}} " Painless spell checking (F11) {{{ function s:spell() if !exists("s:spell_check") || s:spell_check == 0 echo "Spell check on" let s:spell_check = 1 setlocal spell spelllang=en_us else echo "Spell check off" let s:spell_check = 0 setlocal spell spelllang= endif endfunction map :call spell() imap :call spell() "}}} "}}} " Text object ('i,' and 'a,') for function parameters {{{ " Notes: " * "i," can't be used to select several parameters with several uses of " "i," ; use "a," instead (-> va,a,a,). This is because of single " letter parameters. " However, "v2i," works perfectly. " * Vim7+ only " * The following should be resistant to &magic, and other mappings onoremap i, :call SelectParam(1,0) xnoremap i, :call SelectParam(1,1)gv onoremap a, :call SelectParam(0,0) xnoremap a, :call SelectParam(0,1)gv function! s:SelectParam(inner, visual) let pos = getpos('.') if a:visual ==1 && s:CurChar("'>") =~ '[(,]' normal! gvl else let b = searchpair('\V(\zs','\V,\zs','\V)','bcW','s:Skip()') if 0 == b throw "Not on a parameter" endif normal! v endif let cnt = v:count <= 0 ? 1 : v:count while cnt > 0 let cnt -= 1 let e = searchpair('\V(', '\V,','\V)', 'W','s:Skip()') if 0 == e exe "normal! \" call setpos('.', pos) throw "Not on a parameter2" endif if cnt > 0 normal! l endif endwhile if a:inner == 1 normal! h endif endfunction function! s:CurChar(char) let c = getline(a:char)[col(a:char)-1] return c endfunction func! s:Skip() return synIDattr(synID(line('.'), col('.'), 0),'name') =~? \ 'string\|comment\|character\|doxygen' endfun " }}} " Plugin configuration {{{ " Rainbowy parens, braces, and brackets {{{ let g:rainbow = 1 let g:rainbow_nested = 1 let g:rainbow_paren = 1 let g:rainbow_brace = 1 let g:rainbow_bracket = 1 "autocmd BufReadPost * source $HOME/.vim/rainbow_paren.vim "autocmd BufNewFile * source $HOME/.vim/rainbow_paren.vim "}}} " YankRing {{{ "let g:yankring_n_keys = 'yy,dd,cc,yw,dw,cw,ye,de,ce,yE,dE,cE,yiw,diw,ciw,yaw,daw,caw,y$,d$,c$,Y,D,C,yG,dG,cG,ygg,dgg,cgg,yi{,di{,ci{,ya{,da{,ca{,yip,dip,cip,yap,dap,cap,yi(,di(,ci(,ya(,da(,ca(,yi/,di/,ci/,ya/,da/,ca/,yi[,di[,ci[,ya[,da[,ca[,yW,dW,cW,yit,dit,cit,yat,dat,cat,yi<,di<,ci<,ya<,da<,ca<' let g:yankring_n_keys = 'yy,dd,yw,dw,ye,de,yE,dE,yiw,diw,yaw,daw,y$,d$,Y,D,yG,dG,ygg,dgg,yi{,di{,ya{,da{,yip,dip,yap,dap,yi(,di(,ya(,da(,yi/,di/,ya/,da/,yi[,di[,ya[,da[,yW,dW,yit,dit,yat,dat,yi<,di<,ya<,da<' function! YRRunAfterMaps() nnoremap Y :YRYankCount 'y$' endfunction " }}} "}}} " }}}