vim で置換処理

シェアする

vimでの置換処理のやり方をメモしておきます。

vim で置換処理

コマンド入力となるのでノーマルモードで:(コロン)に続けて入力します。

全行置換

%は、カレントファイル(現在編集中の1つのファイル)のみという意味です。

この時、下のように1行に1回だけ置換されます。

全文置換

1行に複数あっても、すべて置換するときは、gオプションを付けます。

下のように全部変換されます。

指定した範囲だけ置換する

まず、Shift + v あるいは、v でビジュアルモードに入って、カーソルを動かして範囲を指定します。

下図では、v を押してビジュアルモードに入っています。灰色に反転している部分が、選択した部分です。V だと、行単位での選択ができます。

ビジュアルモードのまま、「:」を入力すると、下図のように、選択範囲でのコマンドモードになります。 

このまま、

と入力すると、選択した範囲で置換することができます。

注意してほしい点は、行単位で制御されていることです。

gオプションを付けたら、選択範囲外でも同じ行は処理されます。逆にgを付けない場合は、各行で最初の該当語句だけ変換されます。

置換前の文字を利用

「\(」と「\)」でくくって、\1、\2 のように引用することで、文字を置換後の文字列として利用できます。

下のリストでは、test という文字列を利用して、test phrase と置換しようとする際に、test の部分を再利用してます。

(には、\(円マーク=バックスラッシュ)を付ける必要があるので注意してください。下のリストのように 「test」→「test phrase」と変換されています。

正規表現を使った置換

\(、\)と、\数字による文字列の利用は、正規表現と一緒に使わないとあまり便利じゃないです。だって、決まった文字列 だったらもうわかってるんですから。

正規表現を使って、例えば、下のように、「test1」とか、「tetete2」 という文字列を「The test No.1」とか「The tetete No.2」のように、The と No. を挿入したいとき、\数字による文字列の利用が役に立ちます。

結果は下の通り。

正規表現の説明

は、正規表現がふんだんに入った表現ですが、 \(t.\{-,}\)\([0-9]\) を説明しますと、

t で始まって、そのあと .が、 {-,} だけ続いて、そのあと[0-9]の文字が続いている文字列」

ということになります。

正規表現 説明
. 改行以外の任意の一文字

Tの後任意の一文字が続く文字列を検索

\{n,m}

直前の文字がn回以上
m回以下で続く最短の文字列

/at\{2,4}  で、aのあとtが2回以上4回以下で続く文字列のうち、最長を検索

\{-n,m}

直前の文字がn回以上
m回以下で続く最短の文字列

/at\{-2,4} で、aの後tが2回以上4回以下で続く文字列のうち、最短を検索

\{,}

直前の文字が0回以上
続く最長の文字列

/at\{,} で、aの後tが0回以上続く文字列のうち、最長を検索

\{-,} 直前の文字が0回以上
続く最短の文字列

/at\{-,} で、aの後tが0回以上続く文字列のうち、最短を検索

[0-9] 0~9 の文字1つに相当する。

     
     

まとめ

vimで置換するときは、:s コマンドを使います。

  • :%s でファイル全体置換
  • ヴィジュアルモードで選択した後:s で範囲内置換
  • gオプションで1行に複数あっても全部置換
  • \(、\)で囲って、\数字で置換前文字列を参照
  • 正規表現と合わせると置換前文字列の参照は超便利

vimの基本的な使い方は、記事「vimの使い方。最低限の操作ができるようになるまで」に書いてます。あわせてご覧ください。

この記事が気に入ったら
いいね ! しよう