vi (VIsual extended editor) は多くのUNIX系OSの標準エディタです. つまり大抵の UNIX マシンではじめから vi は用意されています. システムアカウントの変更を vi を元としたツール, vipw や vigr 等でおこなうのは, 確実に使えるエディタが vi であるためです. 「もしも」のトラブル時に利用できる可能性がもっとも高いエディタは vi であり, 特に管理者となる人は必ず習得すべきツールといえます.
一方で vi の操作体系は, 直感的ではありません. そのため UNIX でファイルを編集するためのツールが, 他に数多く用意されています. vi の独特な操作方法を嫌う初心者ユーザーも少なくありません.
vi の特長は次の通りです.
vi の根本思想は「ひたすら速く」です. vi には親切なメニュー画面はありません. しかし, それは vi がユーザーインターフェイスを軽視しているという意味ではありません. 実際, vi ほどインターフェイスに神経を使っているエディターは他にないでしょう. 最少の労力で最大の成果をもたらすよう計算し尽くされています. そのことは vi を使い込むほど実感できるはずです.
ここでは, そんな vi の使用法を学習していきましょう.
vi はどんなテキストファイルを編集したいときにも使えます.
他のエディタ同様, 編集するファイルをバッファ(メモリ内の一時的な領域)
にコピーし, そのバッファの内容を編集することになります.
ファイルに変更を反映させるには
バッファの編集内容をファイルにセーブしなくてはなりません.
※以下, 本ドキュメントでは特別な場合を除き
このバッファへの編集作業を"ファイルの編集"と記述しています.
vi を使うには, 次のように入力します.
$ vi [ファイル名]
引数のファイル名は既に存在するファイル名, あるいはこれから作りたい新規のファイル名を入力します. ファイル名を省略した場合, バッファのみが準備され, 保存時にそのファイル名を決定することになります.
:wqファイルの編集作業を保存したり, 終了してコマンドプロンプトに戻るには幾つかの方法があります.
:q
| vi を終了する |
:q!
| バッファでの編集内容を放棄し vi を強制的に終了する |
:w |
バッファの内容をファイルに保存 |
:w! |
バッファの内容を強制的にファイルに保存 |
:wq |
バッファの内容をファイルに保存し, vi を終了する. |
ZZ |
バッファの内容をファイルに保存し, vi を終了する. |
vi の起動, 終了を覚えたので, 最低限のファイル編集の方法を見ていくことにします.
vi では, キーボードのキーは2つの役割をはたします. 例えば「a」というキーは, 「a」という文字をテキスト画面に表示するために 押されますが, 別の場合には, もっと違った意味を持つ命令(コマンド)と解釈されます.
キーがどちらの働きをするかは, vi の「モード」(状態)が決定します. これらの vi の「モード」は, 「挿入モード」と「コマンドモード」と呼ばれます. vi を使う時に最も大切なことは, この2つのモードをきちんと区別することです.
vi を起動させた直後は「コマンドモード」になっています. 「コマンドモード」では vi の終了, 編集中のファイルの更新, 文字の削除, 検索と置換, 行番号の表示設定や, 他のプログラムの実行などを行うことができます.
文字を入力する場合は「挿入モード」へ切り替えなければなりません.
「挿入モード」へ切り替えるには, a, A, i, I, o, O
のいずれかを押します(それぞれ切り替わった後の動作が異なります).
「挿入モード」では, 純粋に文字を入力します. それ以外の動作を行うためには
ESC キー(エスケープ・キー)を押して,
「コマンドモード」へ切り替えなければなりません.
(※1.2 で覚えたviの終了やファイルの保存は「コマンドモード」での操作でしたね.)
vi で初心者ユーザーが陥る混乱の原因は, この状態遷移を把握しきれてないことが殆どです. 「わけわかんなくなったら ESC キー!」 と覚えておきましょう. vi の状態が「コマンドモード」であることが保証されます.
それでは実際に vi を使ってみましょう. 以下の [練習1], [練習2] を やってみてください. ここで必要となるコマンドモード, 挿入モードのコマンドは次節からの [2.5] vi の基礎 - コマンドモード, [2.6] vi の基礎 - 挿入モード を参照してください.
適当な文章を書き込んだファイルを vi をつかって実際に作り, rensyu.txt というファイル名で保存してみましょう.
$ vi rensyu.txt i : : |
<-- rensyu.txt という名前の新規ファイルを viで開く <-- 挿入モードへ移る(現在いるカーソルの左側に挿入) <-- 編集 |
以下のコマンドで書き込んだ内容が表示されましたか? 表示されれば OK です.
$ cat rensyu.txt
先ほど編集したファイルを vi で開いて, 文字の削除, 行の挿入・削除などを行い, 別名(rensyu2.txt)で保存してみましょう. 一文字削除や一行削除は コマンドモードからできます。(以下はその例)
$ vi rensyu.txt : : |
<-- [練習1] で作成した rensyu.txt を viで開く <-- 適宜, 操作・編集してみましょう |
以下のコマンドで変更した内容が表示されましたか? 表示されれば OK です.
$ cat rensyu2.txt
どうですか? うまく作成できましたか?
初歩的な vi の使い方はなんとなく理解できたでしょうか? 実際にはもっといろいろな使い方があるのですが 一度に覚える必要はありません. 実際にファイルの編集をしながら, "かゆい"ところがあったら その都度新しい命令, 機能を調べてゆけば良いです. 最低限, ファイルのオープンクローズ, 挿入モードとコマンドモード間の移り方("a,i,o"コマンドと ESC キー), 1文字削除("x"), コマンドモードでのカーソルの動かし方が わかっていれば, なんとかなります. もう少し高度な使い方をしたい人は A 参考 [vi の応用] を参照してみてください.
では, 次は >>シェルスクリプト を vi を使って作成してみましょう.「コマンドモード」で実行する基本的なコマンドは次の通りです.
h
j
k
l
a
A
i
I
o
O
x
dd
u
/文字
?文字
n
N
:r ファイル名
「挿入モード」で実行する基本的なコマンドは次の通りです.
ESC キー
DEL キー
上で紹介したのは, vi を使用する上での基本的な事項だけです. 以下の内容は授業では説明しませんが, より便利に vi を使う参考として時間と興味のある方は御一読を.
※以下は断りのない限り「コマンドモード」で使用するコマンドです.
$ vi +18
[ファイル名] |
ファイルをオープンし, 行18に位置づける |
$ vi +/"mustard greens"
[ファイル名] |
ファイルをオープンし, 最初の"mustard greens"にカーソルを移動 |
$ vi -r
[ファイル名] |
クラッシュしたファイルを回復し読み込む |
$ view [ファイル名]
|
読むだけのためにファイルを読み込む |
w
W
b
B
Enter キー
Backspace キー
スペース キー
H
M
L
Ctrl-F
Ctrl-D
Ctrl-B
Ctrl-U
G
21G
D
:5,10 d
yy |
行の取り込みまたはコピー |
Y |
行の取り込みまたはコピー |
dd |
行の削除 |
P |
取り込みまたは削除された行を現在行の上に挿入 |
p |
取り込みまたは削除された行を現在行の下に挿入 |
:1,2 co 3 |
行1から行2までを行3の下へコピー |
:4,5 m 6 |
行4から行5までを行6の下へ移動 |
:set nu |
行番号の表示 |
:set nonu |
行番号の非表示 |
:set ruler |
ルーラーの表示 |
:set noruler |
ルーラーの非表示 |
:set showmode |
入力モードの表示 |
:set noshowmode |
入力モードの非表示 |
Ctrl-G |
ファイル名, 行数, 位置の表示 |
Ctrl-L |
画面の再描画 |
最終更新日: 2006/11/04(森川 靖大) | Copyright © 2006 inex |