(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/>