2012-05-02 12 views
11

che sto cercando di sostituire tutte le occorrenze di hello(...) da hello[...]vim sostituzione regex

Ho provato cose come %s/hello\((.*?)\)/hello\[$1\]/ senza alcun successo

Qualsiasi aiuto pls?

risposta

16

Questa è la sintassi Perl, non Vim. Nelle espressioni regolari di Vim, almeno per impostazione predefinita, le parentesi corrispondono a se stesse e le parentesi catturate con backslash, ovvero l'opposto di Perl. Inoltre, Vim non comprende il modificatore non avido ? e i gruppi di cattura sono interpolati con \n, non $n. Prova questo:

%s/hello(\([^)]*\))/hello[\1]/ 

In alternativa, è possibile utilizzare il modificatore \v ("molto magico") per rendere il comportamento rispetto a caratteri speciali e backslash più Perl-like, anche se non fa capire Vim *? o cambiare la sua sintassi di interpolazione:

%s/\vhello\(([^)]*)\)/hello[\1]/ 

si noti inoltre che non è necessario barre rovesciate sulle parentesi quadre nel testo di sostituzione - il lato destro di una sostituzione di comando è non un'espressione regolare, in modo da don Non devi preoccuparti della maggior parte dei personaggi sono speciali in uno. Quasi solo il backslash è di per sé speciale e può essere utilizzato per includere gruppi di cattura o un'istanza letterale di se stesso o delimitatore.

Problemi correlati