:s/検索文字列/置換/gc
文字列を検索して、検索に該当する文字列を別の文字列へ置換する。
:s/検索する文字列/置換する文字列
が基本。vim の検索履歴を使えば検索条件を省く使い方もできる。
検索条件を省く場合、置換する前にまず検索して、置換する文字列候補をハイライト表示しておく。その検索条件は vim が検索履歴に残しているため、次に置換条件を省略した形で置換処理を実行すると、履歴から最後の検索条件を使って置換してくれる。
/痴漢したい文字列
でまず検索して:s//置換
検索条件を省いた置換が可能
この例ではデリミタ(区切り文字)として「 / 」を使っているが、他の文字でも良い。
例えば URL(http://prester.org/static/vim) から「 / 」を別の文字に置換したい場合には デリミタを「 @ 」にするなど、デリミタの指定には自由度がある。
:s@/@+@g
オプションとしてg
を付けて書けば、キャレットの位置する行にあった該当する文字は全て確認無しで置換される。
置換結果> “http:++prester.org+static+vim”
行単位で検索して置換
g
オプションは行単位の処理
実際に置換する前に処理を確認をしたい場合には
:s@/@+@gc
オプションに c
を加えて gc
とする。
全文を対象にして検索・置換
全文を検索して置換の対象としたい場合は
:%s
とする。
例えば全文を検索して一致した文字列を削除したい場合は以下のようにデリミタを使う
:%s/文字列//g
行範囲を指定した処理
行を指定すれば範囲を決めた置換処理が可能
:1,20s/a/@/g
上記例だと1行目〜20行目までを範囲とした検索・置換処理となる。
正規表現とエスケープ処理
vim の正規表現に癖があるから、これをなるべく避けるために
\v
( Very Magic )
を利用する
いくつかのメタ文字はエスケープのために \
( バックスラッシュ )
を使う
タグで利用されているアングルブラケット <>
( 山括弧 )
を対象にパターン検索して置換したい場合の例をいくつか書いておく
- タグだけを HTML 用に置換したい
<test>
これを <test>
にしたい場合
:s/</\</g
:s/>/\>/g
二回に分ける処理が無難
- アングルブラケットを削除したい
<a href = “./image/test.jpg”>TEST</a><BR>
上記の例から山括弧だけを削除する場合
:s/\v([<>])/ /g
こうすると
a href = “./image/test.jpg” TEST /a BR
こうなる
- タグや記号だけを残して文字を削除したい
<a href = “./image/test.jpg”>TEST</a><BR>
上記の例から記号だけを残す場合
:s/\v<([0-9a-zA-Z]+[ \t\n\f\r]*)>//gc
こうすると
< =“.//.”></><>
こうなる
- タグや記号だけを削除して文字を残したい
<a href = “./image/test.jpg”>TEST</a><BR>
上記の例から文字だけを残す場合
:s/\v([<>"./=])/ /gc
こうすれば
a href image test bmp TEST a BR
こうなる
- 同時に複数を検索して複数を置換
<a href = “./doggy/image.BMP”>Wow!</a><BR>
上記の例から
doggy
を images
にして
image
を doggy
にして
BMP
を jpg
にしたい場合
:s/\v(.*)doggy(.*)image(.*)BMP/\1images\2doggy\3jpg/gc
こうすれば
<a href = “./images/doggy.jpg”>Wow!</a><BR>
こうなる
パターンマッチングは :help pattern.txt
でヘルプを読んだ方が良い。