第 4 回 (2002.05.10) -- エディタ

エディタとは

タイピングの基本

エディタは後述するようにファイルを編集するためのものである. 詳しくは後で述べるが,このエディタを用いて作業するということは 具体的にはキーボードをバリバリ使って作業を行なうことを意味する. そこで,ここでキーボードを用いたタイピングの基本について触れておく.
キーボードを使ったタイピングの基本はキーボードの種類によって違うのだが, 通常は QWERTY配置の 101 キーボードとよばれるキーボードの親戚なので, そのための基本で十分である.
この場合のタイピングの基本とは,

という項目を守ること,である. これにより,タイピング速度が早くなるだけでなく,指や手にかかる負担がかなり均等化され, 腱鞘炎等の障害(Typing injury)が発生する可能性を小さくできる.

警告: Typing Injury について

コンピュータを通常から長時間に渡って使用する人間は, 頭痛, 眼の痛み,腱鞘炎等の障害(Typing injury, より詳しくは反復性疲労障害(Repetitive Strain Injury)) などの障害にかなりの確率であうことが知られている.
特に Typing injury について触れると,上のキー配置図と指の関係を見てもわかるように, 通常の形式のキーボードは指や手への負担に関してあまり合理的な造りをしていない. そのため,通常のキーボードを長時間使用することは「危険」であることを自覚する必要がある.
これに対し,障害を起す可能性を小さくするために様々な 医学的処置や, より合理的な形状をした入力装置 が多数存在する. 革新的な技術革命でもない限り, これからしばらくはわれわれはキーボード等を通じた入力方法を主としてコンピュータに接するわけであるから, 医学的処置の知識を入手するとともに,こうしたより優れた入力装置の購入を早めに検討しておくのが良い.
# 教育用計算機システムなどでは,予算の関係上こうした入力機器に変えることができないだけであるので, その辺り誤解なきよう.

テキストファイルについて

unix 上では,ファイルはなるべくテキストファイルとして保存することが望ましいとされる.
テキストファイルとは,人間に読める文字だけでデータが記述されたファイルのことをいう. そうでないファイルを一般にバイナリファイルと呼ぶ.
# 映像,音声ファイルのように,圧縮しないと非常に大きくなるファイルなどは, 少しでもファイルを小さくできるバイナリファイルの方が適しているが, そうしたもの以外はテキストファイルが望ましい.

テキストファイルとバイナリファイルの違いは less などのファイル閲覧コマンドでファイルを見てみれば一目瞭然である.
ただし,バイナリファイル中の文字列がシェルの設定等を書き換えてしまうことも多いので,実はこれはお勧めしない(^-^). ファイルを閲覧する前に,fileなどを用いて,ファイルの正体を見るのが正しい.
また, どうしてもバイナリファイルの中身を見てみたいという場合は, cat -v vis を用いるのがよい(どちらもマニュアルで調べること).

■ テキスト/バイナリファイル を見てみた様子 ■
text file looking sample
テキストファイルの中身を見るとこんな感じ.
binary file looking sample
バイナリファイルの中身をlessなどで無理やり見ようとするとこんな感じ.

テキストファイルが良いとされる理由は次のようなものである.

これらは「閉じた商用ソフト」にとっては逆に不都合である,ともとらえられるため, windows などの OS の商用ソフトは逆にデータをテキストファイルとせず, バイナリファイルと呼ばれるファイルでデータをファイル化する傾向が強い.
つまり,互換性を低くすることによって,他の会社のソフトへの移行を阻害する, 人間に読めないようにして,どういう処理をしているかを隠す, ユーザがそのソフト無しではファイル修正等が出来ないようにして, そのソフトへの依存性を高める… といった具合いである(麻薬への依存のようなものだ).
この副作用は,windows や Mac OS では長い目で見るとユーザの熟練度が上がりにくい,という傾向となって現れる.
つまり,バイナリファイルで互換性の低い形式を扱うソフトというのは, ユーザの便益を蝕んで儲けていると非難されても仕方がなく, 逆にユーザはこうしたソフトを忌避するよう自衛する必要がある.


