web-dev-qa-db-fra.com

Recherche interactive / remplacement de regex dans Vim?

Je connais la regex pour faire un remplacement global,

     %s/old/new/g

Comment faites-vous pour effectuer une recherche-remplacement interactive dans Vim ?

250
kal

Ajoutez le drapeau c (dans l'invite de la commande vim):

:%s/old/new/gc

vous donnera une invite oui/non à chaque occurrence de 'vieux'.

"old" is highlighted in the text; at the bottom of the window it says "replace with new (y/n/a/q/l/^E/^y)?)"

L'aide intégrée de Vim offre des informations utiles sur les options disponibles une fois que la substitution avec confirmation a été sélectionnée. Utilisation:

:h :s

Ensuite, faites défiler jusqu'à la section sur les options de confirmation. Capture d'écran ci-dessous:

Text that says "[C] Confirm each substitution. [...] CTRL-Y to scroll the screen down"

Par exemple, pour remplacer ceci et toutes les correspondances restantes, utilisez a.

435
Mark Biek

Mark Biek a indiqué en utilisant:

%s/old/new/gc

pour une recherche globale, remplacez par confirmation pour chaque substitution. Mais j'aime aussi vérifier de manière interactive que l'ancien texte correspondra correctement. Je fais d'abord une recherche avec une expression régulière, puis je réutilise ce motif:

/old.pattern.to.match
%s//replacement/gc

Le s// utilisera le dernier motif de recherche.

75
Vincent Scheib

Je pense que vous cherchez c, par exemple s/abc/123/gc, cela entraînera VIM) pour confirmer les remplacements. Voir: aide: remplace pour plus d’informations.

19
Logan Capaldo

J'utilise habituellement la commande find/substitute/next/repeat :-)

/old<CR>3snew<ESC>n.n.n.n.n.n.n.

C'est find "old", substitute 3 characters for "new", find next, repeat substitute, etc.

C'est une douleur pour les substitutions massives, mais cela vous permet d'ignorer de manière sélective certaines occurrences d'ancien (en appuyant simplement de nouveau sur n pour trouver la suivante au lieu de . pour répéter une substitution).

9
paxdiablo

Si vous voulez juste compter le nombre d'occurrences de 'abc', alors vous pouvez faire %s/abc//gn. Cela ne remplace rien, mais indique simplement le nombre d'occurrences de 'abc'.

9
Amjith

Si votre texte de remplacement doit changer pour chaque occurrence correspondante (c'est-à-dire ne pas simplement choisir Oui/Non pour appliquer un remplacement singulier), vous pouvez utiliser un plugin Vim I made appelé interactive-replace .

3
hwrod

Neovim a maintenant une fonctionnalité pour prévisualiser la substitution:

enter image description here

Image tirée de: https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d Documentation de la fonctionnalité: https://neovim.io/ doc/user/options.html # 'inccommand'

0
sumek