[Vim] Remplacer une occurence ?

[Résolu/Fermé]
Signaler
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
Bonjour,

Je connais la commande de base dans Vim pour remplacer une occurence par une autre:

:%s/old/new/g

mais comment faire pour que celà s'applique à tous les fichiers ouvert ?
Est ce possible ?


Merci

4 réponses

Messages postés
1
Date d'inscription
vendredi 7 août 2009
Statut
Membre
Dernière intervention
7 août 2009
10
Personne ne réponds à celui qui pose la question qui était de savoir comment effectuer une substitution (et donc n'importe quelle opération/commande) sur la totalité des fichiers ouverts donc des buffers en cours, car même si les réponses peuvent dans certains cas résoudre le problème posé, on peut aussi vouloir effectuer d'autres opérations et ne pas se servir de vim que pour faire une substitution globale sur un ensemble de fichiers.

La réponse est de rajouter bufdo avant la substitution :
:bufdo %s/old/new/g


par contre, vu que par défaut on ne peut pas faire un changement et passer au buffer suivant sans que vim demande si l'on veut sauvegarder le buffer actuel, on peut juste avant cette commande demander d'inhiber cette fonctionnalité par :

:set hidden


ces 2 "astuces" et plein d'autres sont compilées dans l'excellent "Best of Vim Tips : http://rayninfo.co.uk/vimtips.html"
10
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 878
Merci ;-)
j'ai pas l'impression que ca marche tres bien.
une alternative qui marche bien ;

for i in `ls *.ext` ; do vim -c '%s/toto/tata/g' -c 'wq' $i ; done
trouvé sur la page :
https://us191.ird.fr?article4

Remplacer dans plusieurs fichiers une occurrence par une autre :
vim -c '%s/toto/tata/g' -c 'wq!' *.ext
Messages postés
30037
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
1 septembre 2021
7 161
Non je ne pense pas, la commande s'applique juste au buffer ouvert. En particulier si tu "splites" vim (:sp, :vs...) seul le buffer courant sera affecté. Si tu dois modifier un pattern dans plusieurs fichiers il vaudrait mieux passer par un sed s'appliquant à l'ensemble de ces fichiers.

Bonne chance