setlocal textwidth=68 setlocal formatoptions-=o setlocal formatoptions-=r setlocal formatoptions-=l setlocal formatoptions+=a setlocal formatoptions+=w setlocal formatoptions+=n setlocal formatexpr= 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' " else " silent call MailAreaDetect_On() " let b:MailAreaDetect=1 " echo 'MailAreaDetect On' " 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 krafftwerk nmap :w:%!mailplate --keep-unknown siby 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 " packadd lbdbq " " 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 " setlocal 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(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 runtime! greeting_abbrevs.vim