setlocal textwidth=68 setlocal formatoptions-=o setlocal formatoptions-=r setlocal formatoptions-=l setlocal formatoptions+=a setlocal formatoptions+=w setlocal formatoptions+=n setlocal comments=n:> "setlocal spell augroup tsperrorinsert au! augroup END match none /\s*$/ augroup listinsert au! augroup END setlocal list " 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 s:defaults = "setlocal fo=".&fo " tw=".&tw." ts=".&ts." sts=".&sts." sw=".&sw." fo=".&fo execute s:defaults let b:MailAreaDetect=1 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 let s:synCur = synIDattr(synID(line("."),1,0),"name") let s:synNext = synIDattr(synID(line(".")+1,1,0),"name") if s:synNext =~ '^mailQuote' && s:synCur == '' && getline('.') =~ '^.' " elseif getline('.') =~ '^\s*[^>]' && getline(line('.')+1) =~ '\m^\s*>' setlocal fo-=a "echo 'Quotation leader (fo='.&fo.')' elseif s:synCur =~ '^mailQuote' " elseif getline('.') =~ '\m^\s*>' setlocal fo-=a "echo 'Quotation (fo='.&fo.')' elseif CheckArea('\m^--- .*\n^+++ ','\v(^$|\n^-- $)') setlocal fo-=a fo-=w fo-=t noet "echo 'Patch (fo='.&fo.')' elseif s:synCur == '' && s:synNext =~ '^mailSignature' " elseif getline(line('.')+1) =~ '\m^-- $' setlocal fo-=a fo-=w fo-=t "echo 'Last line before signature (fo='.&fo.')' elseif s:synCur =~ '^mailSignature' " elseif CheckArea('^-- $','^$') setlocal fo-=a fo-=w fo-=t "echo 'Signature (fo='.&fo.')' elseif s:synCur =~ '^mail' " if CheckArea('\v^From( |: ).*\n','\v^$') setlocal fo-=a fo-=w fo-=t "echo 'Header (fo='.&fo.')' else "echo 'My text (fo='.&fo.')' endif endfunction function! s:CheckArea(start, end) return (search(a:start,'bcnW')-line('.')) > \ (search(a:end,'bnW')-line('.')) endfunction function! FixQuotes() let l:i = 0 let l:lineNxt = getline(l:i) let l:synNxt = synIDattr(synID(l:i,1,0),"name") while l:i < line('$')-1 let l:lineCur = l:lineNxt let l:synCur = l:synNxt let l:lineNxt = getline(l:i+1) let l:synNxt = synIDattr(synID(l:i+1,1,0),"name") if l:synCur =~ '^mailQuote' && l:lineCur =~ '\w.*\S$' && \ l:synNxt =~ '^mailQuote' && l:lineNxt =~ '\w' call setline(l:i, l:lineCur . ' ') endif let l:i += 1 endwhile endfunction augroup fixquotes au! autocmd BufWinEnter $TMPDIR/mutt-* call FixQuotes() augroup END nmap :w:%!mailplate --keep-unknown official nmap :w:%!mailplate --keep-unknown pobox nmap :w:%!mailplate --keep-unknown tahi nmap :w:%!mailplate --keep-unknown toni nmap :w:%!mailplate --keep-unknown kbkg nmap :w:%!mailplate --keep-unknown debian nmap :w:%!mailplate --keep-unknown uniwh nmap :w:%!mailplate --keep-unknown mtfk nmap :w:%!mailplate --keep-unknown sudetia nmap :w:%!mailplate --keep-unknown default 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 function! WriteMailBackup() let l:tmpdir = fnameescape((exists('$TMPDIR') ? expand('$TMPDIR') : '/tmp')) let l:tgtdir = l:tmpdir . '/mail-backups' call mkdir(l:tgtdir, "p", 0o700) let l:modified = &modified let l:filename = l:tgtdir . '/' . strftime('%Y-%m-%d-%H%M%S') . '.msg' exe 'silent update! ' . l:filename if 0 && l:modified echo 'Backup written to ' . l:filename endif endfunction autocmd BufWritePre call WriteMailBackup() let g:markdown_in_mail = 1 runtime! ftplugin/markdown.vim