Chercher et remplacer dans une arborescence avec vim

vim est un éditeur génial, plus je l’utilise et plus j’ai l’impression que l’on peut tout faire avec lui. Pour migrer mon blog de WordPress vers Jekyll, j’ai dû remplacer du texte dans une arborescence assez complexe et n’étant pas assez à l’aise avec sed, j’ai cherché une alternative. Et je suis tombé sur un petit article qui propose de faire cela en deux commandes directement dans vim…

La méthode est très simple, il faut charger tous les fichiers de l’arborescence dans lesquels on veut rechercher avec un pattern, qui peut contenir des wildcards. Une fois les documents chargés dans vim, il suffit ensuite d’utiliser la fonction «search and replace» de vim. Dit comme cela, ça a l’air très simple et en pratique ça l’est aussi.

Cas pratique

Imaginons, que l’on veuille migrer un site de HTTP en HTTPS, il faut que remplacer tous les liens internes commençant par http:// par https://. On va donc charger tous les fichiers html présent dans le répertoire courant ainsi que dans tous les répertoires fils. On ouvre donc une fenêtre vim puis on saisi la commande suivante pour charger les fichiers dans des buffers :

:args ./*.html

Maintenant, il ne reste plus qu’à chercher dans les fichiers chargés et à remplacer le contenu avec la nouvelle chaine. On fait cela avec la commande s%// (un classique de vim) que l’on va appliquer à tous les fichiers chargés avec la commande argdo :

` :argdo %s/http:\/\//https:\/\//ge`

On valide, on voit vim faire le travail et voila c’est tout. Bon si vous n’avez pas confiance dans votre commande de remplacement, vous pouvez toujours ajouter l’option c qui vous demandera de confirmer chaque remplacement mais ca peut être long!

Source : Ibrahim Ahmed