[vim] Re: function au bufenter
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 :0CR/^$CR map ;par ;videCR:.,$normal vgqCR voici ce que je veux faire: map ;para ;videCR/^.\{75\}.\+$CRv/\.$CRgqj 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 sidToto()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
Re: [vim] Re: function au bufenter
Le mercredi 15 janvier 2003 à 15:58, Luc Hermitte a écrit: Salut, Lut, 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. oki oki... je promet que je vais me pencher sur la question...mais j'ai pas trop le courage ;) * 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 :0CR/^$CR map ;par ;videCR:.,$normal vgqCR voici ce que je veux faire: map ;para ;videCR/^.\{75\}.\+$CRv/\.$CRgqj 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 marche pas il me fait: Syntax error in \{...} Sinon, j'imagine que tu considères que les paragraphes sont délimités par des points et non par des lignes vides. maintenant voici comment je fais: map ;par ;videCR:.,$g/^.\{75\}.\+$/normal V)gqCR autocmd BufRead .followup,.article*,.letter,/tmp/mutt*,*.txt normal ;par 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é): J'ai pas dis que c'était sale... Je voulais juste evité car je n'ai pas assez de connaissance en script vim... mais avec ton exemple ça ira mieux :) function s:Toto() A quoi sert le s: d'après ce que j'ai compris tu n'en a pas besoin si tu appelle ta fonction avec une majuscule ? 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'} ^ ' est vraiment utile ? +-- 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 sidToto()cr ^ ??? Cool... Tu as de la doc pour apprendre a faire des scripts vim je n'en trouve pas... a part regarder les scripts des autres ;). Par contre, c'est totalement inadapté à des messages comme celui-ci qui contient du code. Pour quel raison c'est inadequat ? Merci . -- @+, Sébastien aka. MichouX J'ai réalisé que j'étais un fan de Vim quand je l'utilisais pour éditer mon .emacs, GnuVince
[vim] Re: function au bufenter
* On Wed, Jan 15, 2003 at 07:18:05PM +0100, Sébastien MICHEL [EMAIL PROTECTED] wrote: 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 marche pas il me fait: Syntax error in \{...} Il faut passer par :exe dans ces cas là. nnoremap ;para gg'}:exe '/^.\{'.(1+tw).'\}'CRgq/\.$CRj nnoremap ;vide gg'} function s:Toto() A quoi sert le s: d'après ce que j'ai compris tu n'en a pas besoin si tu appelle ta fonction avec une majuscule ? A ne par polluer l'espaces des noms partagés par tous les scripts chargés en mémoire. Ainsi, les fichier toto.vim et titi.vim peuvent chacun définir une fonction s:Toto() sans qu'il y ait collision ou ambiguité. :normal! gq'} ^ ' est vraiment utile ? Plutôt. Tu ne peux pas être sûr qu'un jour où l'autre tu ne vas pas utiliser les scripts de quelqu'un (ou le contraire) qui à remappé «gq» ou «q'». C'est une sécurité au même titre que _nore_map. :nnoremap ;doit gg'}:call sidToto()cr ^ ??? Fait référence à la fonction s:Toto() qui est définie dans le fichier courant. Cool... Tu as de la doc pour apprendre a faire des scripts vim je n'en trouve pas... a part regarder les scripts des autres ;). Ce fut ma doc principale à mes débuts. Ensuite, il y a quelques tips de qualité sur sourceforge et la doc en ligne. Je ne sais pas ce que vaut le bouquin sur vim. Je crois savoir qu'il est est aussi dispo en version électronique. Par contre, c'est totalement inadapté à des messages comme celui-ci qui contient du code. Pour quelle raison c'est inadequat ? Si le code que je tape fait disons 75 caractères de large et que tu y réponds, alors mutt rajoutes ' ' devant chaque ligne, ce qui les passe à 77 caractères. En applicant ta macro automatiquement, toute la partie correspondante va être saccagée. Vim ne saura pas formatter le code vu qu'il est en mode message électronique (mail ou article). -- Luc Hermitte