Re: vim e paragrafi giustificati
On Jun 02, Franco Vite <franco@firenze.linux.it> wrote:
> piú per curiositá che per reale necessitá, ho dato un'occhiata
> in rete (google e archivi della lista), per vedere di capire
> come si fa a giustificare i paragrafi nelle mail (mutt) usando vim.
Un vecchio script che trovi nel mio vimrc (fatto secoli fa, si
puo` sicuramente fare di meglio). Quello che fa e` lasciare
intatto quello che scrivi tu, che si suppone gia` correttamente
formattato, e mette a posto tutta la parte quotata (che spesso e
volentieri e` stata scritta da un animale).
" inizio della funzione
com Vbq :let strl = line('.')<Bar>:%call VeryBeautyQuote()<Bar>:exec strl
function VeryBeautyQuote (...) range
set report=32000
let cur = a:firstline
" per tutto il range
while cur <= a:lastline
let str = getline(cur)
" identifica il quote
let comm = matchstr(str, '^>\(\a\{-,3}[>|]\|[> \t|]\)\{,5}')
let newcomm = comm
let commlen = strlen(comm)
let filelen = line('$')
if commlen > 0
let startl = cur
while newcomm == comm
" strip del quote
let txt = substitute(str, '^>\(\a\{-,3}[>|]\|[> \t|]\)\{,5}', '', '')
call setline(cur, txt)
let cur = cur + 1
let str = getline(cur)
let newcomm = matchstr(str, '^>\(\a\{-,3}[>|]\|[> \t|]\)\{,5}')
endwhile
let cur = cur - 1
execute startl . ',' . cur . '!fmt -' . (72 - commlen)
" se la lunghezza del file e` cambiata...
let lendiff = filelen - line('$')
if lendiff != 0
let cur = cur - lendiff
endif
" riposiziona il quote
execute startl . ',' . cur . 's/^/' . comm . '/g'
endif
let cur = cur + 1
endwhile
endfunction
" fine
Va aggiunta nel ~/.vimrc e poi, quando vuoi, esegui il comando :Vbq
Per fare in modo che iniziando un nuovo messaggio/reply, in mutt, il
cursore sia posizionato al punto giusto (dopo "Subject: " se questo e`
vuoto, altrimenti dopo l'attribuzione del messaggio cui si risponde), puoi
mettere, nel ~/.muttrc la riga:
set editor="vim -c ':Fip'"
Poi, nel ~/.vimrc usi lo script:
com Fip :set tw=76<Bar>:%call FirstInPost()
function FirstInPost (...) range
let cur = a:firstline
while cur <= a:lastline
let str = getline(cur)
if str == 'Subject: '
execute cur
:start!
break
endif
if str == ''
let cur = cur + 1
if strlen(matchstr(getline(cur), '^On.*wrote:.*')) > 0
let cur = cur + 1
endif
execute cur
:start
break
endif
let cur = cur + 1
endwhile
endfunction
--
(=---= alberanid@libero.it =------------= PGP KeyID: 0x465BFD47 =---=)
) Davide Alberani (
(=-= http://digilander.libero.it/alberanid/ =-= ICQ UIN: 83641305 =-=)
Reply to: