parfois mes sous-compositions globales ne remplacent pas toutes les correspondances d'une ligne. Il est confirmé par le fait que je peux le voir lorsque je fais des substitutions avec confirmation, une correspondance est trouvée dans une ligne avec plusieurs correspondances possibles, mais elle passe ensuite à une autre ligne.
J'utilise les paramètres g
ou gc
opérant sur l'ensemble du fichier avec %
.
Sur ce fichier:
hello hello
hello
hello hello hello
hello
Si je le fais, %s/hello/goodbye/g
je reçois
goodbye hello
goodbye
goodbye hello hello
goodbye
Tout ce que j'ai dans ma .vimrc
recherche / remplacement est
set hlsearch
set ignorecase
set incsearch
substitute
Nicolas Scotto Di Perto
la source
la source
vimrc
.:echo &gd
et que se passe-t-il si vous ajoutez un deuxièmeg
indicateur comme celui-ci:%s/hello/goodbye/gg
ou si vous supprimezg
complètement l' indicateur? Si la sortie de:echo &gd
est1
, essayez d'ajouterset nogdefault
à la fin de votrevimrc
.set nogdefault
comme vous l'avez dit et cela fonctionne maintenant, soit dit en passant. Je vous remercie!Réponses:
Peut-être que vous, ou un plugin, aviez activé l'option
'gdefault'
. Cette option ajouteg
automatiquement l'indicateur chaque fois que vous effectuez une substitution.Ainsi, lorsque vous ajoutez manuellement l'indicateur
g
alors que'gdefault'
est activé, c'est comme si vous aviez 2g
indicateurs qui ont le même effet qu'aucun. Par conséquent, Vim ne substitue que la première occurrence du motif sur chaque ligne.Par défaut, cette option est désactivée, mais assurez - vous qu'il est, vous pouvez ajouter à la fin de votre
vimrc
:set nogdefault
.Alternativement, si vous pensez qu'un plugin a peut-être activé l'option, vous pouvez la retrouver avec:
verb set gd?
Ou vous pouvez vous habituer à l'option, ce qui signifie que lorsque vous souhaitez remplacer toutes les occurrences d'un modèle, vous n'ajoutez pas le
g
drapeau (car c'estgdefault
déjà fait), et lorsque vous ne souhaitez remplacer que la 1ère occurrence du modèle sur une ligne, vous ajoutez leg
drapeau (car 2g
drapeaux sont identiques à aucun).la source