VIM検索/検索でバックスラッシュとスラッシュをエスケープするにはどうすればよいですか?


96

たとえば、バックスラッシュまたはフォワードスラッシュを含む文字列で検索して置換したい場合、vimでこれをどのように実行しますか?ありがとうございました!

検索と置換の例は次のとおりです。 :%s/foo/bar/g

のすべての出現箇所を見つけて<dog/>置き換えたい場合<cat\>


3
厳密には答えではありませんが、おそらく:help magic
Tom Morris

+1トム、これは些細な正規表現よりも一般的に最も健全なソリューションです。
ランディモリス

@Tom @Randyしかしながら... vi --help私のサーバーでは特殊文字のエスケープの説明を提供していません...それが人々が
スタックオーバーフロー

@aequalsb :help magicは、vim 内で入力するものです。これはvimのコマンドライン引数ではありません。
doubleDown

回答:


150

linuxyプログラムの他のほとんどの場所でバックスラッシュを使用して文字をエスケープするのと同じ方法:

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

ただし、代わりに別の区切り文字を選択できることに注意してください。

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

これにより、大量のスラッシュを含むパターンで、時間のかかる混乱するバックスラッシュをすべて入力する手間が省けます。

ドキュメントから:

代わりに/、パターンと置換文字列を囲んでいる、あなたは、他のシングルバイト文字ではなく、英数字を使用することができ \"または|。これは/、検索パターンまたは置換文字列にを含める場合に役立ちます。


1
だから、それはあなたが選んだ区切り文字を自動的に理解しますか?
ストミスト

11
はい。の後sの文字が区切り文字と見なされます。ドキュメントのどこでリストを見つけたのかわかりませんが、少なくとも/:;*%@#有効であることは確かです。
Cascabel

これは、ファイル内の\を/に多数のWindowsスタイルのパスで置き換えるときに便利です。ありがとう。
Isaac Nequittepas 2012年

ドキュメントでそのメッセージにアクセスするには、次を使用します。h e146
jcollado '25

区切り文字を変更できるとは思いもしませんでした!それは巨大です-ありがとう。
Brettins 2017年

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

/区切り文字は、特定のパターンで煩わしい場合に置き換えることができます。


3
:デリミタの場合は+1 。あなたがそれを使うことができるとは知りませんでした。私はいつも@「エスケープ混乱」の時代に使用しました
Jeffrey Jose

8

バックスラッシュでそれらを引用します。また、スラッシュ以外の区切り文字を使用すると便利な場合があります。

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

または、代替コマンドの区切り文字としてスラッシュを使用する必要がある場合

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


2

/(マクロを記録するために)文字を含むレジスタ値を検索するために、同様の何かを探していました。解決策は、の?代わりにトークンを使用して検索することでした/


?は後方検索を行い、同じではないことに注意してください。
Martin Tournoij 2016年

-1

バックスラッシュスラッシュバックスラッシュスター

/(<- the prompt)\/\*

入力後は次のようになります

/\/\*

1
この回答は、サイトに6年近く存在している回答とどう違うのですか?
Martin Tournoij 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.