La sostituzione globale di Vim non sostituisce tutte le partite in una riga


12

a volte le mie sottotistusioni globali non sostituiscono tutte le partite in una riga. È confermato dal fatto che posso vederlo quando eseguo sostituzioni con conferma, una corrispondenza viene trovata in una riga con più possibili corrispondenze, ma poi passa a un'altra riga.

Uso i parametri go gcche operano sull'intero file con %.

Su questo file:

hello hello
hello
hello hello hello
hello

Se lo faccio %s/hello/goodbye/gottengo

goodbye hello
goodbye
goodbye hello hello
goodbye

Tutto ciò che ho nella mia .vimrcricerca / sostituzione è

set hlsearch
set ignorecase
set incsearch

3
Per favore, dacci un esempio del mondo reale e mostraci il tuo vimrc.
Romainl

2
Qual è l'output di :echo &gde cosa succede se aggiungi un secondo gflag come questo: %s/hello/goodbye/ggo se rimuovi completamente il gflag? Se l'output di :echo &gdè 1, prova ad aggiungere set nogdefaultalla fine del tuo vimrc.
user9433424

1
Bene! Non so perché, ma per impostazione predefinita era impostato su 0, quindi ho aggiunto set nogdefaultcome hai detto e funziona ora, a proposito. Grazie!
Nicolas Scotto Di Perto,

Risposte:


12

Forse tu o un plug-in avete abilitato l'opzione 'gdefault'. Questa opzione aggiunge gautomaticamente il flag ogni volta che si esegue una sostituzione.

Quindi, quando aggiungi manualmente il flag gmentre 'gdefault'è abilitato, è come se avessi 2 gflag che hanno lo stesso effetto di nessuno. Pertanto, Vim sostituisce solo la prima occorrenza del pattern su ogni riga.

Per impostazione predefinita, questa opzione è disattivata, ma per assicurarsi che sia, si potrebbe aggiungere alla fine del vostro vimrc: set nogdefault.

In alternativa, se sospetti che un plugin abbia abilitato l'opzione, puoi rintracciarlo con: verb set gd?

Oppure potresti abituarti all'opzione, il che significa che quando vuoi sostituire tutte le occorrenze di un pattern, non aggiungi il gflag (perché l' gdefaultho già fatto) e quando vuoi sostituire solo la 1a occorrenza del pattern su una linea, aggiungi il gflag (perché 2 gflag sono uguali a nessuno).

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.