GNU/Linux >> Tutoriels Linux >  >> Linux

Comment rechercher et remplacer du texte dans Vim

Comment rechercher un texte dans Vim ?

Appuyez sur la touche /, tapez votre texte de recherche et appuyez sur Entrée. C'est comme la commande less.

Mais cette méthode de recherche de texte ne vous permet pas de remplacer le résultat trouvé.

Permettez-moi de partager comment vous pouvez rechercher et remplacer dans Vim .

:%s/foo/bar/gci

La commande ci-dessus exécutera une recherche insensible à la casse pour trouver toutes les occurrences de votre terme de recherche (foo) avec le nouveau terme (bar). Avec le drapeau c, il demande de confirmer avant de remplacer toute substitution.

Permettez-moi d'entrer dans les détails et d'expliquer les choses plus clairement.

Utiliser la commande substitut pour rechercher et remplacer du texte dans Vim

Je suppose que vous savez déjà que pour exécuter une commande dans Vim, vous devez être en mode normal (également appelé mode de commande). Appuyez sur la touche Échap pour entrer dans ce mode.

Vim a une commande pratique :substitue , peut également être utilisé avec la version plus courte :s .

Ci-dessous la syntaxe générale de la commande de substitution :

:[range]s/{pattern}/{string}/[flags] [count]

Décomposons cette syntaxe. Tout ce qui se trouve entre les crochets '[]' est facultatif.

  • range :Cette partie de la syntaxe peut être utilisée si vous voulez la substitution entre lesdites lignes. Si vous ne mentionnez pas de plage, cela ne remplacera que le texte sur la ligne actuelle . (J'ai partagé un tableau pour la plage)
  • pattern :C'est ici que vous spécifiez le texte que vous souhaitez remplacer.
  • string :Il s'agit de la chaîne qui remplacera le motif.
  • flags :Pour remplacer toutes les occurrences du motif de recherche, utilisez le g drapeau. Vous pouvez spécifier si vous voulez que la correspondance ignore la casse, utilisez i drapeau. Pour confirmer manuellement chaque opération de recherche et de remplacement, utilisez le c drapeau.
  • count  :nombre de lignes dans lesquelles remplacer le texte.
Plage Description
. Ligne actuelle
$ Dernière ligne
% Toutes les lignes
x Numéro de ligne x
.,+x De la ligne actuelle jusqu'à x lignes supplémentaires

Exemples de recherche et de remplacement dans Vim

Passons en revue quelques exemples qui démontrent l'utilisation de la commande substitut dans Vim.

Vous trouverez ci-dessous la capture d'écran du fichier que j'utiliserai pour démontrer l'utilisation de la commande de substitution dans Vim.

Remplacement de texte de base

Pour cet exemple, je me suis assuré que la chaîne 'Hello' apparaissait plusieurs fois dans au moins une ligne et plusieurs fois dans le fichier.

Je veux remplacer 'Hello' par la chaîne 'HI'. Vous trouverez ci-dessous la commande Vim pour le faire :

:%s/Hello/HI/g

Remplacer par confirmation

Pour remplacer du texte, mais souhaitez une confirmation à chaque fois que vous le faites, vous pouvez utiliser le c dans la commande de substitution.

:%s/Hello/HI/gc

Comme vous pouvez le voir sur la vidéo, Vim me demande une confirmation à chaque fois avant de substituer un motif.

Vous avez également une invite qui ressemble à la ligne suivante :

replace with HI (y/n/a/q/l/^E/^Y)?

Les options de l'invite ont la signification suivante :

  • y :oui
  • n :non
  • a :tous
  • q :quitter sans remplacer, mais cela n'annule pas une fois que vous avez déjà remplacé le texte
  • l :remplacez ceci et quittez (pensez à 'dernier')
  • ^E :Faites défiler vers le haut (ne fonctionne pas dans vim-tiny )
  • ^Y :Faites défiler vers le bas (ne fonctionne pas dans vim-tiny )

Remplacement insensible à la casse

Lorsque vous souhaitez remplacer du texte, qu'il soit en majuscule ou en minuscule, dans ce cas (haha), vous devez utiliser le i flag dans la commande de substitution.

:%s/hello/HI/gi

Si vous remarquez, toutes les occurrences de 'hello' ou 'Hello' et même 'hELLO' sont remplacées par 'HI'. Il s'agit d'une substitution de modèle insensible à la casse.

Chaque 'hello' est remplacé par 'HI' même si la plupart des 'hello' contiennent un 'H' majuscule.

Remplacer le texte sur une seule ligne dans Vim

Pour substituer du texte sur une seule ligne, nous devons spécifier la plage qui limite la portée de la substitution à la ligne actuelle.

Pour cela, il vaut mieux utiliser le . descripteur de plage.

:.s/Hello/HI/g

Comme vous pouvez le voir, seul le motif de la première ligne a été remplacé car j'ai utilisé le point '.' descripteur de plage.

Astuce bonus :Utiliser un autre délimiteur

En regardant la syntaxe de la commande de substitution, j'ai mentionné que le modèle et la chaîne sont séparés par une barre oblique '/'.

Mais que se passe-t-il si vous avez un texte avec beaucoup de barres obliques dans le motif/la chaîne, comme un chemin, qui se répète partout dans le fichier ? Échapper aux barres obliques peut être fastidieux et parfois facilement manqué.

Ainsi, au lieu d'utiliser le caractère barre oblique comme délimiteur, vous pouvez utiliser un délimiteur différent à la place.

Quelques caractères de délimitation que j'ai vus être utilisés sont # , _ et @ .

Voici un gif qui montre une démonstration de l'utilisation de @ comme délimiteur au lieu de / .

Conclusion

La substitution de texte peut être une occurrence courante et Vim vous propose un moyen puissant de rechercher et de remplacer un motif par une chaîne. Vous pouvez même mélanger des regex dans la commande de substitution de Vim.

Si vous souhaitez en savoir plus que les bases de Vim, je vous recommande fortement d'utiliser ce programme de Jovica Ilic.


Linux
  1. Comment intégrer la commande Mv après la commande Find ?

  2. Comment remplacer toutes les occurrences d'un mot dans tous les fichiers dans la ligne de commande Linux

  3. Éditeur Vi et Vim :12 exemples puissants de recherche et de remplacement

  4. Comment exclure un répertoire dans find . commande

  5. Commande Linux :Comment "trouver" uniquement des fichiers texte ?

Comment rechercher pour trouver un mot dans Vim ou Vi Text Editor

Comment utiliser sed pour rechercher et remplacer une chaîne dans des fichiers

Comment utiliser des marqueurs et effectuer une sélection de texte dans Vim

Comment utiliser la commande SED pour rechercher et remplacer une chaîne dans des fichiers

Comment rechercher et remplacer du texte, un mot ou une chaîne dans un fichier

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier