VIM vede corrispondenze di espressioni regolari durante la digitazione


8

Se digito, /regexil cursore salta temporaneamente alla prima corrispondenza e tutte le corrispondenze vengono evidenziate. Questo aggiorna mentre scrivo. È possibile ottenere questo comportamento quando mi sto preparando a fare una sostituzione? Ad esempio, quando sto lavorando su un'espressione regolare complicata :%s/\<regex\>/, vorrei sapere cosa corrisponde prima di premere il grilletto e cambiare tutto. Qualche modo per farlo?


Sarebbe bello se funzionasse in un modo che funziona con la ricerca: evidenziando ciò che attualmente corrisponde. Hai trovato il modo migliore per farlo?
Anton Daneyko,

Risposte:


12

Digita la tua ricerca usando / (o ? ) Per cominciare, che ti permetterà di modificare la tua regex (poiché stai usando incsearch)

Una volta che hai fatto tutto bene, puoi usare il modello di ricerca precedente (quello che hai appena usato) nel comando di sostituzione usando due separatori per l'elemento 'cerca':

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

Ovviamente, puoi usare selezioni e intervalli, come di consueto.

:1,15s,,cougar,g
:'<,'>s::tiger:

+1 per avermi insegnatos//
Steven Lu

2

Un'opzione è che puoi avere un flag di conferma 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

Puoi anche provare grepa visualizzare l'output filtrato e il file originale evidenziato.

:g/re/p o :g/re/


Mi piace, ma mi impone comunque di completare l'espressione regolare prima di vedere cosa succede se qualcosa è stato abbinato.
John Berryman,

0

Bene, il modo più breve per vedere cosa corrisponderà alla tua espressione regolare è fare una ricerca /usando la regex desiderata. Passerà al primo incontro e lo segnerà mentre lo stai digitando. Provalo - vimnon ti deluderà.


Vero, sebbene sia quello che ho affermato nella domanda. Vorrei che si aggiornasse mentre mi sto preparando a sostituire. Con la tua soluzione devo provare il regex e poi copiarlo (come?) E poi usarlo in sostituzione. Non è abbastanza buono.
John Berryman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.