in vi, suchen und ersetzen, wie kann man einem '/' (Schrägstrich) entgehen, damit es korrekt ist. Sag auf einem Pfad.
wie:/Benutzer/Tom/Dokumente/Pdfs /
:%s//Users/tom/documents/pdfs//<new text>/g --FAILS (obviously)
:%s/\/Users/tom/documents/pdfs\//<new text>/g -- FAILS with a trailing error
:%s/'/Users/tom/documents/pdfs/'/<new text>/g -- FAILS with a trailing error
Was vermisse ich?
Sie müssen die vorderen Schrägstriche auch intern entziehen.
:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g
Alternativ können Sie :%s,foo/bar/baz,foo/bar/boz,g
- ich fast niemals verwenden, um Schrägstriche zu verwenden, da die Verwirrung überwunden wird.
Wie Sarah vorschlug, müssen Sie ALLE Schrägstriche ausschließen.
Sie können statt des Schrägstrichs stattdessen auch ein anderes Zeichen verwenden. Dies ist praktisch, wenn Ihre Suchzeichenfolge viele Schrägstriche enthält.
:%s#/Users/tom/documents/pdfs/#<new test>#g
Das funktioniert perfekt in vim. Ich bin nicht zu 100% sicher bei Vanilla vi.
Sie können ?
zum Suchen verwenden
Wenn Sie ein Muster in einem Register suchen und das Muster ein '/' Zeichen enthält, können Sie einfach den Befehl ?
anstelle des Befehls /
aus dem Normalmodus verwenden, um den Musterabgleich zu starten. In diesem Fall ist für '/' char keine Flucht mehr erforderlich. (aber Sie müssen jetzt '?' char entkommen)
?
sucht in der entgegengesetzten Richtung von /
. Wenn Sie sich also nicht um die Suchrichtung kümmern, enthält Ihr Suchmuster nicht '?' verkohlen.
Überprüfen Sie außerdem das Skript escape()
, wenn Sie mehr wollen.
Ich weiß, dass diese Frage mehrere Jahre alt ist, aber für andere, die auf der Suche nach einer einfacheren Lösung landen, können Sie 2014 das Trennzeichen "/" durch etwas anderes wie "!" Ersetzen, solange Sie dies tun vorne, mitte und hinten wie folgt:
:%s!foo/bar/baz!foo/bar/boz!g
Sehr ähnlich zu Meders Antwort ... Aber ich finde, dass der Ausruf als Trennzeichen viel einfacher zu sehen ist. Ich wollte nur bestätigen, dass diese Methode in der aktuellen Version von VIM, die ich in Mac OSX Mavericks verwende, weiterhin funktioniert.
Windows verwendet Backslash für Verzeichnisse und Linux verwendet Forward-Slash für Verzeichnisse. Vim ist ein Texteditor, der für Betriebssysteme funktioniert. Da beide Betriebssysteme unterschiedliche Verzeichnispfadinterpretationen in Bezug auf die Verwendung von Schrägstrichen haben, muss Vim dann eine Möglichkeit zur Interpretation der Windows-Twisted-Methode benötigen.
C:\Program Files (x86)\Microsoft OneDrive\
/usr/bin
Ich kann nur den Kampf um Vims Find & Replace unter Windows erklären, da ich nicht auf einem Linux-PC bin.
:%s/c:\\Program Files (x86)\\Microsoft OneDrive\\/annoyancereplaced/g
:%s/c:\Program Files (x86)\Microsoft OneDrive\/unabletoreplaceannoyance/g
\\
Verwendet, bedeutet dies, dass für jeden Backslash ein weiterer Backslash erforderlich ist, da dieser immer gerade gehalten wird \\Foo\Bar\
%s/C:\\Program Files (x86)\\foo\\bar/\\\\Foo\\Bar\\
\\\\