Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Remplacer sous vi (linux)

15 réponses
Avatar
Kevin Denis
Bonjour,

j'ai des textes en HTML dans lesquels je dois ajouter des balises autour
de certain mots:
Exemple:
<P>
Ceci est un paragraphe blablabla
</P>

Doit être transformé en:
<P>
Ceci est un <p class="em_code">paragraphe</p> blablabla
</P>

J'essaie de trouver une méthode rapide me permettant d'arriver à réaliser
tout ceci rapidement. Idéalement, si je pouvais sélectionner un mot
ou un groupe de mots, puis, par une fonction automagique que les
balises s'ajoutent, cela me plairait bien.. Mais comment?

Système linux slackware:
kevin@zipslack:~$ vi --version
elvis 2.2.0

Merci
--
Kevin

10 réponses

1 2
Avatar
Olivier Miakinen
Le 26/09/2008 16:35, Kevin Denis a écrit :

j'ai des textes en HTML dans lesquels je dois ajouter des balises autour
de certain mots:
Exemple:
<P>
Ceci est un paragraphe blablabla
</P>

Doit être transformé en:
<P>
Ceci est un <p class="em_code">paragraphe</p> blablabla
</P>

J'essaie de trouver une méthode rapide me permettant d'arriver à réaliser
tout ceci rapidement. Idéalement, si je pouvais sélectionner un mot
ou un groupe de mots, puis, par une fonction automagique que les
balises s'ajoutent, cela me plairait bien.. Mais comment?



Si c'est 50 fois le même mot, tu peux tout substituer en une fois :
:%s/paragraphe/<p class="em_code">paragraphe</p>/g


Sinon, voici comment je procèderais.

1) définir une macro « , » qui insère la séquence du début et quitte le
mode insertion :
:map , i<p class="em_code">^[

2) définir une macro « ; » qui ajoute la séquence de fin et quitte le
mode insertion :
:map ; a</p>^[

(Note : le « ^[ » est un caractère Esc, que l'on saisit en tapant Ctrl-V
puis Esc)


3) Me positionner au début du mot ou du groupe de mots, taper « ,E; »
pour un mot, « ,EE; » pour deux mots, « ,EEE; » pour trois mots, et
ainsi de suite.

4) Recommencer pour chaque groupe de mots.
Avatar
François Meyer
Olivier Miakinen <om+ wrote:
Le 26/09/2008 16:35, Kevin Denis a écrit :

j'ai des textes en HTML dans lesquels je dois ajouter des balises autour
de certain mots:
Exemple:
<P>
Ceci est un paragraphe blablabla
</P>

Doit être transformé en:
<P>
Ceci est un <p class="em_code">paragraphe</p> blablabla
</P>

J'essaie de trouver une méthode rapide me permettant d'arriver à réaliser
tout ceci rapidement. Idéalement, si je pouvais sélectionner un mot
ou un groupe de mots, puis, par une fonction automagique que les
balises s'ajoutent, cela me plairait bien.. Mais comment?



Si c'est 50 fois le même mot, tu peux tout substituer en une fois :
:%s/paragraphe/<p class="em_code">paragraphe</p>/g


Sinon, voici comment je procèderais.

1) définir une macro « , » qui insère la séquence du début et quitte le
mode insertion :
:map , i<p class="em_code">^[

2) définir une macro « ; » qui ajoute la séquence de fin et quitte le
mode insertion :
:map ; a</p>^[

(Note : le « ^[ » est un caractère Esc, que l'on saisit en tapant Ctrl-V
puis Esc)


3) Me positionner au début du mot ou du groupe de mots, taper « ,E; »
pour un mot, « ,EE; » pour deux mots, « ,EEE; » pour trois mots, et
ainsi de suite.

4) Recommencer pour chaque groupe de mots.



Bonjour,

