GNU/Linux >> Tutoriels Linux >  >> Linux

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


Photo courtoisie :B Zedan

Cet article fait partie de la série Vi / Vim Tips and Tricks en cours. Vim est généralement mentionné comme éditeur de texte, et non comme créateur de texte. Pourquoi ? Parce que nous passons beaucoup de temps à éditer un texte existant plutôt qu'à créer un nouveau texte. Dans l'édition de texte, les substitutions de texte/motif deviennent une partie vitale.

Dans cet article, voyons comment exécuter les fonctions de substitution de texte et de motif de base et avancées dans Vi et Vim Editor . Ces fonctionnalités sont expliquées à l'aide de 12 exemples de substitution de texte très pratiques et puissants. .

Syntaxe de la substitution de texte dans l'éditeur vim :

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


Voici trois drapeaux possibles.

  1. [c] Confirmez chaque substitution.
  2. [g] Remplacez toutes les occurrences de la ligne.
  3. [i] Ignorer la casse pour le motif.

Exemple 1. Remplacer toutes les occurrences d'un texte par un autre texte dans tout le fichier

C'est l'utilisation fondamentale de base de la substitution de texte dans l'éditeur Vi. Lorsque vous souhaitez qu'un texte spécifique soit remplacé par un autre texte dans l'ensemble du fichier, vous pouvez utiliser la séquence suivante.

:%s/old-text/new-text/g

  • %s – spécifie toutes les lignes. Spécifier la plage sous la forme '%' signifie effectuer une substitution dans l'ensemble du fichier.
  • g – spécifie toutes les occurrences de la ligne. Avec le drapeau 'g', vous pouvez faire en sorte que toute la ligne soit remplacée. Si ce drapeau « g » n'est pas utilisé, seule la première occurrence de la ligne sera remplacée.

Exemple 2. Substitution d'un texte par un autre texte sur une seule ligne

Lorsque vous souhaitez qu'un texte spécifique soit remplacé par un autre texte sur une seule ligne sans tenir compte de la casse. Ne spécifier aucune plage signifie effectuer la substitution dans la ligne actuelle uniquement. Avec le drapeau "i", vous pouvez rendre le texte de recherche de remplacement insensible à la casse.

:s/I/We/gi

Exemple 3. Substitution d'un texte par un autre texte dans un intervalle de lignes

Avec la plage, vous pouvez faire en sorte qu'une seule plage de ligne soit affectée à la substitution. Spécifier 1, 10 comme plage signifie, effectuer la substitution uniquement dans les lignes 1 à 10.

:1,10s/helo/hello/g

Exemple 4. Substitution d'un texte par un autre texte par sélection visuelle de lignes

Vous pouvez également sélectionner des lignes spécifiques en sélectionnant visuellement ces lignes. Appuyez sur CTRL + V en mode commande, utilisez les touches de navigation pour sélectionner la partie du fichier que vous souhaitez remplacer. Appuyez sur ':' qui sera automatiquement formé comme :'<,'> Ensuite, vous pouvez utiliser le substitut normal comme

:'<,'>s/helo/hello/g

Exemple 5. Substitution d'un texte par un autre texte uniquement le 1er X nombre de lignes

En utilisant count in substitution, Si vous spécifiez le nombre N dans la substitution, cela signifie effectuer une substitution dans N lignes à partir de la position actuelle du curseur. faire une substitution sur 4 lignes à partir de la ligne courante.

:s/helo/hello/g 4

Exemple 6. Remplacer uniquement le mot entier et non la correspondance partielle

Supposons que vous vouliez changer uniquement le mot entier « son » en « elle » dans le texte original mentionné ci-dessous. Si vous effectuez la substitution standard, en plus de changer his en her, cela changera également This en Ther comme indiqué ci-dessous.

Remplacement standard

Original Text: This is his idea

:s/his/her/g

Translated Text: Ther is her idea

Substitution de mots entiers

Original Text: This is his idea

:s/\<his\>/her/

Translated Text: This is her idea

Remarque :  :Vous devez entourer le mot de , ce qui forcera la substitution à rechercher uniquement le mot complet et non une correspondance partielle.

Exemple 7. Remplacez mot1 ou mot2 par un nouveau mot en utilisant une expression régulière

Dans l'exemple suivant, toutes les occurrences de good ou nice seront remplacées par awesome.

Original Text: Linux is good. Life is nice.

:%s/\(good\|nice\)/awesome/g

Translated Text: Linux is awesome. Life is awesome.


Vous pouvez également effectuer une substitution en spécifiant une expression régulière. L'exemple suivant fait la substitution de hey ou hi à hai. Veuillez noter que cela ne remplace pas les mots "ils", "ceci".

