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.
Table des matières
- 1 Les méthodes du rechercher et remplacer de vim
- 2 Comment rechercher et remplacer dans vim avec des exemples
- 2.1 Chercher/remplacer sur une ligne
- 2.2 Chercher/remplacer sur tout le fichier
- 2.3 Chercher/remplacer jusqu’à la fin du fichier
- 2.4 Chercher/remplacer d’un mot entier
- 2.5 Chercher/remplacer dans un intervalles de lignes
- 2.6 Ignorer la casse durant la substitution
- 2.7 Afficher une confirmation avant de remplacer sur vim
- 2.8 Supprimer toutes les occurrences
- 2.9 Remplacer des mots différents par un seul
- 2.10 Chercher/remplacer avec l’histoire de vim
- 3 Liens
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 /
- Tapez le terme recherché pour le mettre en évidence dans le texte et appuyez sur Entrée
- Utilisez la touche Echap pour revenir au mode normal
- Tapez cgn cela va supprimer l’occurrence recherchée et passez en mode Insertion
- Saisissez le nouveau terme à remplacer
- Revenez au mode normal
- Tapez n pour passer à l’occurrence suivante du terme de recherche
- Appuyez sur la touche point . pour remplacer l’occurrence suivante par le même terme de remplacement
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.
caw | Supprime également l’espace de fin de ligne |
cw | Changer le mot entier |
| Changer le mot à partir du curseur |
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/
- Puis validez par Entrée
- 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.
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
Toute les occurrences de la ligne sont remplacées.
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
Vim substitue alors les termes dans tout le document.
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
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.
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
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
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.