setlocal textwidth=68 setlocal formatoptions-=o setlocal formatoptions-=r " for format_flowed "setlocal formatoptions+=aw "setlocal nolist "augroup listinsert " autocmd! "augroup end "augroup tsperrorinsert " autocmd! "augroup end "setlocal spell " Dynamically set format options, depending on where you are in a " mail, idea from Teemu Likonen: " http://groups.google.com/group/vim_use/msg/f59e5c1adc6be2b3 let d_fo = &fo let s:defaults = 'setlocal tw=68 ts=2 sts=2 sw=2 fo='.d_fo execute s:defaults let b:MailAreaDetect=1 "nnoremap ma1 :call MailAreaDetect_On() " \ echo 'MailAreaDetect On' "nnoremap ma0 :call MailAreaDetect_Off() " \ echo 'MailAreaDetect Off' nnoremap :call MailAreaDetect_Switch(0) inoremap :call MailAreaDetect_Switch(1) function! s:MailAreaDetect_Switch(vmode) if b:MailAreaDetect silent call MailAreaDetect_Off() let b:MailAreaDetect=0 echo 'MailAreaDetect Off' if a:vmode sleep 1 endif else silent call MailAreaDetect_On() let b:MailAreaDetect=1 echo 'MailAreaDetect On' if a:vmode sleep 1 endif endif endfu function! s:MailAreaDetect_On() silent autocmd! MailAreaDetect CursorMoved,CursorMoved \ call AreaOptions() let b:MailAreaDetect=1 endfunction function! s:MailAreaDetect_Off() silent autocmd! MailAreaDetect execute s:defaults let b:MailAreaDetect=0 endfunction augroup MailAreaDetect autocmd! call MailAreaDetect_On() augroup END function! s:AreaOptions() execute s:defaults if CheckArea('\v^From( |: ).*\n','\v^$') "echo 'Header' setlocal fo-=a fo-=w fo-=t sts=0 sw=2 noet elseif getline('.') =~ '\m^\s*>' "echo 'Quotation' setlocal fo-=a fo-=w elseif CheckArea('\m^--- .*\n^+++ ','\v(^$|\n^-- $)') "echo 'Patch' setlocal fo-=a fo-=w fo-=t sts=0 sw=2 noet elseif CheckArea('^-- $','^$') "echo 'Signature' setlocal fo-=a fo-=w fo-=t sts=0 sw=2 noet else "echo 'My text' setlocal fo+=aw et endif endfunction function! s:CheckArea(start, end) return (search(a:start,'bcnW')-line('.')) > \ (search(a:end,'bnW')-line('.')) endfunction augroup tsperrorinsert au! augroup END match none /\s\+$/ augroup listinsert au! augroup END set nolist nmap :w:%!mailplate --keep-unknown official nmap :w:%!mailplate --keep-unknown tahi nmap :w:%!mailplate --keep-unknown pmvm nmap :w:%!mailplate --keep-unknown pobox nmap :w:%!mailplate --keep-unknown debian nmap :w:%!mailplate --keep-unknown debconf nmap :w:%!mailplate --keep-unknown uniwh nmap :w:%!mailplate --keep-unknown mtfk nmap :w:%!mailplate --keep-unknown sudetia nmap :w:%!mailplate --keep-unknown private nmap :w:%!mailplate --auto --keep-unknown 2>/dev/null " change subject line " Before: Subject: old " After : Subject: New (was: old) " http://strcat.de/wiki/dotfiles#vim " map ,sw 1G/^Subject: :s/Re:/was:/Wi ($)0Whi map ns 1G/^Subject: /:s,\(Subject: \)\(Re: \)*\(.*\)$,\1 (was: \3),:set nohlsf li " Delete 'was' in the Subject. " Before: Subject: New (was: old) " After : Subject: New " http://strcat.de/wiki/dotfiles#vim map dw 1G/^Subject: /:s, *(was: .*)$:set nohlsf l " http://dollyfish.net.nz/blog/2008-04-01/mutt-and-vim-custom-autocompletion fun! LBDBCompleteFn(findstart, base) let line = getline('.') if a:findstart " locate the start of the word let start = col('.') - 1 while start > 0 && line[start - 1] =~ '[^:,]' let start -= 1 endwhile while start < col('.') && line[start] =~ '[:, ]' let start += 1 endwhile return start else let res = [] let query = substitute(a:base, '"', '', 'g') let query = substitute(query, '\s*<.*>\s*', '', 'g') for m in LbdbQuery(query) call complete_add(printf('"%s" <%s>', escape(m[0], '"'), m[1])) if complete_check() break endif endfor return res endif endfun set completefunc=LBDBCompleteFn " And this magic by James Vega, which ensures that we only complete with lbdb " on the recipient lines of the mail header. inoremap DelegateCompletion(1) inoremap DelegateCompletion(0) fun! DelegateCompletion(next) if getline('.') =~? '^\%(To\|B\=Cc\):' return "\x18\x15" elseif a:next return "\x0e" else return "\x10" endif endfun