Wie entgeht man Backslashes und Forward Slashes in VIM find / search?


96

Wenn ich zum Beispiel suchen und durch Zeichenfolgen ersetzen möchte, die Schrägstriche mit Rückwärts- oder Vorwärtsrichtung enthalten, wie würde dies in vim erreicht werden? Danke dir!

Beispiele Suchen & Ersetzen ist: :%s/foo/bar/g

Was wäre, wenn ich alle Vorkommen finden <dog/>und durch ersetzen wollte?<cat\>


3
Nicht unbedingt eine Antwort, aber Sie sollten wahrscheinlich lesen: Hilfe Magie
Tom Morris

+1 Tom, im Allgemeinen die vernünftigste Lösung, wenn Sie mit einem mehr als trivialen regulären Ausdruck arbeiten.
Randy Morris

@ Tom @ Randy jedoch ... die vi --helpauf meinem Server bietet keine Erklärung für das Entkommen von Sonderzeichen ... weshalb die Leute zunächst zu Stackoverflow kommen ...
aequalsb

@aequalsb :help magicist etwas, das Sie in vim eingeben . Es ist kein Befehlszeilenargument für vim.
DoubleDown

Antworten:


150

Genauso wie Sie Zeichen in Linux-Programmen fast überall mit einem Backslash entkommen:

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

Beachten Sie jedoch, dass Sie stattdessen ein anderes Trennzeichen auswählen können:

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

Dies erspart Ihnen das Eingeben all dieser zeitaufwändigen, verwirrenden Backslashes in Mustern mit einer Menge Slashes.

Aus der Dokumentation :

Anstelle des /Musters und der Ersetzungszeichenfolge können Sie jedes andere Einzelbytezeichen verwenden, jedoch kein alphanumerisches Zeichen \, "oder |. Dies ist nützlich, wenn Sie ein /in das Suchmuster oder die Ersatzzeichenfolge aufnehmen möchten .


1
So wird automatisch das von Ihnen gewählte Trennzeichen ermittelt?
Stormist

11
Ja. Das Zeichen nach dem swird als Trennzeichen verwendet. Ich kann nicht herausfinden, wo ich eine Liste in der Dokumentation gefunden habe, aber ich bin mir ziemlich sicher, dass sie zumindest /:;*%@#gültig sind.
Cascabel

Dies ist praktisch, wenn Sie \ in / in einer Datei mit vielen Pfaden im Windows-Stil ersetzen. Vielen Dank.
Isaac Nequittepas

Um zu dieser Nachricht in der Dokumentation zu gelangen, verwenden Sie: h e146
jcollado

Hatte keine Ahnung, dass Sie das Trennzeichen ändern könnten! Das ist riesig - danke.
Brettins

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

Sie können die / Trennzeichen ersetzen, wenn sie für bestimmte Muster ärgerlich werden.


3
+1 für :Trennzeichen. Ich wusste nicht, dass du das gebrauchen kannst. Ich habe es immer @in Zeiten der Flucht benutzt
Jeffrey Jose

8

Zitiere sie mit einem Backslash. Außerdem ist es oft hilfreich, neben dem Schrägstrich ein anderes Trennzeichen zu verwenden.

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

oder wenn Sie einen Schrägstrich als Ersatzbefehlsbegrenzer verwenden müssen

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


2

Ich suchte nach etwas Ähnlichem, um nach Registerwerten zu suchen, die das /Zeichen enthalten (um ein Makro aufzuzeichnen). Die Lösung bestand darin, mit dem ?Token anstelle des zu suchen /.


Beachten Sie, dass ?eine Rückwärtssuche durchgeführt wird und nicht dasselbe ist.
Martin Tournoij

-1

Backslash Slash Backslash Star

/(<- the prompt)\/\*

Nachdem Sie eingegeben haben, sieht es so aus

/\/\*

1
Inwiefern unterscheidet sich diese Antwort von denen, die seit fast sechs Jahren auf der Website sind?
Martin Tournoij
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.