vi の使い方 (文字列変換)

文字列変換の方法

vi である文字(列)を、別の文字(列)に変換(書き換え)したい時のコマンドは以下のものがある。

c コマンド
文字列書き換え( コマンドモード )
r コマンド
1文字のみ書き換え( コマンドモード )
s コマンドを使う
ファイルの一部または全体を書き換える( ex モード )

c コマンドを使う方法

コマンドモードで、文字列を書き換える時にはcコマンドを使用して以下のように実行する。

(行数)cc
行数分書き換え
c(範囲)
範囲の部分を書き換え

このコマンドを使用すると、テキストモードになるので、書き換えたら最後は Esc キーでテキストモードを終了すること。
このコマンドは文字列消去(x, dd, など)と書き込み(a, i, など)の2つのコマンドを同時にできるので、その分効率的である。

c コマンドの例

5cc
カーソルのある行から5行分書き換える
cw
カーソルのある文字から一単語分(スペース、タブ、Enter、英数字以外の文字があるまで)書き換える
cfa
カーソルのある文字から文字 a があるところまで書き換える
cG
カーソルのある行からファイルの最後の行まで書き換える

r コマンド

このコマンドは、ある一文字だけを別の一文字に変換するために使用する。

使い方

変換したい文字の上にカーソルを移動して、 r を打ち込んだすぐ後に、変換する文字を打ち込む。
xコマンドの後、iコマンドで1文字打ち込んでからEscを打つのと同じだが、 このコマンドの方が効率的である。

s コマンドを使う方法

ex モードの s コマンドを使用する方法である。
ファイルの全体、または、ある行(のある文字)からある行(のある文字)までという、広い範囲の文字列を変換したい時に使用する。
ある(範囲)の(文字列1)を(文字列2)に変換するには

:(範囲)s/(文字列1)/(文字列2)/[g]

とういう形で使用する。
最後の g が無いと各行の最初に見つかった(文字列1)だけを変換する。 g がついていると見つかった全ての(文字列1)を変換する。
(範囲)の指定方法の詳しいことは以下の 文字列変換の範囲指定 ( s コマンド ) を参照のこと。

s コマンドの例

:%s/tmp/test/
ファイル全体の tmp を test に変換する。(ただし行中の最初に見つかった tmp だけ変換)
:%s/tmp/test/g
ファイル全体の tmp を test に変換する。(全部変換)

文字列変換の範囲指定 ( s コマンド )

sコマンドは範囲指定をしていないとカーソルのある行だけ変換の範囲になる。
範囲指定の形式は以下のようになっている。

(範囲の始まり),[(範囲の終り)]

(範囲の終り)は省略できる。 その場合は(範囲の始まり)で指定した行だけが範囲になる。( % を除く)
(範囲の始まり)、(範囲の終り)には以下のものが使用できる。

行数
変換したい行の行番号
マーク
'a , 'b , `a , `b など
特種記号
. (ピリオド)
カーソルのある行を示す。
$ (ドルマーク)
ファイルの最後の行を示す。
% (パーセント)
ファイル全体を表す。

範囲指定の主な方法は以下の通り。

参考


Prev | Next
Home | Contents
abe@injapan.net