(On est un peu hors sujet mais bon puisqu'on est là...)

Ces suggestions sont très utiles mais elles ne
remplissent pas un besoin similaire à la question posée
que j'éprouve relativement souvent (par exemple en latex) :

sélectionner un bout de texte et
appliquer la macro qui va insérer qq chose avant,
insérer quelque chose après et terminer.

Le truc qui s'en rapproche le plus c'est :

1GiTruc_a_ajouter_devant esc Ga Truc_a_ajouter_apres esc

Mais évidemment, ça agit sur le fichier complet et non pas sur la
sélection.


--
François Meyer
Avatar
Nicolas George
François Meyer wrote in message
<48e0961d$0$1107$:
sélectionner un bout de texte et
appliquer la macro qui va insérer qq chose avant,
insérer quelque chose après et terminer.

Le truc qui s'en rapproche le plus c'est :

1GiTruc_a_ajouter_devant esc Ga Truc_a_ajouter_apres esc

Mais évidemment, ça agit sur le fichier complet et non pas sur la
sélection.



La sélection pose implicitement deux marques : '< et '>, au début et à la
fin. Il suffit de s'en servir.
Avatar
Olivier Miakinen
Le 29/09/2008 10:47, François Meyer a écrit :

(On est un peu hors sujet mais bon puisqu'on est là...)



C'est vrai, mais je n'ai pas trouvé de groupe plus adapté où rediriger
la suite de la discussion (toi non plus, je suppose). Il y en a bien un
pour emacs, fr.comp.applications.emacs, mais aucun consacré aux éditeurs
de texte en général (et bien sûr aucun consacré à vi ou vim).

Ces suggestions sont très utiles mais elles ne
remplissent pas un besoin similaire à la question posée
que j'éprouve relativement souvent (par exemple en latex) :

sélectionner un bout de texte et
appliquer la macro qui va insérer qq chose avant,
insérer quelque chose après et terminer.

Le truc qui s'en rapproche le plus c'est :

1GiTruc_a_ajouter_devant esc Ga Truc_a_ajouter_apres esc

Mais évidemment, ça agit sur le fichier complet et non pas sur la
sélection.



Ça agit sur le fichier *presque* complet. ;-)
(Oui, je sais, ce n'était qu'un exemple, mais bon, il suffit de
remplacer Ga par GA pour que ça marche.)

En fait, ayant appris à utiliser vi sur des terminaux avec clavier seul,
je n'ai jamais à jouer avec du texte sélectionné à la souris, et je ne
sais même pas s'il existe quelque chose, y compris dans vim. Du coup,
je change le titre pour l'adapter à cette nouvelle question : peut-on
sélectionner un texte à la souris dans vim, et se servir de cette
sélection pour une action particulière ?
Avatar
François Meyer
Nicolas George <nicolas$ wrote:
François Meyer wrote in message
<48e0961d$0$1107$:
sélectionner un bout de texte et
appliquer la macro qui va insérer qq chose avant,
insérer quelque chose après et terminer.

Le truc qui s'en rapproche le plus c'est :

1GiTruc_a_ajouter_devant esc Ga Truc_a_ajouter_apres esc

Mais évidemment, ça agit sur le fichier complet et non pas sur la
sélection.



La sélection pose implicitement deux marques : '< et '>, au début et à la
fin. Il suffit de s'en servir.



Certes.
Après un peu de lecture, ça donne par exemple :

Définir une macro associée à F10

:map <F10> `<i{begin}^[`>a{end}

A l'utilisation :

selectionner la zone en mode visuel, taper esc et appliquer la macro :

v(faire ce qu'il faut pour selectionner ce qu'il faut)
esc
F10

Merci.
--
François Meyer
Avatar
François Meyer
Olivier Miakinen <om+ wrote:
Le 29/09/2008 10:47, François Meyer a écrit :

(On est un peu hors sujet mais bon puisqu'on est là...)



C'est vrai, mais je n'ai pas trouvé de groupe plus adapté où rediriger
la suite de la discussion (toi non plus, je suppose). Il y en a bien un
pour emacs, fr.comp.applications.emacs, mais aucun consacré aux éditeurs
de texte en général (et bien sûr aucun consacré à vi ou vim).

Ces suggestions sont très utiles mais elles ne
remplissent pas un besoin similaire à la question posée
que j'éprouve relativement souvent (par exemple en latex) :

sélectionner un bout de texte et
appliquer la macro qui va insérer qq chose avant,
insérer quelque chose après et terminer.

Le truc qui s'en rapproche le plus c'est :

1GiTruc_a_ajouter_devant esc Ga Truc_a_ajouter_apres esc

Mais évidemment, ça agit sur le fichier complet et non pas sur la
sélection.



Ça agit sur le fichier *presque* complet. ;-)
(Oui, je sais, ce n'était qu'un exemple, mais bon, il suffit de
remplacer Ga par GA pour que ça marche.)



Voui. Ô taons pour moi.

En fait, ayant appris à utiliser vi sur des terminaux avec clavier seul,
je n'ai jamais à jouer avec du texte sélectionné à la souris, et je ne
sais même pas s'il existe quelque chose, y compris dans vim.



Je ne m'en sers également qu'avec le clavier en mode visuel,
pas avec la souris.

Du coup,
je change le titre pour l'adapter à cette nouvelle question : peut-on
sélectionner un texte à la souris dans vim, et se servir de cette
sélection pour une action particulière ?



Il y a un :set mouse quelque chose comme ça je crois qui doit revenir
au même que le mode visuel (sans garantie, pas testé).

--
François Meyer
Avatar
Olivier Miakinen
Le 29/09/2008 10:54, Nicolas George a écrit :

La sélection pose implicitement deux marques : '< et '>, au début et à la
fin. Il suffit de s'en servir.



Merci, tu réponds à la question que je posais près de vingt minutes plus
tard, sauf que... ça ne marche pas chez moi (vim dans cygwin). C'est
peut-être spécifique à gvim ? Note que je ne peux même pas positionner
moi-même une marque nommée « < » ou « > » : je pense que c'est limité
aux lettres ascii (a à z et A à Z).
Avatar
Nicolas George
Olivier Miakinen wrote in message <48e0a1b7$:
Merci, tu réponds à la question que je posais près de vingt minutes plus
tard, sauf que... ça ne marche pas chez moi (vim dans cygwin). C'est
peut-être spécifique à gvim ?



Je n'utilise pas gvim, ni cygwin.

Chez moi (IMproved 7.1 (2007 May 12)) ça marche tout seul : sélectionner un
bout, quitter le mode sélection, et '< m'amène à la ligne du début de
l'ancienne sélection tandis que '> m'amène à la fin, et `< et `> de même au
caractère près.
Avatar
Nicolas George
Olivier Miakinen wrote in message <48e09cea$:
Du coup,
je change le titre pour l'adapter à cette nouvelle question : peut-on
sélectionner un texte à la souris dans vim, et se servir de cette
sélection pour une action particulière ?



C'est une question de terminal : si le terminal supporte l'utilisation de la
souris par les applications dedans, alors ça marche. Cf. « help 'mouse »
pour les détails.

Mais on peut aussi sélectionner au clavier, heureusement. Cf. « help v ».
Avatar
François Meyer
Nicolas George <nicolas$ wrote:
Olivier Miakinen wrote in message <48e0a1b7$:
Merci, tu réponds à la question que je posais près de vingt minutes plus
tard, sauf que... ça ne marche pas chez moi (vim dans cygwin). C'est
peut-être spécifique à gvim ?



Je n'utilise pas gvim, ni cygwin.
Chez moi (IMproved 7.1 (2007 May 12)) ça marche tout seul : sélectionner un
bout, quitter le mode sélection, et '< m'amène à la ligne du début de
l'ancienne sélection tandis que '> m'amène à la fin, et `< et `> de même au
caractère près.



Tout pareil chez moi.
--
François Meyer
1 2