:%s/\<\(hey\|hi\)\>/hai/g

  • \<– limite du mot.
  • \| – "ou logique" (dans ce cas hey ou hi)

Exemple 8. Recherche et remplacement interactifs dans l'éditeur Vim

Vous pouvez effectuer une recherche et un remplacement interactifs à l'aide du drapeau "c" dans le substitut, qui vous demandera de confirmer la substitution ou de l'ignorer, comme expliqué ci-dessous. Dans cet exemple, l'éditeur Vim effectuera une recherche globale du mot « génial » et le remplacera par « merveilleux ». Mais il effectuera le remplacement uniquement en fonction de votre entrée, comme expliqué ci-dessous.

:%s/awesome/wonderful/gc

replace with wonderful (y/n/a/q/l/^E/^Y)?
  • y – Remplacera le mot actuel en surbrillance. Après le remplacement, il mettra automatiquement en surbrillance le mot suivant correspondant au modèle de recherche
  • n – Ne remplacera pas le mot actuel en surbrillance. Mais il mettra automatiquement en surbrillance le mot suivant correspondant au modèle de recherche
  • a - Remplacera automatiquement tous les mots en surbrillance qui correspondent aux critères de recherche.
  • l - Cela remplacera uniquement le mot en surbrillance actuel et mettra fin à l'effort de recherche et de remplacement.

Exemple 9. Remplacer toutes les lignes par son numéro de ligne.

Lorsque la chaîne commence par '\=', elle doit être évaluée comme une expression. En utilisant la fonction "ligne", nous pouvons obtenir le numéro de ligne actuel. En combinant les deux fonctionnalités, la substitution effectue la numérotation de toutes les lignes.

:%s/^/\=line(".") . ". "/g


Remarque : Ceci est différent du ":set number" où il n'écrira pas les numéros de ligne dans le fichier. Mais lorsque vous utilisez cette substitution, vous rendez ces numéros de ligne disponibles de manière permanente dans le fichier.

Exemple 10. Remplacer un caractère spécial par sa valeur équivalente.

Remplacer le ~ par la valeur de la variable $HOME.

Original Text: Current file path is ~/test/

:%s!\~!\= expand($HOME)!g

Translated Text: Current file path is /home/ramesh/test/

Vous pouvez utiliser la fonction d'expansion pour utiliser toutes les variables prédéfinies et définies par l'utilisateur disponibles.

Exemple 11. Modifier le numéro de séquence dans une liste numérotée lors de l'insertion d'un nouvel élément

Supposons que vous ayez une liste numérotée comme celle-ci dans un fichier texte. Dans cet exemple, supposons que vous souhaitiez ajouter une nouvelle ligne après l'article 2. Pour cela, vous devez modifier le nombre de tous les autres articles en conséquence.

vi / vim tips & tricks series
Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
Article 3: 5 Awesome Examples For Automatic Word Completion Using Ctrl-X
Article 4: Vi and Vim Macro Tutorial: How To Record and Play
Article 5: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
Article 6: How To Add Bookmarks Inside Vim Editor
Article 7: Make Vim as Your Bash-IDE Using bash-support Plugin
Article 8: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
Article 9: 8 Essential Vim Editor Navigation Fundamentals
Article 10: Vim Editor: How to Correct Spelling Mistakes Automatically
Article 11: Transfer the Power of Vim Editor to Thunderbird for Email
Article 12: Convert Vim Editor to Beautiful Source Code Browser


3e article "Faites de Vim votre IDE Perl à l'aide du plugin perl-support.vim" a été manqué. Donc, lorsque vous voulez
l'ajouter, vous voulez changer "l'article 3" en "article 4", "l'article 4" en "article 5", jusqu'à "l'article 12" en "article 13".

Ceci peut être réalisé par la commande de substitution vim suivante.

:4,$s/\d\+/\=submatch(0) + 1/

  • Plage :4 $ – de la 4e ligne à la dernière ligne.
  • Modèle de recherche – \d\+ – séquence de chiffres
  • Modèle à remplacer – \=submatch(0) + 1 – obtient le modèle correspondant et lui ajoute 1.
  • Drapeau - comme il n'y a pas de drapeau, par défaut, il remplace uniquement la première occurrence.


Après avoir exécuté la déclaration de substitution, le fichier deviendra comme ceci, où vous pourrez
ajouter le 3ème article.

