Tip pour remplacer du texte facilement dans VIM équivalent au Ctrl + F

Comme tous les éditeurs de texte VIM permet de remplacer du texte par une autre texte, mais cette fonction n'est pas accessible par le traditionnel Ctrl + F. Il faut taper une ligne de commande dans VIM pour pouvoir le faire.:

 
:1,$s/text a remplacer/text de substitution/g

A lire ça semble un peu barbare, mais c'est très simple. Détaillons une peu cette ligne de commande:

  • ":" permet d'invoquer une fonction dans VIM
  • "1" représente la première ligne du fichier et peut donc varier
  • "$" repésente la dernière ligne du fichier et peut donc également varier
  • "s" la commande invoquée
  • "/" sont des délimiteurs de texte. Si votre texte contient des /, il faudra les échapper avec un \
  • "g" permet de faire une recherche globale et donc de remplacer toutes les occurences. C'est une option qui peut être omise.

 

J'espère que ce tip vous sera autant utile qu'à moi.

Il y a 5 commentaires

  • kolter05-28-2013 13:01:01

    le 1,$ peu être remplacé par %

    M.

  • copain05-28-2013 13:19:38


    Si on remplace toujours dans tout le fichier, on peut abréger en : :%s/blabla/blibli/g On peut aussi remplacer dans une sélection : Passer en mode sélection (v, Shift v, Ctrl v) Faire sa selection Appuyer sur ":" La ligne en bas devient : :'<,'>


  • Ulrich05-28-2013 13:46:25


    Merci pour les compléments.


  • pierre05-28-2013 15:59:07

    On peut choisir n'importe quel charactère comme délimiteur. Donc si le texe contient des 9, pas besoin de les antislasher : utilisez par exemple # comme délimiteur :

    %s#blabla#blibli#

  • joseph-tux09-09-2013 21:12:58

    On peut bien entendu sélectionner un paragraphe, ne remplacer que dans une ligne ou un intervalle de lignes désignées soit par leur N° soit par une autre expression rationnelle, ou des lignes non contigües choisies par un filtre d'expressions rationnelles avec : g/^\s*[^#]/s/ancienne chaine/nouvelle/g
    on ne remplace "ancienne chaine" par "nouvelle" que dans les lignes qui ne commencent pas par un commentaire ( # ), éventuellement précédée(*) de caractères espace ( \s).

    Connaître les bases des expressions régulières est un exercice très utile: sous grep, sous sed, awk, vim et nombres d'outils GNU et unix, sous les langages comme Perl ( le 1er ! ), PHP (issu de perl), Python, Ruby etc..

    Les tutos et cartes aide-mémoires de manquent pas sur la toile.
    Attention aux variantes selon les langages ou les options ( grep/egrep ou grep -E, vim peut aussi utiliser les expressions étendues )

    ex, ed, sed, et vi(m) sont très semblables ( la commande : sous vi ouvre d'ailleurs la ligne de commande ex, enrichie )

    Amusez vous bien, la beauté des Regex ne s' estompent jamais ! et on n'en voit jamais le bout, tout comme celle de vim. Et ces amusements rendent de grands services de plus en plus fréquents, on fini par y jouer presque sans y penser ( pour moi à chaque instant dans vim et avec grep en ligne de commande; et plus rarement, lorsque j'ose programmer en bash ( =~ ) ou, bien sur, en Perl pour tout ce qui traite de manipulation de texte )