webentwicklung-frage-antwort-db.com.de

/ in vi Suchen und Ersetzen?

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?

54
JT.

Sie müssen die vorderen Schrägstriche auch intern entziehen.

:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g
62
Sarah Vessels

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.

111
meder omuraliev

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.

14
Bob

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.

4
JXITC

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.

LINUXFORWARD vs. WINDOWSBACK (DIRECTORY SLASHES)

  • Die Schrägstriche sind in Windows buchstäblich umgekehrt und für Linux einfach anzugeben
    • Windows:
    • C:\Program Files (x86)\Microsoft OneDrive\
    • Linux:
    • /usr/bin

LÖSUNG

Ich kann nur den Kampf um Vims Find & Replace unter Windows erklären, da ich nicht auf einem Linux-PC bin.

  • Fix ist das doppelte Backslash
    • GUT:
    • :%s/c:\\Program Files (x86)\\Microsoft OneDrive\\/annoyancereplaced/g
    • SCHLECHT:
    • :%s/c:\Program Files (x86)\Microsoft OneDrive\/unabletoreplaceannoyance/g
  • Wenn Sie mit Netzwerkpfaden arbeiten, wobei Windows zwei Schrägstriche \\ Verwendet, bedeutet dies, dass für jeden Backslash ein weiterer Backslash erforderlich ist, da dieser immer gerade gehalten wird
    • z.B. Netzwerkpfad: \\Foo\Bar\
    • %s/C:\\Program Files (x86)\\foo\\bar/\\\\Foo\\Bar\\
    • beachte den \\\\
0
fohrums