VIM voit les correspondances d'expressions régulières pendant que vous tapez

8

Si je tape, /regexle curseur saute temporairement sur la première correspondance et toutes les correspondances sont mises en surbrillance. Cela se met à jour au fur et à mesure que je tape. Est-il possible d'obtenir ce comportement lorsque je me prépare à effectuer une substitution? Par exemple, lorsque je travaille sur une expression régulière compliquée :%s/\<regex\>/, je voudrais savoir ce qui correspond avant d'appuyer sur la gâchette et de tout changer. Une façon de le faire?

John Berryman
la source
Ce serait bien si cela fonctionnait d'une manière qui fonctionne avec la recherche: en mettant en évidence ce qui correspond actuellement. Avez-vous trouvé la meilleure façon de procéder?
Anton Daneyko

Réponses:

12

Tapez votre recherche en utilisant / (ou ? ) Pour commencer, ce qui vous permettra de modifier votre regex (puisque vous utilisez incsearch)

Une fois que tout est bien, vous pouvez utiliser le modèle de recherche précédent (celui que vous venez d'utiliser) dans la commande de remplacement en utilisant deux séparateurs pour l'élément de recherche:

/elephant                       " find the next elephant
:%s//rhino/gc                   " make then all rhinos!

Bien sûr, vous pouvez utiliser des sélections et des plages, comme d'habitude.

:1,15s,,cougar,g
:'<,'>s::tiger:
lornix
la source
+1 pour m'avoir enseignés//
Steven Lu
2

Une option est que vous pouvez avoir un indicateur de confirmation c.

:%s;regex;replacement;gc

:h s_flags:

[c] Confirm each substitution.  Vim highlights the matching string.  You can type:              
        'y'     to substitute this match
        'l'     to substitute this match and then quit ("last")
        'n'     to skip this match
        <Esc>   to quit substituting
        'a'     to substitute this and all remaining matches
        'q'     to quit substituting

Vous pouvez également essayer la grepcommande pour voir la sortie filtrée et le fichier d'origine mis en surbrillance.

:g/re/p ou :g/re/

Prince John Wesley
la source
J'aime ça, mais il me faut quand même compléter l'expression régulière avant de voir si quelque chose était assorti.
John Berryman
0

Eh bien, le moyen court de voir à quoi correspondra votre expression régulière consiste à effectuer une recherche en /utilisant l'expression rationnelle souhaitée. Il passera à la première correspondance et le marquera pendant que vous le taperez. Essayez-le - vimne vous décevra pas.


la source
C'est vrai, mais c'est ce que j'ai déclaré dans la question. Je souhaite qu'il soit mis à jour alors que je me prépare à remplacer. Avec votre solution, je dois essayer l'expression rationnelle, puis la copier (comment?), Puis l'utiliser dans une substitution. Ce n'est pas assez bon.
John Berryman