Vimの置換コマンドの使い方

コードを書いていると, 文字列を書き換えたいと思うことがあると思います. そんなときにとても便利なのが, Vim置換コマンドです. このページでは, 全体置換, 1行置換, 範囲置換, 検索した単語の置換の方法について解説します.

置換コマンドまとめ

詳しい解説に入る前に, 簡単に置換コマンドをまとめたいと思います.

コマンド 動作
:%s/old/new/g ファイル上の全ての"old"を"new"に置換
:s/old/new/g カーソルの行の全ての"old"を"new"に置換
:10,20s/old/new/g 10~20行目の全ての"old"を"new"に置換
:'<,'>s/old/new/g ビジュアルモードで選択中の範囲の全ての"old"を"new"に置換. " '<,'> "の部分は, 範囲を選択中に":"を押すと自動的に出ます.

全体置換

では, 全体置換の流れを説明します. 全体置換を行うときは, カーソルはどこにいても良いです. そこで,

  1. :を押して, コマンドモードに入ります
  2. %s/old/new/g と打ちます
  3. エンターを押す

これだけです. これでテキスト内のoldnewになります.

下の例では, %s/red/orange/gとすることで, テキストのredorangeに変更しています.

全体置換

実際の流れは, こんな感じです. 2行から10行に増やすところは, 8@aと入力しています.

ちなみに, マクロを記録させているときは, 左下に記録中という表示がでます.

1行置換

1業置換の時には, 次のようにします.

  1. 置換したい行にカーソルを合わせます
  2. :を押して, コマンドモードに入ります
  3. s/old/new/g と打ちます
  4. エンターを押す

下の例では, 1行目から5行目にカーソルを移し, そこでs/red/orange/gとコマンドを打っています.

1行置換

範囲置換

最後に範囲置換の説明をします.

  1. 置換したい範囲をビジュアルモードで選択します.
  2. :を押して, コマンドモードに入ります
  3. この時, コマンドモードは:'<,'>と入力された状態で始まります
  4. s/old/new/g と打ちます
  5. エンターを押す

下の例では, 5行目から7行目を選択して, その範囲のredをorangeに置換しています.

範囲置換

ちなみに, 行はビジュアルモードで選択しなくても, 行番号で指定することもできます. 例えば, 上の例と同じことをするなら, コマンドモードに入って, 5,7s/red/orange/gと打てば良いです.

検索した単語を置換する

検索した単語をそのまま置換することもできます. このとき, 検索した単語を再入力することなく置換でき, 非常に便利です.

  1. 置換したい単語を検索します. 下の例では, *を使用してカーソル下の単語を検索しています.
  2. コマンドモードに入り, %s//new/gと打ちます.(この時, 置換したい単語, つまり検索した単語の部分は省略することができます.)
  3. エンターを押す

下の例では, redという単語を*コマンドで検索し, orangeという単語に変えます. コマンドは, %s//orange/gとしています.

範囲置換