Chercher remplacer dans tous les buffers de Vim
J'ai plusieurs fois eu besoin de faire des substitutions dans tous les fichiers ouverts dans Vim. J'avais cherché dans les flags de la commande substitute (:s
) sans succès et donc systématiquement je contournais le problème à coup de lignes de bash à base de find, sed, grep et compagnie. Mais je suis tombé par hasard sur la commande :bufdo
en cherchant à corriger quelques petits bugs dans eZVim le plugin Vim pour eZ Publish. Du coup rien de compliqué, il suffit de préfixer toute commande par bufdo pour l'appliquer sur tous les buffers ouverts, par exemple :
:bufdo! %s/cherche/remplace/g
Le point d'exclamation permet de forcer le passage d'un buffer à un autre sans sauvegarder son contenu. Et évidemment ça marche pour autre chose que la substitution. Il est également possible d'exécuter plusieurs commandes sur chacun des buffers en les séparant avec un pipe (|
), par exemple pour corriger une indentation en fonction des réglages de Vim, supprimer les espaces inutiles en fin de ligne et sauvegarder le fichier, la ligne suivante devrait faire l'affaire :
:bufdo retab | %s/ *$//g | w
Il existe également :tabdo
(pour les onglets), :windo
(pour les fenêtres Vim) et :argdo
(pour les arguments de la ligne de commande).