2011-12-16 21 views
8

Sto cercando di cercare e sostituire $data['user'] per $data['sessionUser'].Vim Cerca/sostituisci: cosa devo sfuggire?

Tuttavia, indipendentemente dalla stringa di ricerca che utilizzo, ottengo sempre un "motivo non trovato" come risultato di esso.

Quindi, quale sarebbe la stringa di ricerca corretta? Devo sfuggire a qualcuno di questi personaggi? :%s/$data['user']/$data['sessionUser']/g

risposta

2
:%s/\$data\[\'user\'\]/$data['sessionUser']/g 

non ho la prova, ma credo che dovrebbe funzionare.

+2

Non sono necessarie le fughe nella parte di sostituzione. –

+0

Sì, ha funzionato. Grazie! – Falassion

1

Il codice [ ha un significato in regex. Sta per character ranges. Il codice $ ha anch'esso un significato. Sta per end-line anchor. Quindi devi sfuggire a molte cose. Ti suggerisco di provare un piccolo plug-in come this o questo one e utilizzare una ricerca visiva.

+0

Stavo davvero cercando un'opzione più semplice per la ricerca. Verrò a sapere di più sulla ricerca e sulla sostituzione integrate, ma è probabile che proverò uno di quelli che mi hai mostrato. Grazie. – Falassion

2

ricerca e sostituzione in vim è quasi identica a sed, in modo da utilizzare le stesse fughe come si farebbe con quel:

:%s/\$data\['user'\]/$data['session']/g 

Si noti che è veramente solo bisogno di fuggire caratteri speciali nella parte di ricerca (la parte tra il primo set di // s). L'unico carattere che è necessario sfuggire nella parte di sostituzione è il carattere di escape \ stesso (che non stai utilizzando qui).

+0

Informazioni interessanti sul secondo '//'. Grazie per questo. – Falassion

2

Non c'è niente di sbagliato con le risposte date, ma si può fare questo:

:%s/$data\['\zsuser\ze']/sessionUser/g 

\zs e \ze può essere usato per delimitare la parte della partita che è influenzato dalla sostituzione. Non è necessario sfuggire allo $ poiché si trova all'inizio del modello e non può corrispondere a un EOL qui. E non è necessario sfuggire allo ] poiché non ha un valore iniziale corrispondente a [. Tuttavia non c'è certamente alcun danno nel fuggire da questi personaggi se non riesci a ricordare tutte le regole. Vedi: help pattern.txt per i dettagli completi, ma non cercare di digerirlo tutto in un colpo solo!

Se si desidera ottenere fantasia, si può fare:

:%s/$data\['\zsuser\ze']/session\u&/g 

& si riferisce a tutto il testo corrispondente (delimitato da \zs e \ze se presente), in modo che diventi 'utente' in questo caso. Il \u quando utilizzato in una stringa di sostituzione rende il carattere successivo maiuscolo. Spero che aiuti.

Problemi correlati