vi 2
インデント
C言語やMELスクリプトを記述する時に、プログラムを見やすくするためにインデント(字下げ)をしておくと良い。
例えば、関数やプロシージャの中ではひとつインデントをつけ、if, for, whileなどの中ではもう一段インデントをつけるようにする。
その時にviの以下の機能を利用するとインデントをつけやすくなる。
- >>
- インデントを1段分つける。
(カーソルのある行が右にTabひとつ分ずれる)
(行数)>> で行数分インデントできる。
- <<
- インデントを1段分とる。
(カーソルのある行が左にTabひとつ分ずれる)
(行数)<< で行数分インデントできる。
- :set autoindent
- この設定をしておくと1行前と同じインデントが自動的につくようになる。
BackSpace または Ctrl+d でインデントをひとつ減らすことができる。
- :set tabstop=(number)
- タブをスペース何個分(number)にするかを決める。
(デフォールトは 8)
:set tabstop=4 でタブ 1 つがスペース 4 個分になる。
autoindentの設定
ここで上のautoindentが vi を使用するたびに自動的に設定されるようにしておこう。
- ホームディレクトリの下の .exrc というファイルを vi で開く。
% vi ~/.exrc
- .exrc の中に以下のように記述しておく。
set autoindent
- :wq で vi を終了する。
- これより後にvi を使うと自動的にautoindentが設定されるようになる。
マーク
vi ではマークを付けることによって、カーソルを移動したりコピーの際に利用することができる。
マークは一つのファイルに複数同時に付けておくことができるので、離れた場所を移動する時に便利である。
それだけではなく他のコマンドと組み合わせることにより、より便利なことができるようになる。
- m(文字)
- マークをする。
mの次に英文字(a-z)のどれか1文字を入力する。
- ' ← クォート
- マークした行の先頭の文字にカーソルを移動。
たとえば、'aでaのマークの付いた行へ移動。
- ` ← バッククォート
- マークした行のマークをした文字にカーソルを移動。
たとえば、`aでaのマークの付いた文字へ移動。
文字変換( r コマンド)
このコマンドは、ある一文字だけを別の一文字に変換するために使用する。
変換したい文字の上にカーソルを移動して、 r を打ち込んだすぐ後に、変換する文字を打ち込む。
x コマンドの後、 i コマンドで1文字打ち込んでからEscを打つのと同じだが、
このコマンドの方が効率的である。
文字列変換( s コマンド)
ファイルの全体、または、ある行(のある文字)からある行(のある文字)までという、広い範囲の文字列を変換したい時に使用する。
ある(範囲)の(文字列1)を(文字列2)に変換するには
:(範囲)s/(文字列1)/(文字列2)/[g]
とういう形で使用する。
最後の g が無いと各行の最初に見つかった(文字列1)だけを変換する。
g がついていると見つかった全ての(文字列1)を変換する。
(範囲)の指定方法の詳しいことは以下の
文字列変換の範囲指定 ( s コマンド )
を参照のこと。
s コマンドの例
以下の (Enter) は Enter キーを表す。
- :%s/tmp/test/(Enter)
- ファイル全体の tmp を test に変換する。(ただし行中の最初に見つかった tmp だけ変換)
- :%s/tmp/test/g(Enter)
- ファイル全体の tmp を test に変換する。(全部変換)
sコマンドは範囲指定をしていないとカーソルのある行だけ変換の範囲になる。
範囲指定の形式は以下のようになっている。
(範囲の始まり),[(範囲の終り)]
(範囲の終り)は省略できる。
その場合は(範囲の始まり)で指定した行だけが範囲になる。( % を除く)
(範囲の始まり)、(範囲の終り)には以下のものが使用できる。
- 行数
- 変換したい行の行番号
- マーク
- 'a , 'b , `a , `b など
- 特種記号
-
- . (ピリオド)
- カーソルのある行を示す。
- $ (ドルマーク)
- ファイルの最後の行を示す。
- % (パーセント)
- ファイル全体を表す。
範囲指定の主な方法は以下の通り。
- 行を一行指定する。
変換する行を何行目かで指定する。
例えば 15 とすれば15行目だけが変換の範囲になる。
(例) :15s/test/tmp/(Enter)
- ある行からある行までを指定する。
例えば 20,30 とすれば20行目から30行目までが範囲になる。
また $ はファイルの最後の行という意味に使用できる。
( 30,$ で30行目から最後の行までを範囲にする)
(例) :20,30s/test/tmp/(Enter)
- あるマークから、あるマークのところまでを指定する。
マーク a からマーク b までを範囲に指定するには 'a,'b とする。
(例) :'a,'bs/test/tmp/(Enter)
- カーソルのある行から、あるマークのところまでを指定する。
マーク a までを範囲に指定するには .,'a とする。
(例) :.,'as/test/tmp/(Enter)
- ファイル全体を範囲にする。
% を使う。
(例) :%s/test/tmp/(Enter)
便利なコマンド
- J
- 行の連結
カーソルのある行とその下の行が連結されて1行になる。
(行数)Jと打ち込むと行数分だけJコマンドを繰り返したのと同じ結果になる。
- . ← ピリオド
- コマンドの繰り返し実行
直前に実行したコマンドをもう1度実行する。
連続してこのコマンドを使えば何度でも同じコマンドを実行できる。
ただし、繰り返し実行できるコマンドは文字列を挿入・消去・書き換えるコマンドである。
(カーソルを移動するコマンドは無視される)
- u
- コマンドの実行を取り消す。 (アンドゥ)
uを押した回数だけアンドゥが繰り返される。
アンドゥを取り消したい時はCtrl+rを押す。
おまけ
vi は電卓としても使うことができる。
- ファイルに計算式を書き込む。
356 + 27 * 12
- 計算式の行にカーソルを置いて以下のように打ち込む。
:.!bc(Enter)
- 計算式が答えに書き換わる。
680
練習課題
参考
Prev | Next
Home | Contents
abe@injapan.net