すべての派手な文字をエスケープせずに、正規表現である文字列を検索することは可能ですか?
たとえば、ソース ファイルで次の文字列を検索したい: ^[\d\| *]$
, エスケープせず\
に$
, など.
正規表現をコピーして貼り付けて結果を取得したいと思います。
Vimの正規表現で文字が特別に扱われるのを避ける簡単な方法があります。\V
指定子を使用すると、パターンの残りの部分の解釈を「非常に魔法のない」モードに切り替えることができます。これは、バックスラッシュ以外のすべての文字が文字通り理解されることを意味します。
したがって、それに応じて最後の検索レジスタを設定できます。
:let @/ = '\V' . escape('^[\d\| *]$', '\')
とを使用n
しN
てすぐに検索します。
必要なのは、正規表現との一致を試みるのではなく、一致する文字列を検索する grep です。GNU grep を使用すると、-F または --fixed-strings フラグを指定してコマンドを呼び出すか、代わりに fgrep としてコマンドを呼び出すことができます。以下はすべて同等です。
grep -F '^[\d\| *]$'
grep --fixed-strings '^[\d\| *]$'
fgrep '^[\d\| *]$'
固定文字列検索は、正規表現を表すコードを照合する場合、または正規表現エンジンの高度な照合機能を必要としない高速な grep が必要な場合にまさに必要なものです。
コマンド ライン ツールfgrep
(「fast grep」)を使用できます。
検索する正規表現をデフォルト レジスタ ( ) にヤンクしたと仮定すると、次の@"
ように実行できます。
/\V<C-R><C-R>=escape(@", '/\')<CR><CR>
は\V
、バックスラッシュで始まるアトムのみが特別な非リテラルの意味を持つ「非常にノマジックな」検索を開始します。は、含まれているすべてのescape()
バックスラッシュを無効にする (および/
検索パターンを終了させるエスケープを無効にする) ため、これは純粋に文字どおりの検索になります。テキストはCtrl+R=を介して検索コマンド ラインに挿入されます。