コマンド行に emacs & と打って, Emacs を起動してください。Emacs 起動後にウィンドウに表示されているバッファの名前は,ウィンドウ下部のモー ド行に表示されているとおり,*scratch* です15。このバッファに何か書き込みを行うか,しばらく時間が経つと
*scratch* バッファは,保存する必要のない一時的なメモを書いたり,Lisp コー ド16 を評価するために使います。新し いファイルを作成したいなら,C-x C-f を押して新しいファイル用のバッ ファを用意し,そこにテキストを書き込んでください。しかしながら,これ以降しばらくは *scratch* バッファを使って作業します。 保存する必要のない練習用バッファとして使うからだと思ってください 17。
undo は誤って行ってしまった操作を取り消す操作です。
タイプした文字が 5 4 3 2 1 の順に削除(delete)され,全て無くなりま したね。
最後に行った <BS> の操作が取り消されて,1 が復活しました。
さらに過去に遡って削除の操作が取り消され, 2 も復活しました。C-x u と C-_ 18は, 共にテキストに加えた変更を取り消す(undo) ためのコマンドで,どちら を使ってもかまいません。
カーソル位置から行末までを消去するには C-k (kill の頭文字) を使 います。
3 行目が復活しましたね。
undo のときと違って 1 行目は空のままですが, 3 行目の内容がカーソル位置に追加されました。
任意の範囲のテキストを切ったり貼ったりするには,領域 (region) を使います。
2. と 3. で行った操作を,領域(リージョン)
の指定といいます。領域とは,「最後にマークを設定した文字」から,「現在カー
ソルがある位置の直前の文字」までの範囲のことです。先の操作では,
`` buffer
'' を領域指定しました。buffer の前の空白文字も領域に含ま
れていることに注意してください22。
「ポイント」という概念を使うと,領域の定義はもっとすっきりします。
ポイントは,カーソルがのっている文字と,その直前の文字との間に存在する 仮想的な点であって,実際に表示されるものではありません。四角いカー ソルの左下の角がポイントだと思ってもいいでしょう。カーソルを移動すれば, それにつれてポイントも移動します。
マークは C-<SPACE> を押したときのポイントに対して設定されます。 マークを設定したポイントと,現在のポイントとの間が領域です。
C-w23 は,指定した領域内の文字を消去するコマ ンドです。C-k と同様に,C-w で消去したものは kill-ring に保存されま すので,C-y を使って取り出せます。
上の操作では,`` buffer
'' を領域指定しましたので,これが C-w で
消去され,C-y で取り出されました。この操作を用いると,任意のテキストを
任意の場所に移動することができます。
M-w24 は,領域内のテキストを kill-ring に保 存するためのコマンドです。C-w とは違い,領域内のテキストは消去されませ ん。C-y と併用すれば,領域内のテキストを他の場所に複写することができま す。
編集中のバッファの内容を,ファイル名を指定して保存するには C-x C-w 26 を使います。既存のファイ ルをバッファに読み込んでからこのコマンドを使うと,元のファイルを異なるファ イル名で保存することができますので,UNIX の cp コマンドでファイルを複写 するのと同様のこともできます。
ファイル commands_file と同じ内容を持つファイル commands を作ります。
エコー領域(ミニバッファ)にメッセージ Write file: ~/
が現わ
れます。
ウィンドウ下部のエコー領域がユーザーからのキー入力を受け付ける状態になっ たとき,そこはミニバッファと呼ばれます。例えば, ファイルを読込むとき, C-x C-f を押してからファイル名を入力しますが,この入力はミニバッファ に対して行っているのです。
ミニバッファでは,同一行内のカーソル移動コマンド(C-a, C-b, C-f, C-e等) や文字の削除(<BS>),行の消去コマンド(C-k)を使って,入力して いる文字を編集することができます。加えて,次に説明する入力補完機能を利用 することができます。
C-x C-f によるファイルの読み込みを例にとって入力補完の説明をします。 入力補完はミニバッファへの入力において一般的に利用できる機能ですので, C-x C-w でのファイル保存等でも使えます。 以下の操作を行ってください。
Find file: ~/
となることを確認してください。
Find file: ~/emacs_motion
となるはずです。これが入力補完です。
ホームディレクトリ (~
) に存在するファイルのうち,ファイル
名が emacs で始まるものは emacs_motion しかありませんから,emacs を入
力した時点で,残りの文字列が何であるかは一意に決まります。<TAB>
を押すと,その残りの文字列が補完されるのです。
emacs_m などとタイプしてから <TAB> を押しても,結果は同じ です。
Find file: ~/commands
となります。
com で始まるファイルは,commands と commands_file の二つありますか
ら,com だけだとどちらを読み込むのか決められません。
<TAB> は,できる限りの範囲で文字列を補完します。
Find file: ~/commands_
にしてください。commands_ で始まるファイルは commands_file だけですか
ら,この時点で <TAB> を押せば,残りは完全に補完されるはずです。
実際にやってみましょう。
C-g はコマンドの中断です。覚えていましたか?
? は補完できる名前の候補を一覧表示します。どんなファイルがある のか忘れてしまった場合には,この一覧を見ながら,入力することがで きます27。
<TAB> | 補完 |
? | 補完候補の一覧表示 |
ファイル commands_file を入力補完機能を利用して Emacs に読み込んでください。 ファイルの内容は
ここでは,複数のファイルを一度に編集する方法を扱います。まず,ファイル commands_file の中にある cat の説明の行を,新しいファイル commands_filter の 中に複写してみます。以下の操作を行ってください。
そのためには,まず,ウィンドウに表示されている cat の行を領域指定 する必要があります。領域指定したい行の行頭でマークを設定してから, カーソルを次の行の行頭まで移動すればいいですね。
さらに,適当な Emacs のコマンドを使って,指定した領域を kill-ring に入れます。消去はしないでください。 操作を誤ったら,焦らずに undo しましょう。
2. で行ったのと同じ Emacs コマンドを 使います。ミニバッファに入力する名前は,もちろん, commands_filter です。
以上でファイル commands_filter が出来上がりました。 ところで, commands_file というバッファはウィンドウから消えてしまいましたが, このバッファは無くなったのでしょうか?
答えは「いいえ」です。バッファ commands_file は,今使っている Emacs から無く なった訳ではなくて,新しく用意したバッファの陰に隠れてしまっただけです。 次に,バッファ commands_file の内容を再度ウィンドウに表示してみます。
Switch to buffer: (default commands_file)
と表示されるはずです。ここで (default commands_file ) とあるのは,
「特に指定がなければcommands_file とします」ということなので,
そのまま <ENTER> を押します。もしも default の後に commands_file 以外の
文字列が現われたら,それを commands_file に修正してから <ENTER>
を押します30。
「デフォルト (default)」という言葉は Emacs 以外の場面でもよく使 いますので,この機会に覚えておきましょう。
commands_file のバッファがウィンドウに現れましたから,このバッファを引き続い て編集することも可能です。
以上の操作では,二つのバッファを同時に使って編集作業を行いましたが,三つ 以上のバッファを同時に使うこともできます。
Emacs を使っている間は,バッファ削除の操作をしなければ, *scratch* バッファは常に存在しています。 ミニバッファに入力するバッファ名は *scratch* です。 <TAB> による入力補完も利用できます。
別のウィンドウにカーソルが移動しましたが,カーソルの位置が上と下 では違いますね32。
一つのバッファを複数のウィンドウで編集しているときには,あるウィ ンドウで行ったバッファの内容変更 (文字入力) は,他のウィンドウに も反映されます。一方,カーソル位置や表示位置はウィンドウ毎に独立 ですので,一つのバッファの異なる場所を,別々のウィンドウに表示し て,それぞれで編集することができます。長い文書を扱うときに便利で す。
ここでは,実際に作業を行うことは略しますが,カーソルを上下のウィンドウに 移動することによって,各ウィンドウ内のバッファを編集することが可能です。
これまで使ってきたファイルへの保存の操作 (C-x C-s) では,保存される バッファは,カーソルが存在するウィンドウ内のもののみです。複数のウィンド ウに表示されている異なるバッファをファイルに保存するには,それぞれのウィ ンドウで C-x C-s を押す必要があります。
一回のコマンド操作で複数のバッファをファイルに保存したければ C-x s を使 います。このコマンドを実行すると,元のファイルから内容変更のあったバッファ 各々について,保存するか否かを尋ねられますので,保存する場合には y で答 えます。
では,C-x s を試してみましょう。今の場合,変更を施したバッファはないは ずですから,保存の対象となるバッファはありません。エコー領域に,その旨表 示されます。
今 Emacs が持っているバッファの一覧を表示するコマンドは C-x C-b33 です。
ウィンドウを分割した状態で実行した場合には,カーソルの存在しない ウィンドウに *Buffer List* という名前のバッファ一覧が表示されます。 一つのウィンドウのみで作業していた場合には,ウィンドウが分割され て,一覧が現われます。
次は不要になったバッファを削除してみましょう。そのためのコマンドは C-x k35 です。これを使って commands バッファを削除し てみます。
Kill buffer: (default *scratch*)
と表示されます。
カーソルの存在するウィンドウに commands を表示した状態でコマンド
を実行すると,デフォルトのバッファ名が commands になりますが,
今は *scratch* になっているはずなので,commands とタイプして
から <ENTER> を押します。<TAB> による入力補完も可能です。
なお,第 4.3 節で確認したように,バッファを削除しても,ファ イルが削除されるわけではありません。ファイルを編集する必要が生じたら, C-x C-f で再度バッファに読込めばよいのです。
オプション -nw をつけずに新しいウィンドウで Emacs を開いたときには,こ んなこともできます。 ここではメニューを使った操作を紹介します。 試してください。
まずは検索から。
次に置換です。
Emacs で日本語入力を実現する仕組みは幾つかあります。日本語入力の操作の細 部は,使っている日本語入力の仕組みによって異なりますので,ここでは,英数 字入力と日本語入力を切り替えるキー操作を紹介するにとどめます。
日本語入力の切り替え: C-\漢字変換や候補の確定は <SPACE> や <ENTER> で普通にできますので,試してみて ください。