最低限 UNIX / Linux [III]

  1. シェル
    [1.1] シェル (Shell) とは
    [1.2] シェルの役割
    [1.3] 代表的なシェルの紹介
    [1.4] シェルの確認と変更
    [1.5] bash の機能
    [1.6] 環境のカスタマイズ (Bash)
    [1.7] その他のシェル
  1. 最低限 vi
    [2.1] vi とは
    [2.2] ファイルオープン/クローズ
    [2.3] vi の基礎 - 状態遷移
    [2.4] vi の基礎 - コマンドモード
    [2.5] vi の基礎 - 挿入モード
    [2.6] 実践編
    A 参考 [vi の応用]
  1. シェルスクリプト
    [3.1] シェルスクリプト入門
    [3.2] シェルスクリプト応用
    A 参考 [特殊記号の復習]
  1. 本日の課題
    課題
    ヒント
    投稿の前に
<< 情報実験第4回トップへ

2. 最低限 vi

[2.1] vi とは

vi (VIsual extended editor) は多くのUNIX系OSの標準エディタです. つまり大抵の UNIX マシンではじめから vi は用意されています. システムアカウントの変更を vi を元としたツール, vipw や vigr 等でおこなうのは, 確実に使えるエディタが vi であるためです. 「もしも」のトラブル時に利用できる可能性がもっとも高いエディタは vi であり, 特に管理者となる人は必ず習得すべきツールといえます.

一方で vi の操作体系は, 直感的ではありません. そのため UNIX でファイルを編集するためのツールが, 他に数多く用意されています. vi の独特な操作方法を嫌う初心者ユーザーも少なくありません.

vi の特長は次の通りです.

vi の根本思想は「ひたすら速く」です. vi には親切なメニュー画面はありません. しかし, それは vi がユーザーインターフェイスを軽視しているという意味ではありません. 実際, vi ほどインターフェイスに神経を使っているエディターは他にないでしょう. 最少の労力で最大の成果をもたらすよう計算し尽くされています. そのことは vi を使い込むほど実感できるはずです.

ここでは, そんな vi の使用法を学習していきましょう.


[2.2] ファイルオープン/クローズ

vi はどんなテキストファイルを編集したいときにも使えます. 他のエディタ同様, 編集するファイルをバッファ(メモリ内の一時的な領域) にコピーし, そのバッファの内容を編集することになります. ファイルに変更を反映させるには バッファの編集内容をファイルにセーブしなくてはなりません.
※以下, 本ドキュメントでは特別な場合を除き このバッファへの編集作業を"ファイルの編集"と記述しています.

[2.2.1] ファイルオープン

vi を使うには, 次のように入力します.

$ vi [ファイル名]

引数のファイル名は既に存在するファイル名, あるいはこれから作りたい新規のファイル名を入力します. ファイル名を省略した場合, バッファのみが準備され, 保存時にそのファイル名を決定することになります.

[2.2.2] ファイルクローズ

ファイルの編集作業を終了し, コマンドプロンプトに戻るには幾つかの方法があります. コマンドモード(詳しくはを参照)であることを確認し(ESC キーを押せばよい), 以下の文字を入力します.
:q vi を終了する
:q! バッファでの編集内容を放棄し vi を強制的に終了する
:w バッファの内容をファイルに保存
:w! バッファの内容を強制的にファイルに保存
:wq バッファの内容をファイルに保存し, vi を終了する.
ZZ バッファの内容をファイルに保存し, vi を終了する.
w 等の後に空白文字をいれ文字列を書き込むと, その文字列がファイル名として保存される.
※ q:quit, w:write, !:強制的 という意味の組合せになっている

[2.3] 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 の状態が「コマンドモード」であることが保証されます.

状態遷移図

[2.4] vi の基礎 - コマンドモード

「コマンドモード」で実行する基本的なコマンドは次の通りです.

[2.4.1] エディタの終了/ファイルの書き出し(1.2.2 参照)

[2.4.2] カーソルの移動

h
1文字左にカーソル移動(十字キーの「←」でも良い)
j
1文字下にカーソル移動(十字キーの「↓」でも良い)
k
1文字上にカーソル移動(十字キーの「↑」でも良い)
l
1文字右にカーソル移動(十字キーの「→」でも良い)
※ "hjkl" は右手のマウントポジション(ブラインドタッチでの静位置)にあります.

[2.4.3] 文字入力(挿入モードへの移行)

a
現在いるカーソルの右側に挿入(追加:append)
A
現在いるカーソルの行末に挿入
i
現在いるカーソルの左側に挿入(挿入:insert)
I
現在いるカーソルの行頭に挿入
o
現在いるカーソルの下の行に挿入 (行を開ける:open)
O
現在いるカーソルの上の行に挿入