さて,以上より推測できると思うが,unix cui 環境でファイルを編集するという場合はたいていはテキストファイルを扱うことを意味する(例外はもちろんある).

エディタについて

エディタ(Editor)とは,ファイルを編集する為のソフトウェアである. 詳しくは編集するファイルによって
テキストエディタ( = テキストファイルを編集する) バイナリエディタ( = バイナリファイルを編集する)
と呼び分けられるが,通常はエディタと言えばテキストエディタを指すことが多く, この区別はあまり気にされない. 今回の授業で扱うのももちろんテキストエディタである.
テキストエディタを用いた作業は概念図的には以下のようになる.

■ エディタを用いた作業の概念図 ■
how to use editor -- basically エディタの最も典型的な使い方は,以下の通りになる.
  1. 編集するファイルのバックアップをとる(重要!).
  2. (エディタ起動)
  3. 編集したいファイルをエディタに読み込む.
  4. エディタで編集する.
  5. 編集が済んだデータをファイルとして書込む(saveする).
  6. (エディタ終了)
という流れになる.

エディタは unix cui 環境では最も頻繁に用いるソフトウェアの一つである. なぜなら,人間が computer にデータを入力する際に最もよく用いる方法の一つが入力したいデータをファイルという形式で入力することだからである.
よって,unix cui 環境を使いこなすには, エディタを自由自在に使いこなせないといけない. 幸い,unix cui 環境で用いるエディタの種類はそう多くはないので, あるエディタに慣れる前に他のエディタに目移りするということはそうそうない. 以下に,代表的なエディタを示すので,これらに良く触れて習熟するのがよい.

■ unix cui 環境でよく用いられるエディタ ■
名称 特徴
vi unix と名のつく OS ならばほぼ間違いなくデフォルトで入っているエディタ.
エディタとしての機能に絞った設計になっており, 非常に素朴な環境でも動作し,動作も速い.
全ての動作が「コマンド」として体系化されており, キーボードだけで作業が効率よくできるようになっているが, これは逆にコマンドを記憶する必要があることを意味する.
# かなり使い込まないと習熟できないため, このエディタを推奨するのは少々ためらわれる (もちろん,熱狂的なファンも多いが).
unix 自身のインストールのかなり早い段階から使えるエディタであること, OS 自身の動作が危うくなっているときでも動作する可能性が高いことなどから, unix 管理者は好きと嫌いとに関わらず vi を使えるようにならないといけない(最低限のレベルで構わないが).
emacs elisp という言語で書かれたマクロファイルを使用して ほぼあらゆるカスタマイズが可能な非常に優秀かつ柔軟なエディタ. 適切に設定すれば, emacs の中から OS の操作を全て行なうことも可能で, エディタというよりも unix 環境そのものであるとも言われる.
unix で最も良く使われているエディタはおそらくこの emacs である.
このエディタもやはり習熟には時間を要するが,vi よりは難易度が低い. どちらかというと emacs をエディタとして推奨する.
vi 同様にほぼ全ての unix 環境で使えるが, vi がシステムのデフォルトで用意されているエディタであるのに対し, emacs はほぼデフォルトで用意されているアプリケーションソフト, という立場である.
# であるから,emacs が使えない状態の unix 環境というのもいくらでも存在する.

上記特徴より推測できると思うが,unix cui 環境で用いるエディタとしては以下のように推奨することになる. 自らの unix に対する取り組み方を考えて選択するのがよい.
#もちろん異なる組み合わせも可能である. 最終的には好みの問題である.

エディタ操作の習熟について

cui 環境ではマウスやメニューといったグラフィカルな要素は使えないと考えるべきである. つまり,見た目で直感的に操作はできない. そのため,どちらのエディタも操作にはかなりの習熟が必要である.
言い換えると,最初から使いこなせなくても当たり前なので, すぐ投げたりしないでじっくり使い込んでいくのがよい.

バックアップについて

