web-dev-qa-db-ja.com

vimで正規表現以外の検索/置換を実行する

Vimで検索/置換を行う場合、正規表現を使用する必要はほとんどないので、常にすべてをエスケープするのは苦痛です。正規表現を使用しないようにデフォルトにする方法はありますか、またはこれを達成するための代替コマンドはありますか?

例として、<&lt;に置き換えたい場合は、s/</&lt;/gの代わりにs/\</\&lt\;/gと入力したいだけです。

56
Mike Crittenden

:sコマンドには、マジックを無効にするか強制するショートカットがあります。マジックをオフにするには、次のように%snoを使用します。

:%sno/search_string/replace_string/g

ここにあります: http://vim.wikia.com/wiki/Simplifying_regular_expressions_using_magic_and_no-magic

79
bjunix

この問題は主に、置換文字列内の&の役割に関する混乱が原因で発生します。置換文字列はnot reg-exですが、&などの特殊文字がいくつかあります。 &の役割については、置換文字列:h sub-replace-specialを参照してください。

OPの主な問題は、余分なバックスラッシュを入力することではなく、バックスラッシュが必要な場合と不要な場合を覚えていることだと思います。 1つの回避策は、不明な場合に「置換式」の使用を開始することです。 (:h sub-replace-expressionを参照してください。)これには、置換文字列に「\ =」を入れる必要がありますが、文字列リテラルを一重引用符で囲むと置換文字列が得られるため、置換する文字列をより自然に制御できる場合があります。あなたが欲しい。たとえば、この置換はOPが望むことを行います:

:s/</\='&lt;'/g
15
Herbert Sitz

このオプションを使用してください:

set nomagic

見る :help /magic

12
Michael Spector

文字通り検索したい場合は、\V正規表現アトム。これは、バックスラッシュをエスケープする必要があることを除いて、ほとんどあなたが望むことを行います。文字どおりに検索する独自の検索コマンドを定義できます。このようなもの:

 :com! -nargs=1 Search :let @/='\V'.escape(<q-args>, '\/')| normal! n

次に、:Search/foobar/bazを使用します

Substituteの場合、:Searchコマンドの後に単純に使用できます

:%s//replace/g

それ以来、Vimは暗黙的に最後の検索項目を取得し、置換にを使用します。

(あなたにいくつかのアイデアを与えたいだけです)

3