web-dev-qa-db-ja.com

/ viで検索および置換しますか?

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

私は何が欠けていますか?

60
JT.

内部でスラッシュをエスケープする必要もあります。

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

または、:%s,foo/bar/baz,foo/bar/boz,g-私はほとんどnever混乱を避けるためにスラッシュを使用します。

117
meder omuraliev

サラが示唆したように、すべてのスラッシュをエスケープする必要があります。

代わりに、スラッシュ以外の別の文字を区切り文字として使用できます。これは、検索文字列に多くのスラッシュが含まれている場合に便利です。

:%s#/Users/tom/documents/pdfs/#<new test>#g

これはvimで完全に機能します。私はVanilla viについて100%確信していません。

15
Bob

_?_を使用して検索できます

レジスタでパターンを検索する場合、パターンに「/」文字が含まれている場合、通常モードから_?_コマンドの代わりに_/_コマンドを使用して、パターンマッチングを開始できます。そのような場合、「/」文字にエスケープは必要ありません。 (ただし、「?」文字を今すぐエスケープする必要があります)

_?_は_/_と反対方向に検索するため、検索方向を気にせず、検索パターンに「?」が含まれていない場合char。

さらに、必要な場合はescape()スクリプトを確認してください。

5
JXITC

私はこの質問が数年前のものであることを知っていますが、より簡単な解決策を探してこれに着くかもしれない他の人のために、2014年に、あなたはそれをする限り、「!」のような他のものに「/」区切り文字を置き換えることができますこのように、フロント、ミドル、バック:

:%s!foo/bar/baz!foo/bar/boz!g

Mederの答えに非常に似ています...しかし、私は感嘆符をセパレータとして見る方がずっと簡単だと思います。そして、この方法がMac OSX Mavericksで使用しているVIMの現在のバージョンでもまだ機能することを確認したかっただけです。

Windowsはディレクトリにバックスラッシュを使用し、Linuxはディレクトリにスラッシュを使用します。 Vimは、オペレーティングシステムで動作するテキストエディターです。両方のOSは、スラッシュの使用方法に関して異なるディレクトリパスの解釈を持っているため、VimはWindowsのツイストメソッドを解釈する方法を必要とします。

LINUXFORWARD vs. WINDOWSBACK(ディレクトリスラッシュ)

  • スラッシュはWindowsでは文字通り反転され、Linuxでは簡単に記述できます
    • Windows:
    • C:\Program Files (x86)\Microsoft OneDrive\
    • Linux:
    • _/usr/bin_

溶液

Linux PCではないので、WindowsでのVimの検索と置換の苦労のみを述べることができます。

  • 修正はバックスラッシュを二重にすることです
    • 良い:
    • :%s/c:\\Program Files (x86)\\Microsoft OneDrive\\/annoyancereplaced/g
    • 悪い:
    • :%s/c:\Program Files (x86)\Microsoft OneDrive\/unabletoreplaceannoyance/g
  • ネットワークパスで作業する場合、Windowsが2つのスラッシュ_\\_を使用する場合、バックスラッシュは常に偶数であるため、バックスラッシュごとに別のバックスラッシュが必要であることを意味します。
    • 例えばネットワークパス:_\\Foo\Bar\_
    • %s/C:\\Program Files (x86)\\foo\\bar/\\\\Foo\\Bar\\
    • _\\\\_に注意してください
0
fohrums