Salut,

Je suis intrigué par le titre de ton message ... Pourquoi continues-tu à
utiliser des autocommands ? Procéder avec les mail ftplugins est bien
plus propre.

* On Wed, Jan 15, 2003 at 01:18:06PM +0100, Sébastien MICHEL <[EMAIL PROTECTED]> 
wrote:
>   Je suis entrain de revoir mes fonction de remise en forme
> de mail.
> Voici ce que j'ai pour l'instant
> map ;vide :0<CR>/^$<CR>
> map ;par ;vide<CR>:.,$normal vgq<CR>
> 
> voici ce que je veux faire:
> map ;para ;vide<CR>/^.\{75\}.\+$<CR>v/\.$<CR>gqj

Utilises &tw plutot que 75. Comme ça si un jour tu veux changer de
valeur ou en faire profiter d'autres personnes, tu n'auras rien d'autre
à faire qu'un :
    :set tw=72

Sinon, j'imagine que tu considères que les paragraphes sont délimités par
des points et non par des lignes vides.

> mais j'aimerai le faire dans une boucle du genre
> while /^.\{75\}.\+$
>       ;para
> endwhile

> L'ideale serai de ne pas touche ma signature aussi... ;)
> je vais essayer de remplacer ce while par un g// pour eviter
> la creation d'une fonction mais c'est pas gagné ;p

Faire des fonctions n'a rien de sale. C'est bien plus lisible et
maintenable que les mappings 100 vi (sans 'm').
Pourquoi pas un truc du style (pas testé):


function s:Toto()
    let pos = line('.')
    normal! G
    let fin = search('^-- $', 'b')
    if fin <= 0 | let fin = line('$') | endif
    exe pos
    while pos < fin
        let pos = search('^.\{'.&tw.'}.\+$', 'W') 
        " Sans le 'W', la function pourrait boucler et revenir à la
        " section des entêtes. Chose que fait aussi '/' si 'wrapscan'
        " n'est pas mis à faux.
        if pos <= 0
            break 
        endif
        :normal! gq/\.$j
        " forme simplifiée sans passer par 'v' vu que 'gq' nous laisse
        " dans l'/operator-pending mode/, cf |motion.txt|
        " :normal! gq'} 
        "   +--> pour: jusqu'à la fin du paragraphe plutot que le point
        "        suivant. Tout le monde ne pense pas à mettre des points
        "        à la fin ses phrases. Sauter des lignes est plus
        "        fréquent.
    endwhile
endfunction

:nnoremap ;doit gg'}:call <sid>Toto()<cr>

Par contre, c'est totalement inadapté à des messages comme celui-ci qui
contient du code.

-- 
Luc Hermitte
http://hermitte.free.fr/vim/mail.php3

Répondre à