web-dev-qa-db-ja.com

VIMで検索して置換すると、末尾の文字が表示されます

これは私がやろうとしていることです:

%s/Article/<h2>Article</h2>/gi

残念ながら、vimエディターでこのコマンドを実行するたびに、次のように表示されます。

末尾の文字

上記を緩和するために、私は以下を実行しました:

%s/\s*\r*$//

そして、それは正常に実行されますが、元の検索および置換コマンドに戻ると、再度「末尾の文字」が読み取られ、検索および置換操作は実行されません。

ここで何が悪いのですか?

32
Parijat Kalia

「末尾の文字」はコマンドではなく、ドキュメントにあります。

Vimは、コマンドをArticle</で終了したと見なし、h2>/giを代替コマンドの3番目の引数と見なします。ただし、これらの文字はすべて3番目の引数に有効ではないため、エラーが発生します。

これを解決するには、代替文字の/文字をエスケープする必要があります。

%s/Article/<h2>Article<\/h2>/gi
38

また、正規表現(XML/HTML/UNIXファイルパス)でリテラルスラッシュを頻繁に使用する必要があり、すべてのインスタンスのエスケープについて心配したくない場合は、別の区切り文字を使用できます。たとえば、!の代わりに /:

%s!Article!<h2>Article</h2>!gi

私は怠惰で、これは通常、手動でスラッシュをエスケープするよりも簡単です。

27
Charlie Sanders