忘れてはならない大前提として「人間はミスをする」というものがある. コンピュータの操作および設定はこの前提の下に行なわれないと, あとで酷い目に会うだけである.
ファイルのバックアップは, ファイル操作およびその編集作業でのミスに対する保険の一つである. これは手持ちのデータ全てをバックアップするレベルや rcs,sccs といったバージョンコントロールソフトの使用と兼ねるものなどがあるが, それらについては後の授業で解説する.
ここでは, 最も単純で OS 等に依存しない素朴な方法をとりあえず記述しておく.
例えば,dummy.txt というファイルを編集しよう, という前に行なうバックアップを例に挙げてみると…


    > ls dummy.*    ← 似たような名前のファイルが無いか事前チェック.
    dummy.txt

    > cp dummy.txt dummy.txt.bak-20020505    ← 一目でバックアップだと分かるように. 出来れば日付等も明記しておくと良いか.
    
等としてバックアップを取っておく. この方法だとバックアップファイルがだんだん増えていく, 分かりにくいので管理がしにくい, 等のデメリットが大きいが, バックアップしないよりは 100倍マシである. よりきちんとしたバックアップの方法についてはこれからの授業で学習する.

日本語入力,変換について

unix は本来英語圏で開発されたため,日本語の入力は「後から追加」 された機能を用いることになる. つまり,そうした後付けの機能に対応しているソフトでないと日本語入力はうまくできない.
阪大教育用計算機システムでは,xemacs と vi(実はvim) は日本語入力に対応しているようなので安心して使える.
阪大教育用計算機システムで日本語入力を行なうには,C-\ ([Ctrlキー]を押しながら[\キー]を押す) という動作を行なう. もう一度同じ動作で日本語入力モードが解除される.

(xemacs で日本語を使う場合の注意)
阪大教育用計算機システムの xemacs は日本語だけではなく中国語や韓国語入力モードにも対応しているので, C-\ とすると「どのモードを使いますか?」という意味で Input method: と聞いてくる.

こういう時は [spaceキー] を押すと候補一覧が出るので,それをヒントにしながら japanese-egg-wnn と入力すればよい. 入力途中で [spaceキー] による「補完」が効くので,具体的には, j [spaceキー] e [spaceキー] w [spaceキー] と入力するだけで良いことになる.

毎回こうして聞かれるのは面倒なので,これを初期設定してしまうのが良い. 具体的には,~/.xemacs の 61 行目あたりに
;(select-input-method "japanese-egg-wnn")
という行があるので,この行頭の ; を消去することで コメントアウトされているこの行を有効にすれば良い. これで,次回からは大丈夫なはず… だが他の要素もカラムのでなんとも(^-^).

エディタ emacs

emacs と一口にいっても, 多国語化を押し進めてきたバリエーションとしての mule, グラフィカルな要素を強化してきた xEmacs などの細かいバリエーションがある. こうした要素は emacs のバージョンが上がるにつれて統合されていくが, まずはなるべく基本的かつ共通である cui 機能だけで扱えるようになろう.
また,これ以降は emacs と書いた場合はこれら多くのバリエーションをまとめて呼んでいるものとする.

起動方法
kterm 中で emacs & もしくは emacs -nw とコマンドを入力する.
# 教育用計算機システムで日本語をきちんと使いたい場合は, emacs ではなくて xemacs を使うのが良いだろう.

emacs & … emacs をバックグラウンドジョブとして起動(詳しくはプロセス管理の説明をする授業で学習する)
emacs -nw …emacs を kterm の中に完全な cui モードで起動.
終了方法
emacs で C-x C-c と入力(C- は "[Ctrlキー] を押しながら" を意味する).
編集操作
まずは入門ガイド(Tutorial)に従って操作して学習するのがよい. 入門ガイドは emacs にはほぼ必ず用意されている.
emacs を起動し, C-h t もしくは [F1キー] t と入力すれば入門ガイドモードに入る.
emacs を起動した後,何もしないで画面を良くみると,
C-h t で XEmacs の使用方法の実習を開始できます
もしくは
Get a tutorial f1 t
もしくは
Type C-h t for a tutorial on using Emacs
などという表記がある. このように最低限の操作方法は最初に表記されるので, まずはじっくりこの画面を読むのも良いだろう.


