Come si evitano le barre rovesciate e le barre in avanti nella ricerca / ricerca VIM?


96

Ad esempio, se volessi trovare e sostituire con stringhe contenenti barre all'indietro o in avanti, come sarebbe possibile in vim? Grazie!

Esempi Trova e sostituisci sono: :%s/foo/bar/g

e se volessi trovare tutte le occorrenze di <dog/>e sostituirlo con<cat\>


3
Non strettamente una risposta, ma probabilmente dovresti leggere: help magic
Tom Morris

+1 Tom, generalmente la soluzione più sensata quando si lavora con una regex più che banale.
Randy Morris

@Tom @Randy tuttavia ... vi --helpsul mio server NON viene fornita una spiegazione dell'escape di caratteri speciali ... motivo per cui le persone vengono a stackoverflow per cominciare ...
aequalsb

@aequalsb :help magicè qualcosa che scrivi in vim. Non è un argomento della riga di comando per vim.
Doppio in calo il

Risposte:


150

Nello stesso modo in cui esegui l'escape dei caratteri quasi ovunque nei programmi Linux, con una barra rovesciata:

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

Tieni presente che puoi invece selezionare un delimitatore diverso:

:%s@<doc/>@<cat\\>@

Ciò ti consente di risparmiare tutti quei backslash confusi e dispendiosi in termini di tempo nei modelli con un sacco di barre.

Dalla documentazione :

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


1
Quindi individuerà automaticamente il delimitatore scelto?
Stormist

11
Sì. Il carattere dopo il sè considerato il delimitatore. Non riesco a capire dove ho trovato un elenco nella documentazione, ma sono abbastanza sicuro che almeno /:;*%@#siano validi.
Cascabel

Questo è utile quando si sostituisce \ into / in un file con molti percorsi in stile Windows. Grazie.
Isaac Nequittepas

Per ottenere quel messaggio nella documentazione, utilizzare: h e146
jcollado

Non avevo idea che potessi cambiare il delimitatore! È enorme, grazie.
Brettins

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

È possibile sostituire i delimitatori / se diventano fastidiosi per determinati modelli.


3
+1 per :delimitatore. Non sapevo che potessi usarlo. Ho sempre usato @in tempi di 'fuga-pasticcio'
Jeffrey Jose

8

Citali con una barra rovesciata. Inoltre, spesso aiuta a usare un altro delimitatore oltre alla barra.

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

o se devi usare la barra come delimitatore di comando sostitutivo

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


2

Stavo cercando qualcosa di simile, per cercare i valori di registro contenenti il /carattere (per registrare una macro). La soluzione era cercare utilizzando il ?token anziché il /.


Nota che ?farà una ricerca all'indietro, e non è la stessa cosa.
Martin Tournoij

-1

barra rovesciata barra rovesciata stella

/(<- the prompt)\/\*

quindi dopo aver digitato sembra

/\/\*

1
In che modo questa risposta è diversa da quelle che sono state sul sito per quasi sei anni?
Martin Tournoij
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.