La substitution globale Vim ne sous-estime pas toutes les correspondances d'une ligne

12

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 gou gcopérant sur l'ensemble du fichier avec %.

Sur ce fichier:

hello hello
hello
hello hello hello
hello

Si je le fais, %s/hello/goodbye/gje reçois

goodbye hello
goodbye
goodbye hello hello
goodbye

Tout ce que j'ai dans ma .vimrcrecherche / remplacement est

set hlsearch
set ignorecase
set incsearch
Nicolas Scotto Di Perto
la source
3
S'il vous plaît, donnez-nous un exemple concret et montrez-nous le vôtre vimrc.
romainl
2
Quelle est la sortie de :echo &gdet que se passe-t-il si vous ajoutez un deuxième gindicateur comme celui-ci: %s/hello/goodbye/ggou si vous supprimez gcomplètement l' indicateur? Si la sortie de :echo &gdest 1, essayez d'ajouter set nogdefaultà la fin de votre vimrc.
user9433424
1
Bien! Je ne sais pas pourquoi mais par défaut, il était réglé sur 0, j'ai donc ajouté set nogdefaultcomme vous l'avez dit et cela fonctionne maintenant, soit dit en passant. Je vous remercie!
Nicolas Scotto Di Perto

Réponses:

12

Peut-être que vous, ou un plugin, aviez activé l'option 'gdefault'. Cette option ajoute gautomatiquement l'indicateur chaque fois que vous effectuez une substitution.

Ainsi, lorsque vous ajoutez manuellement l'indicateur galors que 'gdefault'est activé, c'est comme si vous aviez 2 gindicateurs 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 gdrapeau (car c'est gdefaultdéjà fait), et lorsque vous ne souhaitez remplacer que la 1ère occurrence du modèle sur une ligne, vous ajoutez le gdrapeau (car 2 gdrapeaux sont identiques à aucun).

user9433424
la source