viを使う 13 (substitute)

使い方を覚えていきます。

文字列を置換します。

最小構成

:s/BEFORE/AFTER/ | 今いる行に対して、先頭から最初の文字列BEFOREを文字列AFTERに置き換える。

ssubstituteと書いてもいいしsuと書いてもいいです。

global flag

:s/BEFORE/AFTER/g | 今いる行に対して、先頭から最後までBEFOREをAFTERに置き換える。

gはflagの1つ。gを指定しないと最初の置換が実行されたらその行の置換は終了します。最後の/の後にflagを記述できます。

confirm flag + global flag

:s/BEFORE/AFTER/cg | 今いる行に対して、先頭から最後まで置き換えるかどうかを編集している人が判断しながらBEFOREをAFTERに置き換える。

cもflagの1つ。1つ1つ置換するかを確認できるようになります。

2:s

:.,.+1s/BEFORE/AFTER/g | 今いる行と次の行に対して、先頭から最後までBEFOREをAFTERに置き換える。

つまり、sの前にrangeの設定を入れられます。

6:s

:.,.+5s/BEFORE/AFTER/g | 今いる行と次の5行に対して、先頭から最後までBEFOREをAFTERに置き換える。

6:とすると:.,.+5となります。

自分はこれを使いこなしている人を見たことはないです。後述するShift-vが普通と思います。便利ですけど。

:%s

:%s/BEFORE/AFTER/cg | 全ての行に対して、先頭から最後まで置き換えるかどうかを編集している人が判断しながらBEFOREをAFTERに置き換える。

多くの場合に有効なのはこれ。

一通りC++で作ってみてposition_をpos_にしても大丈夫と判断できる場合などに:%s/position_/pos_/cgなどとする場合があるはず。
ほぼ完成してきてposをpにしても大丈夫と判断できる場合などに:%s/pos_/p_/cgなどとする場合があるはず。

一斉置換やると大体おかしくなる。碌なことにならない。

:1,$

:1,$s/BEFORE/AFTER/cg | ここでは$がlast lineを意味するので%と同じ。

Shift-v

Shift-vで複数行を選択してから置換する場合も多いです。
:'<,'>s///のようになります。

delimiter

sの直後の文字がdelimiterと決まりです。’/’を含んだ置換をする場合は大体’%’を使う気がします。

置換する

広告

IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』
さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト




«       »