viでは、検索と置換を行うために、「/」(スラッシュ)をエスケープして正しいようにします。パスで言います。
など:/ Users/tom/documents/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
私は何が欠けていますか?
内部でスラッシュをエスケープする必要もあります。
:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g
または、:%s,foo/bar/baz,foo/bar/boz,g
-私はほとんどnever混乱を避けるためにスラッシュを使用します。
サラが示唆したように、すべてのスラッシュをエスケープする必要があります。
代わりに、スラッシュ以外の別の文字を区切り文字として使用できます。これは、検索文字列に多くのスラッシュが含まれている場合に便利です。
:%s#/Users/tom/documents/pdfs/#<new test>#g
これはvimで完全に機能します。私はVanilla viについて100%確信していません。
_?
_を使用して検索できます
レジスタでパターンを検索する場合、パターンに「/」文字が含まれている場合、通常モードから_?
_コマンドの代わりに_/
_コマンドを使用して、パターンマッチングを開始できます。そのような場合、「/」文字にエスケープは必要ありません。 (ただし、「?」文字を今すぐエスケープする必要があります)
_?
_は_/
_と反対方向に検索するため、検索方向を気にせず、検索パターンに「?」が含まれていない場合char。
さらに、必要な場合はescape()
スクリプトを確認してください。
私はこの質問が数年前のものであることを知っていますが、より簡単な解決策を探してこれに着くかもしれない他の人のために、2014年に、あなたはそれをする限り、「!」のような他のものに「/」区切り文字を置き換えることができますこのように、フロント、ミドル、バック:
:%s!foo/bar/baz!foo/bar/boz!g
Mederの答えに非常に似ています...しかし、私は感嘆符をセパレータとして見る方がずっと簡単だと思います。そして、この方法がMac OSX Mavericksで使用しているVIMの現在のバージョンでもまだ機能することを確認したかっただけです。
Windowsはディレクトリにバックスラッシュを使用し、Linuxはディレクトリにスラッシュを使用します。 Vimは、オペレーティングシステムで動作するテキストエディターです。両方のOSは、スラッシュの使用方法に関して異なるディレクトリパスの解釈を持っているため、VimはWindowsのツイストメソッドを解釈する方法を必要とします。
C:\Program Files (x86)\Microsoft OneDrive\
/usr/bin
_Linux PCではないので、WindowsでのVimの検索と置換の苦労のみを述べることができます。
:%s/c:\\Program Files (x86)\\Microsoft OneDrive\\/annoyancereplaced/g
:%s/c:\Program Files (x86)\Microsoft OneDrive\/unabletoreplaceannoyance/g
\\
_を使用する場合、バックスラッシュは常に偶数であるため、バックスラッシュごとに別のバックスラッシュが必要であることを意味します。\\Foo\Bar\
_%s/C:\\Program Files (x86)\\foo\\bar/\\\\Foo\\Bar\\
\\\\
_に注意してください