Dans vim, j'ai parfois l'occasion de remplacer les premières occurrences d'un match sur une ligne, mais pas tout le monde le gvoudrait. par exemple:
a a a a a
à
b b b a a
Je sais que je pourrais utiliser :s/a/b/[enter]:[up][enter]:[up][enter], mais c'est assez fastidieux à trois répétitions, j'ai des lignes avec potentiellement plus de 10 substitutions.
J'ai essayé:
:s/a/b/3g: vim s'est plaint de caractères de fin.:s/a/b/3: modifie la première occurrence sur cette ligne et les deux lignes suivantes.3:s/a/b: identique à la précédente.:s/a/b/g3: change toutes les occurrences sur cette ligne et les deux suivantes.:3s/a/b: modifie la première occurrence sur la ligne 3.:/a/,3/a/s/a/b: change la première occurrence sur chaque ligne entre la suivanteaet la troisième ligne contenantadans le fichier (invite à inverser si nécessaire).:/a/,/\([^a]*a\)\{3\}/s/a/b/: modifie la première occurrence sur chaque ligne entre celle-ci et la suivante avec 3as dessus (et cela n'aurait pas été facilement extensible à une recherche à plusieurs caractères).
Et divers autres modèles d'adressage, dont aucun n'a fonctionné. Je dois dire que j'ai beaucoup appris sur la :scommande essayant de trouver une réponse à ce problème, mais je ne l'ai toujours pas résolu.
Quelqu'un sait-il comment faire ça?
(points bonus pour une plage spécifique, par exemple de la deuxième à la quatrième occurrence)
net ., même si je ne pensais pas les utiliser ici. Certainement une amélioration, merci.
s/a/=something/devrait faire l'affaire ( :help sub-replace-=). Je ne parle pas assez bien à Vim pour écrire somethingdès le départ.
:[up][enter]peut être remplacé par &, ce qui n'est toujours pas idéal mais au moins est moins douloureux.