[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: