10

s/search_for/replace_with/optionsフォーマットを使用して Vim で検索して置換したい場合もありますが、そのsearch_for部分は複雑な正規表現になり、最初はうまくいきません。

フォーマットを使用して検索しset incsearch hlsearch.vimrcいるときに、入力するとVimが強調表示を開始し/search_forます。これは、正規表現を最初に「テスト」/「プレビュー」するのに役立ちます。次に、必要な正規表現を取得したら、s/検索と置換を適用します。

しかし、このアプローチには 2 つの大きな制限があります。

  1. /モードtoモードで作った正規表現をコピペするのが面倒s/
  2. 正規表現で一致したグループ (つまり()) でプレビューしたり、 でマジック モード\vを使用したりできません/

では、SO の皆さんは、Vim で複雑な正規表現の検索と置換を行うにはどうすればよいでしょうか?

4

4 に答える 4

16

を使用して検索モードで正規表現をテストして/から、 を使用しますs//new_value/。の検索部分に何も渡さない場合s、最新の検索が取得されます。

@Sam Brinkも言うよう<C-r>/に、検索レジスタの内容を貼り付けるために使用できるので、うまくいきs/<C-r>//new_value/ます。検索式が複雑な場合はこちらの方が便利かもしれません。

于 2012-05-18T03:24:47.640 に答える
6

すでに述べたように、 で検索部分を練習できます/your-regex-here/。それが正しく機能している場合はs//replacement/、最新の検索を使用するために使用できます。

一度それを実行すると、それ以降別の検索を行っていたとしても&、最後のコマンドを繰り返すために使用できます。を使用して、現在の行でグローバルに置換を行うs///こともできます。:&gを使用して、ここ ( ) とファイルの最後( ):.,$&gの間のすべての一致を検索することができます。.$

もちろん、操作が期待どおりに機能しなかった場合は、元に戻すこともできます。

于 2012-05-18T03:39:30.263 に答える
5

他の人が指摘したように、私は通常、置換を行うために使用しますが、検索レジスタにあるものを貼り付けるためにs//replacement/使用することもできます. そのため、 が検索を貼り付ける場所<C-r>/を使用して、最後に必要な変更を行うことができます。s/<C-r>//replacement/<C-r>/

<C-r>カーソルがある場所にレジスタの内容を挿入します
/レジスタは最新の検索語を保持し
:registersます。すべてのレジスタの内容が表示されるので、利用可能なものを確認できます。

于 2012-05-18T14:22:44.097 に答える