[2.4.4] 文字削除

x
カーソル位置の文字を1文字削除
dd
カーソルのある行を1行削除

[2.4.5] アンドゥ(取り消し)

u
直前の変更を取り消す

[2.4.6] 検索

/文字
指定された文字を, 次の行より下へ検索.
?文字
指定された文字を, 前の行より上へ検索.
n
検索コマンドで指定された文字を, 正方向へ検索 ("/"では下へ, "?"では上へ)
N
検索コマンドで指定された文字を, 逆方向へ検索 ("/"では上へ, "?"では下へ)

[2.4.7] 別ファイルの読込

:r ファイル名
カーソル行の下にファイルを読み込んで挿入

[2.5] vi の基礎 - 挿入モード

「挿入モード」で実行する基本的なコマンドは次の通りです.

ESC キー
コマンドモードへ移行
DEL キー
左1文字削除(「コマンドモード」では利用できません)

[2.6] 実践編

初歩的な vi の使い方はなんとなく理解できたでしょうか? 実際にはもっといろいろな使い方があるのですが 一度に覚える必要はありません. 実際にファイルの編集をしながら, "かゆい"ところがあったら その都度新しい命令, 機能を調べてゆけば良いです. 最低限, ファイルのオープンクローズ, 挿入モードとコマンドモード間の移り方("a,i,o"コマンドと ESC キー), 1文字削除("x"), コマンドモードでのカーソルの動かし方が わかっていれば, なんとかなります.

練習1

次の様な適当な文章を書き込んだファイルを vi をつかって実際に作り, rensyu.txt というファイル名で保存してみましょう.
With a screen editor you can scroll the page,
move the cursor, deloete lines,
and more, while seeing the result of your edits as you make them.

[確認方法]

以下のコマンドで書き込んだ内容が表示されましたか? 表示されれば OK です.

$ cat rensyu.txt

どうですか? うまく作成できましたか? では, 次は >>シェルスクリプト を vi を使って作成してみましょう.


<< 戻る (シェル)      次へ >> (シェルスクリプト)

A 参考 [vi の応用]

上で紹介したのは, vi を使用する上での基本的な事項だけです. 以下の内容は授業では説明しませんが, より便利に vi を使う参考として時間と興味のある方は御一読を.

※以下は断りのない限り「コマンドモード」で使用するコマンドです.

[A.1] コマンドラインにおける vi

※いきなりですが, これは「コマンドモード」とは関係ありません.

$ vi +18 [ファイル名] ファイルをオープンし, 行18に位置づける
$ vi +/"mustard greens" [ファイル名] ファイルをオープンし, 最初の"mustard greens"にカーソルを移動
$ vi -r [ファイル名] クラッシュしたファイルを回復し読み込む
$ view [ファイル名] 読むだけのためにファイルを読み込む

[A.2] カーソルの移動

w
右へ1単語分移動
W
右へ1単語分移動(区切り文字を越える)
b
左へ1単語分移動
B
左へ1単語分移動(区切り文字を越える)
Enter キー
下の行へ移動
Backspace キー
左へ1文字分移動
スペース キー
右へ1文字分移動
H
画面上端へ移動
M
画面中段へ移動
L
画面下端へ移動
Ctrl-F
1画面前へスクロール
Ctrl-D
半画面前へスクロール
Ctrl-B
1画面後ろへスクロール
Ctrl-U
半画面後ろへスクロール
G
ファイルの最終行へ移動
21G
行21へ移動

[A.3] 文字削除

D
行のカーソルから右の部分の削除
:5,10 d
5行から10行までを削除

[A.4] テキストの複写と移動

yy 行の取り込みまたはコピー
Y 行の取り込みまたはコピー
dd 行の削除
P 取り込みまたは削除された行を現在行の下に挿入
p 取り込みまたは削除された行を現在行の上に挿入
:1,2 co 3 行1から行2までを行3の下へコピー
:4,5 m 6 行4から行5までを行6の下へ移動

[A.5] 情報の表示

:set nu 行番号の表示
:set nonu 行番号の非表示
:set ruler ルーラーの表示
:set noruler ルーラーの非表示
:set showmode 入力モードの表示
:set noshowmode 入力モードの非表示
Ctrl-G ファイル名, 行数, 位置の表示

[A.6] 画面の更新

Ctrl-L 画面の再描画



<< 戻る (シェル)      次へ >> (シェルスクリプト)

最終更新日: 2004/10/22(山田 由貴子) Copyright © 2004 inex