(Courriels de diversion: <grapheme@redoraient-affacturer.com> <relogerez@frise-taira.com> <placa@bas-fonds-repu.com> <graisserez@rattacheriez-ciselent.com> <allegeraient@labouriez-accomplissent.com> <suivantes@refroidisse-catalyserait.com> <attardez@ostracismes-defectueuse.com> <reinstallee@curiste-approximation.com> <inaugurions@charcuterait-encollent.com> <baba@tromperas-etaieras.com> )
Salut! culte@externe.net (Guylhem XXXX) wrote in20030729014304.110e49a6.culte@externe.net:">news:20030729014304.110e49a6.culte@externe.net: > Auriez vous une idée pour un regexp s'appliquant de manière multiligne > sous vi ? :h /\_ > Mes exemples : > > 1. Insertion de caractères multi ligne > <i>a > b > c > d</i> > > doit devenir: > <i>a<br> > b<br> > c<br> > d</i><br><br> 1) Sélectionne les lignes qui vont bien 2) :'<,'>s#\(</i>\)\=$#\=((submatch(1)!='')?'</i><br><br>':'<br>')# Avec un mapping, cela devient :vnoremap µ :s#\(</i>\)\=$#\=((submatch(1)!='')?'</i><br><br>':'<br>')# <cr> :h submatch() > 2. Fusion de lignes > 001.1 aaa > jj: > kkk > lll > 004.6 bbb > ccc > dd > 001.2 eee > fff > 002.5 ggg > > doit devenir: > > 001.1 aaa (jjj: kkk,lll) > 004.6 bbb (ccc) (dd) > 001.2 eee (fff) > 002.5 ggg > > c'est à dire si ça commence pas par au moins 3 nombres, on fusionne le > tout en mettant entre parenthèse chaque ligne, sauf s'il y a deux > points, dans quel cas on fait une liste. 1) Sélectionne les lignes qui vont bien 2) :'<,'>v#\d\{3}# s/.*/(\0)/ | exe "normal! \<up>J" Soit avec un mapping: :vnoremap µ :v#\d\{3}# s/.*/(\0)/ \| normal! kJ<cr> [finalement, vous aviez raison, ça peut être sympa d'enchainer un :substitute sur un :global ;-) ] > Une brève recherche sur google et le help regexp de vim me laissent > supposer que non. ":h regexp" pour avoir la meilleure (ie: la plus complète) aide qui soit pour les regex sous vim. > Vous vous demandez sans doute pourquoi diable en vim lorsque perl > marche ? Au pire, ":h perl" si tu sèches avec Vim et que tu connais bien perl. > Pour le regexp 1, idem ce serait mappé à une touche et fonctionnel > dans le bloc <i> </i> dans lequel se trouve actuellement le curseur. Donc, il te faudrait aussi: function! s:SelectI() " pas testé let lig = searchpair('<i>', '</i>') if lig > 0 " Je suppose que matchit.vim est correctment pour ton type de " fichier courant normal v%µ " Rem: pas d'exclamation à ce :normal endif endfunction :vnoremap µ :s#\(</i>\)\=$#\=((submatch(1)!='')?'</i><br><br>':'<br>')# <cr> :nnoremap µ :call <sid>SelectI()<cr> > Bonne prise de tête :-) Non, ce fut rapide, j'ai réussi à éviter tous les \@xxx A+ -- Luc Hermitte http://hermitte.free.fr/vim/ -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>