2010-03-17 18 views
58

Ad esempio, se volessi trovare e sostituire stringhe contenenti barre rovesciate o avanti, come si compirebbe questo in vim? Grazie!Come si evitano i backslash e le barre in avanti nella ricerca/ricerca VIM?

Esempi Trova & Sostituire è: :%s/foo/bar/g

cosa succede se volevo trovare tutte le occorrenze di <dog/> e sostituirlo con <cat\>

+3

rigorosamente una risposta, ma probabilmente si dovrebbe leggere: aiutare la magia –

+0

+1 Tom, generalmente il più sano di mente soluzione quando si lavora con una regex più che banale. –

+0

@Tom @Randy tuttavia ... il 'vi --help' sul mio server NON fornisce la spiegazione di caratteri speciali di escape ... ecco perché la gente arriva allo stackoverflow per cominciare con ... – aequalsb

risposta

100

Allo stesso modo si sfuggire personaggi più in qualsiasi altro luogo in programmi linuxy, con un backslash:

:%s/<dog\/>/<cat\\> 

Ma nota che puoi selezionare un diverso delimitatore:

:%[email protected]<doc/>@<cat\\>@ 

Ciò consente di risparmiare tutti i tipi di backslash che richiedono tempo e confondono i pattern con una tonnellata di barre.

Dalla documentazione:

Invece del '/' che circonda la stringa di modello e la sostituzione, si possibile utilizzare qualsiasi altro carattere a singolo byte, ma non un carattere alfanumerico, '\', '"' o '|'. Questo è utile se si desidera includere un '/' nella ricerca modello o stringa di sostituzione

+0

Quindi individuerà automaticamente il delimitatore scelto? – stormist

+6

Sì. Il carattere dopo il 's' è considerato il delimitatore. Non riesco a capire dove ho trovato una lista nella documentazione, ma sono quasi sicuro che '/:; *% @ #' sono validi. – Cascabel

+0

Ah, l'ho trovato. Modificato! – Cascabel

6

citarli con un backslash. Inoltre, spesso aiuta a usare un altro delimitatore oltre alla barra.

:%s#<dog/>#<cat\\># 

o se si deve utilizzare barra come delimitatore di comando sostituto

:%s/<dog\/>/<cat\\>/ 
18
%s:<dog/>:<cat> 

è possibile sostituire i delimitatori/se diventano una. noying per determinati modelli.

+2

+1 per delimitatore ':'. Non sapevo che potresti usarlo. Ho sempre usato '@' in tempi di 'escape-mess' –

2

La sintassi è:

:%s/<dog\/>/<cat\\>/g 
1

ero alla ricerca di qualcosa di simile, per la ricerca di valori di registro che contengono il carattere / (per registrare una macro). La soluzione era quella di cercare usando il token ? invece del /.

+0

Nota che '?' Farà una ricerca all'indietro, e non è la stessa cosa. – Carpetsmoker

-1

backslash barra barra rovesciata stelle

/(<- the prompt)\/\* 

così dopo aver digitato sembra

/\/\* 
Non
+1

In che modo questa risposta è diversa da quelle che sono sul sito da quasi sei anni? – Carpetsmoker

Problemi correlati