Risposte:
io userei \zs
:%s/.*\zspattern/replacement/
Un po 'di spiegazione:
.
rappresenta un singolo personaggio*
rappresenta una corrispondenza avida (il maggior numero possibile)In Vim è possibile utilizzare ancore di larghezza zero \zs
e \ze
definire l'inizio e la fine del modello cercato, che si desidera abbinare. Qualsiasi cosa prima \zs
e dopo \ze
nel tuo schema rimarrà inalterata dalla sostituzione.
Per rendere più facile da capire, vorrei utilizzare questo esempio da Wikia 's Ricerca e sostituzione :
Salvare la digitazione utilizzando
\zs
e\ze
per impostare l'inizio e la fine di un motivo. Ad esempio, anziché::s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
Uso:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
Per ulteriori informazioni, guarda
.*
è avido .
Puoi cercare l'ultima partita raggruppando tutti \(.*\)
, ma l'ultima volta di pattern
. Quindi uscire con il gruppo acquisito \1
e aggiungere il replacement
.
:%s/\(.*\)pattern/\1replacement/
\zs
soluzione di @ ryuichiro , in quanto il tuo \1
approccio è funzionalmente equivalente, ma più dettagliato. (D'altra parte, può essere più facile da ricordare per alcuni, in particolare se sono usati per altri sapori regex.))
Per completezza, ho pensato di pubblicare un'alternativa. Vim ha più elementi alcuni dei quali sono simili alle asserzioni di ricerca di espressioni regolari più standard (lookahead / lookbehind negativo / positivo). /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
In questo caso vogliamo uno sguardo negativo \@!
, nel senso che vogliamo affermare che l' atomo che precede l'elemento non si verifica dopo il modello . In questo caso l'atomo è il modello stesso preceduto da qualsiasi altra cosa:
:%s/pattern\(.*pattern\)\@!/replacement/
La parte tra parentesi è a larghezza zero e non è inclusa nella corrispondenza, quindi non viene sostituita dalla sostituzione.
:h \@!
per ulteriori informazioni o :h pattern-multi-items
per l'intera sezione contenente altre varianti di lookaround.
\zs
fa la vostra risposta?