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 g
voudrait. 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 suivantea
et la troisième ligne contenanta
dans 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 3a
s 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 :s
commande 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)
n
et .
, 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 something
dès le départ.
:[up][enter]
peut être remplacé par &
, ce qui n'est toujours pas idéal mais au moins est moins douloureux.