emacs の操作で困ったら
emacs で変な操作をしてしまって,どうしたらよいか分からなくなることがある. こうしたときは,慌てずに C-g を何回か入力しよう. このキーは「動作中のコマンドを中止」するもので,変な操作中の状態から通常状態に戻してくれる.

ただし,「してしまった操作」を元に戻すものではない. 操作を取り消したい,という場合は undo コマンドを用いる. 具体的にどうしたらよいかは入門ガイドで学習しよう.

表示されたキーを入力しても動作しないが?
入門ガイド等で表示されたキー操作をしてもその通りに動作しない, ということがある. これは,貴方の個人環境では「キー操作が書き換えられている」ために起こる現象である. その為に,標準的なキー操作を想定して書かれているものと違ってくるのである.

阪大教育用計算機システムでは,~/.xemacs などにその 「キー操作書き換え設定」 が書かれているだろう(一度見てみよ.他にも便利なことが書いてある).
例えば,多くの生徒の場合, 本来ヘルプを呼び出すキー操作である C-h が一文字消去という動作をするように書き換えられている. このため,入門ガイドで C-h と書いてある部分はそのまま入力してもうまくいかない,ということになる.
こういう場合は, [F1キー] がたいていはヘルプになるようになっているので, C-h の代わりに [F1キー] を押せばよい.

emacs を早く使いこなせるようになりたい
いくつかコツがあるので書いておこう.

カーソルキーを使うな!
emacs には効率的にカーソルを移動させる方法が豊富に存在する. カーソルキーを使うとこうした効率的な方法を使わなくなってしまうため, 結果として emacs をいつまでたっても使いこなせないうえ,作業が鈍いということになる.
カーソルキーは「初心者用の麻薬」であって, 「一見気楽」ではあっても「後で泣く」ことになるのを知るべきである.
また,カーソルキーを使うためには手をホームポジションから大きくずらすことになり, 手に負担がかかる上,キー操作は遅くなる.
「カーソルキーは本来キーボードに存在しないもの」でもあることを自覚し, emacs では絶対に使わないのが cui ユーザの正しい姿である(^-^).
マウスを使うな!
これもほぼ理由は同じである. emacs を使う上でマウスを使う理由はほとんどない.
単純作業を繰り返すな!
たいがいのことは自動化できる,そうした機能がある, というのが emacs である. 同じ作業を延々手で繰り返すようなことを無反省にしているようでは emacs はいつまでたっても使いこなせない.
作業が多くなりそうだったら,作業に取り掛かる前に emacs にそういうことを自動的に行なうような機能がないかまず調べるべきである.

emacs の操作方法はある程度「覚えないといけない」. そのため,最初は適当なマニュアルを手元に用意しておくか, 自分でメモをしてそれを見ながら使うようにするとよい.
emacs はもしかするとこれから何十年も使うことになるツールであるので, ゆっくりと確実に使えるようになるのが良い.

エディタ vi

vi にも emacs 同様多くのバリエーションがあるが, これもやはり最も基本的なものから学習するのがよい.
阪大教育用計算機システムでは,vi の実体は実は vim という「改良された」vi である. そのため,意識せずに vim の改良された機能(モード表示機能など)が使えてしまう(^-^).

起動方法
kterm 中で vi とコマンドを入力する.
終了方法
vi で([Escキー] を何度か入力後) ZZ (Z は大文字) もしくは :x もしくは :wq もしくは :q! と入力.

ZZ … 終了. ただし,編集中で save していないファイルがあると終了できない. :q と入力するのと同じ.
:x … 終了. 未save ファイルは save する.
:wq … ファイルを save して終了.
:q! … ファイルを save せずに強制終了.

(注) 終了方法が多くてわかりにくいが, そういう時は :wq :q! とだけを意識して使うようにするのが安全でよいだろう.

編集操作
vi を理解するには,vi の「モード」かコマンド体系をきちんと理解する必要がある(どちらかを理解すればよい).
ここでは, 通常良く使われる「モード」による説明を行なっておこう.
コマンド体系による綺麗な説明に関しては, 参照図書 "The Unix Super Text(上)" の 21.2 (pp.350-) を読むのが良い.

