Menu Fermer

Comment rechercher et remplacer dans vim

Vim est un éditeur de texte avancé et populaire qui est préinstallé dans la plupart des distributions Linux. Il s’agit d’un éditeur de texte basé sur la ligne de commande qui est principalement utilisé dans les systèmes d’exploitation sans interface utilisateur. Il est hautement configurable et offre de nombreuses fonctionnalités. Un point important concernant Vim est qu’il est hautement optimisé pour la répétition.

Dans ce tutoriel, je vous explique l’une de ses fonctions les plus utiles, à savoir la recherche et le remplacement.
En effet, la substitution de texte est très utile pour modifier un fichier texte.

Comment rechercher et remplacer dans vim

Les méthodes du rechercher et remplacer de vim

Commande de la barre oblique et du point

Utilisez la commande barre oblique et point pour rechercher et remplacer une seule occurrence d’un mot dans Vim.

Ouvrez un fichier dans Vim et suivez les étapes suivantes :

  • Appuyez sur la touche barre oblique /
Comment rechercher et remplacer dans vim
  • Tapez le terme recherché pour le mettre en évidence dans le texte et appuyez sur Entrée
Comment rechercher et remplacer dans vim
  • Utilisez la touche Echap pour revenir au mode normal
  • Tapez cgn cela va supprimer l’occurrence recherchée et passez en mode Insertion
Comment rechercher et remplacer dans vim
  • Saisissez le nouveau terme à remplacer
Comment rechercher et remplacer dans vim
  • Revenez au mode normal
  • Tapez n pour passer à l’occurrence suivante du terme de recherche
Comment rechercher et remplacer dans vim
  • Appuyez sur la touche point . pour remplacer l’occurrence suivante par le même terme de remplacement
Comment rechercher et remplacer dans vim

Quelques explications :

  • La commande c supprime le texte et met vim en mode insertion. c supprime le mouvement que vous spécifiez. Ainsi, cw effacera le mot suivant et vous mettra en mode insertion
  • gn saute au texte qui a été recherché en dernier lieu, et le met en surbrillance
  • Enfin . permet de répéter la dernière opération

Dans cet exemple, nous avons utilisés l’opérateur cgn mais il en existe bien d’autres.

cawSupprime également l’espace de fin de ligne
cwChanger le mot entier
ciwChanger le mot à partir du curseur
Les opérateurs de chercher et remplacer de vim

Plus de détails dans ce lien : http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

Commande de substitution

La commande de substitution :s est plus polyvalente que les commandes de barres obliques et de points.

Utilisez la commande barre oblique et point pour rechercher et remplacer une seule occurrence d’un mot dans Vim.

La syntaxe de base de la commande :s est la suivante

:s/terme_recherche/terme_remplacement/

Si vous connaissez la commande sed, vous verrez que cela est très proche.

La commande recherche le terme à rechercher dans la ligne courante, la ligne où se trouve le curseur. Ensuite, :s remplace le terme de recherche par le terme de remplacement.

  • Ouvrez un fichier dans Vim
  • Puis saisissez la commande suivante qui vise à chercher le mot www pour le remplacer par forum :
:s/www/forum/
Comment rechercher et remplacer dans vim (commande de subtitution)
  • Puis validez par Entrée
Comment rechercher et remplacer dans vim (commande de subtitution)
  • Vim substitue bien l’occurrence www qu’il remplace par forum

En réalité, la syntaxe de la commande de substitution est un peu plus complexe :

[plage]s/terme_recherche/remplacement_terme/[drapeaux] [nombre]

Suivez le paragraphe suivant pour obtenir des exemples.

Utilisez :help / pour obtenir de l’aide sur les pattern de recherche.

Comment rechercher et remplacer dans vim avec des exemples

Chercher/remplacer sur une ligne

Pour substituer toutes les termes d’une ligne, il faut utiliser le drapeau g pour global.

Ainsi, si on utilise la commande suivante :

:s/www/forum/g
Comment chercher/remplacer sur une ligne dans vim

Toute les occurrences de la ligne sont remplacées.

Comment chercher/remplacer sur une ligne dans vim

Chercher/remplacer sur tout le fichier

Pour rechercher/remplacer avec vim dans tout le texte, il faut utiliser la plage %.
% équivaut à la plage :1,$ soit donc de la première ligne à la dernière ligne.

