1

重複の可能性:
vi/vim で特定の「単語」を保持したまま置換する

次のような行がいくつかあるとしましょう

            $adv_id;
            $am_name; 
            $campaign_ids;
            $repeat_on;
            $opt_days;
            $opt_time;
            $am_or_pm;

ビジュアルモードを使用してすべての行を選択するとしましょう..各行の最初と最後に文字を追加して、次のようにするにはどうすればよいですか

        $_REQUEST($adv_id);
        $_REQUEST($am_name; 
        $_REQUEST($campaign_ids);
        $_REQUEST($repeat_on;
        $_REQUEST($opt_days);
        $_REQUEST($opt_time);
        $_REQUEST($am_or_pm);
4

2 に答える 2

4

あなたの他の質問とかなり似ているので、そこの説明はこの代用を理解するのに役立つはずです. ビジュアル ブロックとして選択されたラインで、次の代替コマンドを使用します。

:'<,'>s/\$\(.*\);/$_REQUEST(\1);

以前と同様に、'<,'>視覚的な選択がある場合、コマンドラインで自動的に入力されます。

ここでの違いは、 を使用して正規表現の一部をキャプチャするキャプチャ グループ\(\)を作成し、最初のキャプチャ グループを参照する を使用して、置換で再度使用することです。\1

また、この正規表現は$置換を配置するために文字どおりに使用するため、エスケープする必要があります:\$正規表現では特別な意味があるため: end of line .

1 行に複数の置換が必要な場合は、gフラグを追加する必要があり、セミコロンを削除することもできます。

:'<,'>s/\$\(.*\);/$_REQUEST(\1)/g

逆の正規表現、たとえば$_REQUEST($adv_id);で置き換えること$adv_id;は非常に似ています:

:'<,'>s/\$_REQUEST(\(.*\))/\1

ここでは$_REQUEST(...);、キャプチャ グループ内の a 内の括弧の間のすべてをキャプチャし、そのキャプチャ グループは完全な置換です。

于 2012-10-11T18:03:50.240 に答える
1

ビジュアル モードで:は、コマンド ラインでこれをヒットして使用します。

:'<,'>s/^\(.*\);$/$_REQUEST(\1);/g

\(とは行の\)一致した式をキャプチャし、\1は置換でキャプチャされたグループを呼び出します。

を使用する:'<,'>と、次のコマンドで現在の選択をフィルタリングするように Vim に指示します (sこの場合はこれです)。

于 2012-10-11T18:04:24.457 に答える