■ vi のモードの概念図 ■
vi mode vi のモードは大雑把に次のように分類される.
コマンドモード
vi の基本モード. カーソル移動,文字削除等を行なう.
挿入モード
文字を入力するモード.
exコマンドモード(コロンモード)
「: キー」を押すとこのモードになる. ファイル操作等の OS 操作や(正規表現による)置換など. vi の終了操作は OS とのやりとりということでここに分類される.

(注) [Escキー] を何回か押せば必ずコマンドモードになるので, どのモードにいるか分からないときはとにかく [Escキー] を何回か押せばよい.


以下に vi の編集操作で最低限必要なものを記そう. vi の操作は結構奥が深いので,興味あるものは参照文献などを参考にして勉強するのがよい.

■ vi の編集操作表 ■
分類 キー 機能 使えるモード
カーソル移動 h 左へカーソル移動 コマンドモード.
j 下へ.
k 上へ.
l 右へ.
0 (数字の0) 行頭へ.
$ 行末へ.
0 (数字の0) 先頭行へ. ex コマンドモード
$ 最終行へ.
挿入 i カーソルの「前」で挿入モードに移行. コマンドモード
a カーソルの「後ろ」〃
o カーソルのある行の「次の行として」〃
r ファイル名 ファイルの内容を挿入. ex コマンドモード
貼り付け
(paste)
p 削除もしくはコピーされた内容を挿入する. コマンドモード
削除
(cut)
x 一文字削除.
dd 一行削除.
D 行末まで削除.
d カーソル移動 現在地から移動先までを削除.
C-h 一文字削除 挿入モード
C-u 一行削除
コピー
(copy)
yy 一行コピー. \ccp\/cc で貼り付けないと意味がない. コマンドモード
y カーソル移動 現在地から移動先までをコピー. \ccp\/cc で貼り付けないと意味がない.
検索,置換 /文字列 カーソルの「後ろ」に向かって検索.
?文字列 カーソルの「前」に向かって検索.
n 前と同じ検索,置換.
c カーソル移動 置換.
カーソルを移動してから挿入モードに移行し, 元の位置から移動位置までを挿入モードで入力した文字列に置換.
%s/元文字列/新文字列/g 置換 exコマンドモード
繰返し . 直前の編集コマンドを繰り返す コマンドモード
復元 u 直前の編集コマンドを取り消して元に戻す
ファイルへ書込み
(save)
w ファイル名 ファイルに書込む. ex コマンドモード
終了 wq ファイルに書込んでから終了.
q ! ファイルに書込まずに終了.
x save してない場合はファイルに書込んでから終了.
ZZ save してある場合のみ 終了. コマンドモード


■ vi に習熟するためのゲーム(^-^) ■
rogue sample (^o^) unix には実は vi と同じキー配置のカーソル移動等をもつゲームが多く存在する. こうしたゲームで遊ぶことで vi のキー配置を体に染み込ませる, のは 20年以上の長い歴史をもつ由緒ある「正しい学習方法」(^-^)であるので, 暇がある人にはおすすめである.

具体的には, Rogue, Hack, Nethack, Larn, Moria, Omega, Angband, ADOM などがあるので,興味あるものはネットワーク検索などで調べてみるとよい. windows や Mac に移植されたものも多いので, 自宅の PC で遊んでみるのもよいだろう. 中にはグラフィカルなものや,マルチプレイヤー対応のものなどもある.

左は阪大教育用計算機システムの kterm 上で rogue を動作させたときの様子である. (ただし,rogue はインストールされていないため,各自で用意する等の必要がある)

課題

  1. Typing injury を防止するための方法を自分なりに調べ,報告せよ. もし既に用いている方策があるならそれも示せ.
  2. ネットワークで適当なタイピング練習ソフトを探し出し, その紹介文を書くとともに,自分の点数(レベル)等を記せ.
  3. emacs か vi を用いて, 自己紹介文を書け.