[Vim] Remplacer une occurence ?

Résolu
duddy67 -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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

adren67 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Merci ;-)
0
rico
 
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
5
rico
 
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
2
mamiemando Messages postés 33769 Date d'inscription   Statut Modérateur Dernière intervention  
 
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
1