:%s/www/forum/g
Comment chercher/remplacer sur tout le fichier dans vim

Vim substitue alors les termes dans tout le document.

Comment chercher/remplacer sur tout le fichier dans vim

Chercher/remplacer jusqu’à la fin du fichier

Utilisez un point (.) et un signe de dollar ($) séparés par une virgule pour substituer tout ce qui se trouve sur la ligne actuelle jusqu’à la dernière ligne.

:.,$/www/forum/g

Chercher/remplacer d’un mot entier

Par défaut, la commande de remplacement recherche toute correspondance, qu’elle soit partielle ou complète. Pour trouver le terme exact recherché et le remplacer par le terme de remplacement, il faut inclure le terme recherché dans le champ “<>”.

Par exemple, dans certains documents, vous souhaitez rechercher et remplacer le mot exact “vous” par “moi”. Dans ce cas, la commande suivante sera utilisée :

:s/\<pas\>//

Elle trouvera le mot “pas” et le remplacera par “rien”. Cependant, elle ne remplacera pas les mots avec la syllabe “pas”.

Chercher/remplacer dans un intervalles de lignes

En spécifiant une plage lors de l’exécution de la commande :s, les utilisateurs peuvent rechercher et remplacer des motifs au-delà de la ligne en cours.
La syntaxe est la suivante :

:<debut_ligne>,<fin_ligne>s/vi/Vim/g

Par exemple pour substituer entre la ligne 1 et la ligne 5 du fichier :

:1,5s/www/forum/g
Comment chercher/remplacer dans un intervalles de lignes dans vim

La dernière occurrence n’est pas remplacée car elle se trouve à la ligne 6, soit donc hors de la plage spécifiée.

Comment chercher/remplacer dans un intervalles de lignes dans vim

Pour rechercher et remplacer l’occurrence d’un mot à partir de la ligne actuelle jusqu’au nombre x de lignes suivantes, la syntaxe suivante doit être utilisée :

:s/terme_chercher/terme_remplacer/g x

Ignorer la casse durant la substitution

Par défaut, !le processus de recherche et de remplacement dans Vim est sensible à la casse. Par exemple, l’utilisation de la commande :s pour remplacer www (en minuscules) par vi ne fonctionnera pas sur Www. ou WWW.

Pour ignorer la casse, ajoutez le drapeau i pour ignorer la casse.
Par exemple :

:%s/www/forum/gi

Afficher une confirmation avant de remplacer sur vim

La substitution est automatique mais vous pouvez demander à vim d’afficher une demande de confirmation avant tout remplacement.
Pour cela, ajoutez le drapeau /c.

:%s/www/forum/gc
Comment afficher une confirmation avant de remplacer sur vim

Vim invite les utilisateurs à choisir entre plusieurs options :

  • Remplacer la correspondance sélectionnée par Y
  • Sauter la correspondance sélectionnée avec n
  • Remplacer toutes les correspondances avec a
  • Quitter la commande avec q
  • Remplacer la correspondance sélectionnée et quitter avec I

Supprimer toutes les occurrences

Au lieu de substituer le terme recherché, supprimez le motif en omettant le terme de remplacement. Par exemple, supprimez toutes les instances de Vim avec :

:%s/www./

Remplacer des mots différents par un seul

Utilisez la commande de remplacement pour remplacer différents termes de recherche par un seul terme de remplacement.

:%s/\(mot1\|mot2\)/mot_remplacer/g

Par exemple, remplacez toutes les occurrences de www. ou ftp:// par https://www :

:%s/\(www\.\|ftp:\/\/\)/http:\/\//g
Remplacer des mots différents par un seul avec vim
Remplacer des mots différents par un seul avec vim

Chercher/remplacer avec l’histoire de vim

L’exécution de la commande :s sans aucune option affiche les opérations de substitution précédentes. En outre, exécutez la commande :s et utilisez les touches fléchées haut/bas pour vous déplacer dans le document.

Plus important encore, utilisez la commande :s pour appliquer les substitutions précédentes au nouveau texte. Par exemple, l’historique montre que la commande a remplacé toutes les instances de vi par Vim.

L’exécution de la commande :s permet de trouver toutes les substitutions déjà effectuées, mais aussi toutes les instances de vi qui n’ont pas encore été modifiées.