vi / vim tips & tricks series
Article 1: Vi and Vim Editor: 3 Steps To Enable Thesaurus Option
Article 2: Vim Autocommand: 3 Steps to Add Custom Header To Your File
Article 4: 5 Awesome Examples For Automatic Word Completion Using Ctrl-X
Article 5: Vi and Vim Macro Tutorial: How To Record and Play
Article 6: Tutorial: Make Vim as Your C/C++ IDE Using c.vim Plugin
Article 7: How To Add Bookmarks Inside Vim Editor
Article 8: Make Vim as Your Bash-IDE Using bash-support Plugin
Article 9: 3 Powerful Musketeers Of Vim Editor ? Macro, Mark and Map
Article 10: 8 Essential Vim Editor Navigation Fundamentals
Article 11: Vim Editor: How to Correct Spelling Mistakes Automatically
Article 12: Transfer the Power of Vim Editor to Thunderbird for Email
Article 13: Convert Vim Editor to Beautiful Source Code Browser

Remarque :Vérifiez que la substitution a changé le 3 en 4, le 4 en 5 et ainsi de suite. Maintenant, nous pouvons ajouter une nouvelle ligne en le mentionnant comme article 3, et il n'est pas nécessaire d'effectuer de modifications manuelles.

Exemple 12. Remplacer les débuts de phrase par des majuscules. (c'est-à-dire la casse du titre de l'ensemble du document).

Lors du formatage d'un document, la casse du titre est également une chose importante. Cela peut être fait facilement avec substitution.

:%s/\.\s*\w/\=toupper(submatch(0))/g

  • \.\s*\w – Modèle de recherche – littéral . ( point ) suivi de Zéro ou plus d'espace et d'un caractère de mot.
  • toupper – convertit le texte donné en majuscule.
  • submatch(0) – renvoie le modèle correspondant.

Texte avant substitution :

Lot of vi/vim tips and tricks are available at thegeekstuff.com. reading
these articles will make you very productive. following activities can be
done very easily using vim editor.
        a. source code walk through,
        b. record and play command executions,
        c. making the vim editor as ide for several languages,
        d. and several other @ vi/vim tips & tricks.

Texte après substitution (les modifications sont en gras)

Lot of vi/vim tips and tricks are available at thegeekstuff.com. Reading
these articles will make you very productive. Following activities can be
done very easily using vim editor.
        a. Source code walk through,
        b. Record and play command executions,
        c. Making the vim editor as ide for several languages,
        d. And several other @ vi/vim tips & tricks.

Lecture recommandée

Vim 101 Hacks, par Ramesh Natarajan . Je suis un accro de la ligne de commande. Donc, naturellement, je suis un grand fan des éditeurs Vi et Vim. Il y a plusieurs années, lorsque j'écrivais beaucoup de code C sur Linux, je lisais tous les trucs et astuces disponibles pour l'éditeur Vim. Sur la base de mon expérience dans l'éditeur Vim, j'ai écrit le livre électronique Vim 101 Hacks qui contient 101 exemples pratiques sur diverses fonctionnalités avancées de Vim qui vous rendront rapide et productif dans l'éditeur Vim. Même si vous utilisez les éditeurs Vi et Vim depuis plusieurs années et que vous n'avez pas lu ce livre, rendez-vous service et lisez ce livre. Vous serez étonné des capacités de l'éditeur Vim.

Articles géniaux de l'éditeur Vim

Voici quelques excellents tutoriels pour l'éditeur Vi / Vim qui pourraient vous être utiles.

  • Didacticiel sur les macros Vi et Vim :comment enregistrer et lire
  • Turbochargez le navigateur Firefox avec la fonctionnalité de l'éditeur Vim à l'aide du module complémentaire Vimperator
  • Tutoriel :Faites de Vim votre IDE C/C++ à l'aide du plug-in c.vim
  • Convertir l'éditeur Vim en magnifique navigateur de code source pour n'importe quel langage de programmation

Remarque : Veuillez vous abonner à The Geek Stuff et ne manquez aucun des futurs trucs et astuces des éditeurs Vi et Vim .


Linux
  1. Explication des différences entre les éditeurs de texte Vi et Vim

  2. Guide de l'éditeur de texte ViM 101

  3. Utiliser "sed" pour rechercher et remplacer ?

  4. Tutoriel vim avec des exemples de commandes

  5. Xed Text Editor - Un remplacement de Gedit et Pluma

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

50 exemples simples et utiles de la commande Find sous Linux

Comment rechercher et remplacer du texte dans Vim

Éditeur Vi et Vim :5 exemples impressionnants pour la complétion automatique de mots à l'aide de Ctrl-X Magic

3 puissants mousquetaires de l'éditeur Vim - macro, marque et carte

Travailler avec l'éditeur Vim (éditeur de texte)