Come modificare selettivamente una stringa evidenziata?


11

Cercando, ho evidenziato la stringa che voglio cambiare. Ora voglio sostituire solo il testo evidenziato. Sto usando nper passare all'istanza successiva della stringa di ricerca. Pensavo di poter fare qualcosa del genere, ciwma ciò cambia l'intera parola non solo il testo evidenziato.

Conosco bene :%s/old/new/gma non voglio cambiare tutte le istanze. Invece, voglio spostare il cursore su ciascuna istanza e quindi decidere se modificarlo.

Risposte:


16

Usa il gnmovimento per modificare la corrispondenza di ricerca corrente. L'esempio seguente cambierà la corrispondenza corrente in "FooBar":

cgnFooBar

Il bello di questa tecnica è che puoi ripetere la modifica tramite .. Supponendo che la prossima partita verrà cambiata nello stesso modo in cui puoi semplicemente usare .per ripetere. Oppure salta alcune partite tramite ne poi usa ..

Vimcasts ha un bell'episodio sull'argomento: operare sulle partite di ricerca usando gn

Per ulteriori informazioni, consultare:

:h gn

Questa è sicuramente la strada da percorrere quando si hanno stringhe di sostituzione diverse che è necessario utilizzare in luoghi diversi. Non sono sicuro delle sfumature della modalità visiva che sembra essere invocata da gn, quindi ecco un metodo simile che ho appena scoperto:c//e<CR>FooBar<Esc>//<CR>
Jeff

C'è un modo per cambiare tutte le selezioni / partite contemporaneamente? Fondamentalmente, per refactoring?
Geremia,

@Geremia, sì, :%s/oldtext/newstuff/gcambierà tutte le partite di oldtexta newstuff.
zundarz,

@zundarz Non voglio fare una regexp, ma sostituire solo i nomi delle variabili. Invece di colpire .più volte, posso usare :%norm .( fonte ).
Geremia,

7

Se hai già cercato una parola con /wordo ?word.

È possibile utilizzare :%s//newword/gcper sostituire la parola cercata in precedenza newword, lasciando s//..vuoto il termine di ricerca ( ).

La cbandiera dice che ogni modifica dovrebbe essere confermata, premendo yper sì o nper no.

Dai un'occhiata a :help :s_flagsmaggiori informazioni sul flag di conferma.


1
So che hai detto di guardare l'aiuto, ma si potrebbe anche parlare esplicitamente è anche possibile premere l, ae q(o <Esc>) per vari modi per concludere il ciclo di conferma.
Jeff,

2

Metodo n. 1

Puoi sfruttare i mapping gne gNper ottenere ciò che desideri. gncercherà in avanti l'ultimo termine di ricerca utilizzato e selezionerà visivamente la corrispondenza. gNfa esattamente la stessa cosa, tranne che cerca all'indietro. Se combinato con un operatore come c, ad esempio , l'operatore verrà applicato alla corrispondenza, ad esempio, se l'ultima stringa di ricerca è "pippo" e si digita cgn, cercherà in avanti l'istanza successiva di "pippo", eliminandola e metterti in modalità inserimento per inserire il testo sostitutivo.

Per ulteriori informazioni su questi, vedere :help gne :help gN.

Metodo n. 2

Puoi usare il :substitutecomando con la cbandiera. Questo ti chiederà di confermare ogni sostituzione. Ad esempio, supponiamo che tu voglia sostituire foo con bar nell'intero file, ma desideri confermare ogni sostituzione:

:%s/foo/bar/gc

Per ulteriori informazioni su questo, vedere gli argomenti della Guida: :help :s_flags, :help cmdline-ranges, e :help :substitute.

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.