Emacs ガイド

Yutaka Yasuda
Kyoto Sangyo University

1. はじめに

ここでは Emacs の簡単な使い方についてチュートリアル形式で説明します。

ここでの説明は用語や表現について厳密ではないことに注意してください。網羅的なものでもなく、部分を取り上げて曖昧に説明しています。Emacs にはメッセージや表示、動作について、多くの用語が決められています。ここでは専門用語を使い、その細かな定義や概念の説明をすることを避けていると理解してください。
教材として利用される方は「Emacs の起動と終了」から「編集結果の保存」までを一通りなぞれば、最初の Emacs に慣れるコース教材となるでしょう。独習として読まれる方は「チュートリアル機能」以降も一通り目を通すことを薦めます。

Emacs には多くのオンラインドキュメント、書籍があります。慣れて行くにしたがって自分でマニュアル、書籍、ネットワークなどから情報を常に取り込んで理解を深めていくことが大切です。

1.1 Emacs について

プログラムも、Web ページも、その中身はテキストです。言い換えると多くの Unix 上での作業の非常に多くがテキストファイルをエディットすることに相当します。つまりテキストエディタは Unix システムで最も多用する道具としてのソフトウェアだ、と言えるでしょう。
Emacs は非常に多くの Unix ユーザに好まれているテキストエディタです。

Emacs はまた非常に歴史のあるソフトウェアで、そのルーツは 1974 年に TECO エディタをベースに当時 MIT にいた Richard Stallman が開発に取りかかるところまでさかのぼれます。

Emacs 最大の特徴は、その動作の多くが Lisp によって書かれており、これがユーザに自由に改変できる形で提供されている点でしょう。
そのため多くの機能追加(例えばエディット中に英文の綴りミスを調べるスペル・チェッカーなど)が従来から行われています。
同じ理由で利用者ごとのカスタマイズ(例えばよく使う機能を特定のキーに割り当てるなど)もよく行われています。

2. Emacs の起動と終了

2.1 起動

Emacs を起動するには、次のコマンドをプロンプトで入力します(%がプロンプト)。

% emacs & 

ここでの"&"はコマンド入力したシェルに対してバックグラウンドプロセス (Background Process) として動作させることを意味します。

この結果、画面上に、Emacs のウィンドウが新しく一つ開きます。

2.2 終了

Control - X 、Control - C で Emacs は終了し、ウィンドウが消えます。具体的なキー操作は、Control キーを押しながら X キーを押し、続いて Control キーを押しながら C キーを押す、となります。Emacs ウィンドウの左下隅に注目しながら Control - X を押してください。下図のような表示( C-x- )が現れます。

この状態で Control - C です。Emacs ウィンドウが消えるでしょう。もしうまく終了できなかった場合は 良くある質問・トラブル をチェックしてください。

Emacs ではこのようにして Control キーを多用しますが、これ以降このキー操作を C-x C-c と表記することにします。もし C-x の途中で操作を中断したいと思ったら、C-g です。

3. ファイル名の指定

ファイルにテキストを入力する Emacs の基本的な操作を、例に沿って具体的に説明します。これ以降は Emacs を起動し、そのウィンドウに対してキー操作していくものとします。

ファイル名を指定するには C-x C-f にファイル名、です。まず C-x C-f とタイプしてください。

ここでファイル名として memo.txt とタイプし、Enter キーを押してください。

いずれにしてもウィンドウ左下の、それまで「*scratch*」だった部分が、これから作成・保存しようとしているファイルの名前「memo.txt」に置き換わっている点に注目してください。

4. 編集(入力・修正)

この状態でキー入力すると、タイプした文字がそのまま画面上に現れ、入力されていきます。訂正は Back Space キー、カーソル移動はカーソルキー(矢印キー)です。
主要なカーソル移動操作などについて以下にあげておきます。

改行Enter キー
カーソル直前の文字を削除Back Space キー
カーソル直後の文字を削除C-d (delete)
カーソルより右を一気に削除C-k
カーソルを一つ左に移動矢印キー(←)または C-b (back)
カーソルを一つ右に移動矢印キー(→)または C-f (forward)
カーソルを一つ上に移動矢印キー(↑)または C-p (previous)
カーソルを一つ下に移動矢印キー(↓)または C-n (next)
カーソルを行頭に移動C-a
カーソルを行末に移動C-e
一ページ下へ移動C-v
一ページ上へ移動Esc-v (Escape キーを押したあとで v キーを押す)
文書の先頭へ移動Esc-< (Escape キーを押したあとで < をタイプ)
文書の末尾へ移動Esc-> (Escape キーを押したあとで > をタイプ)
カーソル行を画面中央にするC-l

4.1 アンドゥ

入力や操作について何かミスをしてしまった、という場合にはアンドゥ ( Undo ) 機能を試すと良いでしょう。
Undo 機能の呼び出しは C-x u です。一度 Undo するたびに、少しずつ直前の操作をさかのぼって修正内容を復元してくれます。

5. かな漢字変換

5.1 モードの変更

Emacs には、かな漢字変換モードと英文字入力モードがあります。
現在どちらのモードであるかは Emacs ウィンドウ左下に表示されます。
[--] と表示されておれば英文字入力、 [あ] と表示されておればかな漢字変換モードです。
二つのモードの切り替えは C-\ (Control とバックスラッシュ、または円記号)で行います。

5.2 単純な変換

かな漢字変換モードでタイプした文字は、ローマ字とみなされてかなに変換されて表示されます。試みに「watasino」とタイプしてみました。

両側を縦の棒で囲んだようにしてかなが表示されています。このため Emacs でのかな漢字変換途中を「フェンスモード」と呼ぶ時もあります。
ここでスペースキーを一度押すと、それまで入力されたかなが漢字に変換されます。同時にモード表示が [漢] に変わっている事に注目してください。

この状態で Enter キーを押せば確定します。
また、今回は希望どおり「私の」と変換されましたが、もう一度スペースキーを押すことで、次の候補が一番下の行に列挙されるかたちで現れます。

スペースキーまたは矢印キー、それに対応する C-f, C-b, C-p, C-p キーで操作して候補を選ぶことができます。Enter キーで候補を決定、もう一度 Enter キーを押せば確定します。

縦の棒(フェンス)が消えて確定したことを表現しています。モード表示も再び [あ] となり、続けてローマ字かな入力ができる状態になっています。

5.3 再変換、文節の選択と伸縮

続いて文節区切りの調整を伴う再変換、つまり比較的長めのかな漢字変換の例を示します。
「変換がうまく行かない時は」と変換したかったのですが、「変換がうまく行かないときは」となってしまいました。

「変換が」と「うまく行かない時は」の2文節と自動判定されている(文節間の隙間が目印)ため、まず C-f で再変換対象を後ろに移動させます。(上の図ではよく分かりませんが、操作画面上ではカーソルが今どこの文節が処理対象か示してくれます。)

一つ前の文節に移動矢印キー(←)または C-b (back)
一つ先の文節に移動矢印キー(→)または C-f (forward)
先頭の文節に移動C-a
最後の文節に移動C-e

続いて C-i で「うまく行かないときは」の文節を「うまく行かない」に縮めると、残りの「ときは」が新たに一つの文節として変換され、「時は」と希望通りになりました。

その文節が希望通りの変換をされない場合はスペースキーを押して再変換します。こうして文節の選択と、文節長さの変更、再変換を繰り返して、目的の変換結果にたどり着けば良いわけです。
なお、文節の長さを伸ばす場合は C-o です。

文節の長さを詰めるC-i
文節の長さを伸ばすC-o

うまく変換できれば Enter キーで確定です。

6. 編集結果の保存

編集できたら、次にそれをファイルに保存しましょう。

6.1 上書き保存

いま編集しているファイルに保存(いわゆる上書き保存)するには、C-x s です。

ウィンドウの最下行に「Wrote /NF/home... 」として、どこに保存したのか表示しています。

6.2 別名で保存

いま編集しているファイルとは異なるファイルに保存するには、C-x C-w です。

画面最下行に「Write file :~/」として、保存するファイルの名前を尋ねてきます。そのままファイル名をタイプします。例では memo2.txt としてみました。

ファイル名が入力できたら Enter を押してください。もしその名前のファイルが既にあった場合、「File `~/memo2.txt' exists; overwrite? (y or n)」と上書きするかどうか確認を求めてきます。問題なければ y とタイプします。

ウィンドウの最下行に「Wrote /NF/home... 」として、どこの保存したのか表示しています。

6.3 保存結果の確認

正しくファイルに保存できたことの確認にはターミナル(例では kterm)ウィンドウで、 ls コマンド(ファイルの一覧を見る)や cat コマンド(ファイルの中身を表示する)を使って行ってください。

6.4 保存をしない

編集した結果を保存したくない場合は C-k (kill) です。これによって Emacs では現時点の編集結果を廃棄し、ファイルとの結びつきを忘れます。C-k するとウィンドウの最下行に以下のように表示して確認してきます。

Enter キーを押すと、もう一度「修正された内容があるが kill して良いか?」と尋ねてきます。

yes とタイプして Enter キーを押せば、現在の作業内容はファイルに反映されず捨てられます。

編集していたファイルとの結びつきは解かれ、memo.txt と書かれていた部分は *scratch* (どのファイルとも結びつけられていない)状態に変わっていることを確認してください。

7. チュートリアル機能

Emacs にはよくできたチュートリアル(学習ツール)があります。ファンクションキーの F1 キーを押してから t キーを押すことでこの機能が動きます。
まず F1 キーを押せば以下のような画面になります。(そうならない場合は C-h かもしれませんので試して下さい。)

この状態で t キーを押せば以下のような画面になるでしょう。

ひととおりこのチュートリアルをこなすことで、多くの Emacs の機能や使い方を学べます。一度おためし下さい。

8. これ以降の読み方

これ以降は Emacs を使ったファイルの編集が最低限できる利用者を対象に、より進んだ Emacs の機能や理解すべき概念について書かれています。つまりもう一歩 Emacs についての理解を深め、より Emacs を使いこなすためのチュートリアルです。
以下にこの文書を読む時に押さえるべき点について説明します。

8.1 キー操作表記

Emacs でよく使われるキー操作として、Control キーや ESC (Escape) キーと併用するものがあります。Emacs の世界では伝統的にこれらの操作を以下のように表記しており、この文書でもこれに倣うことにします。

表記例意味
C-xControl キーを押しながら x キーを押す。
C-x C-cControl キーを押しながら x キーを押し、Control キーを押しながら c キーを押す。
C-x tControl キーを押しながら x キーを押し、(Control を押さずに)t キーを押す。
M-xESC (Escape) キーを押してから x キーを押す。
M-x save-bufferESC (Escape) キーを押してから x キーを押し、次に save-buffer とタイプして Enter キーを押す。

ESC キーのことを M で表記していますが、これは Emacs の世界では Meta キーと呼ばれているためです。逆にあなたが使う Emacs 環境では Emacs で言う Meta キーが ESC キーに割り当てられていると考えて下さい。

8.2 モードライン

画面下端にある色の違う一行は編集中の状態などを示しており、これをモードラインと呼びます。

8.3 コラム

本文中に、余り重要ではないけれども雑学的に知っておくと良いことなどをコラムとして書く場合があります。
以下のようなスタイルで書かれた文章がそれにあたります。

Emacs 内部で働いている Lisp 、つまり Emacs Lisp の機能をもっと積極的に使った一人前のアプリケーションソフトが幾つも存在します。 例えば MHE はメイルの読み書きをするアプリケーションですが、これが Emacs というテキストエディタに読み込まれて動作するのですから面白い。つまり本来テキストエディタであったはずの Emacs ですが、こうした場面ではテキストを読み書きする機能とプログラムを実行する機能の主従関係が逆転しているわけです。 それ故、Emacs はもはやエディタとして捉えるべきでない、と表現されることがしばしばあります。

時間と心に余裕のあるときに少しずつ読むと良いでしょう。

9. ファイルとバッファ

まず Emacs の基礎知識として、ファイル とバッファの関係について見ていきましょう。

9.1 ディスクとメモリの関係

あらためてここに記しますが、
「Emacs はファイルを編集するものではなくバッファを編集するもの」
です。つまりメモリ上のデータを編集するのであって、ファイルの中身を直接変更するものではありません。
これは Emacs に限らず一般的なテキストエディタに共通の性質です。今日の標準的なコンピュータシステムでは、編集したい文書データは恐らく初めはディスクにあるでしょう。ところがエディタはこれを直接修正せず、いったんメモリの中に内容の複製をとってから、その複製を修正するように振る舞います。その後、メモリ中の複製をディスクに書き戻すことで修正を完了させるわけです。
この振る舞いについて以下にアニメーションで図示します。

9.2 ファイルとバッファの関係

Emacs でもこのファイルとメモリの関係を踏襲して作業が行われます。このメモリの部分にあたるものを Emacs の世界ではバッファ (buffer) と呼んでいます。Emacs でファイルを編集する場合、まずバッファにファイルの内容を読み込み、それを編集し、バッファの内容を書き戻すわけです。

ファイルからバッファに読み込む

まずファイルからバッファに読み込みます。この状態からユーザは内容を修正しはじめます。この例では「12345678」と書き足すことにします。ファイルには memo.txt というファイル名がついており、それを読み込んだバッファには memo.txt と同じバッファ名が着けられている点に注意しておいてください。

バッファからファイルに書き出す

書き足された内容を含んだバッファの内容をファイルに書き出します。これによってファイルに修正結果が反映されました。もちろんファイルに書き出さずにバッファを破棄すれば修正内容は全く反映されないままになります。これが通常のファイル編集の作業となります。

バッファとは直訳すると緩衝装置にあたります。つまり衝撃など何かの動きを和らげる、緩やかにするものです。そのために一時的に何か流動させているものを蓄える場所のことをバッファと呼ぶことが(コンピュータ分野に限らず)あります。「大雨の時には何段にも設けられた貯水湖がバッファの役割を果たす」といった具合いです。 なんとなく Emacs のバッファの意味(位置づけ)が見えてきませんか?

10. バッファを意識したチュートリアル

では実際にファイルとバッファを意識しながら一連の処理をやってみましょう。

10.1 ファイルを読み込む

Emacs にファイルを読み込むには C-x C-f に続けてファイル名を指定して Enter です。

例では memo.txt という名前のファイルを読み込んでいます。

読み込みの前後では、モードラインに表示されているバッファ名が「 *scrach* 」から「 memo.txt 」に変わっていることを確認して下さい。memo.txt ファイルを読み込んだために memo.txt という名前をバッファが一つ作成され、いまそれが表示されていることを示しているのです。
このとき Emacs のウィンドウで Control キーを押しながらマウスの左ボタンをクリックしてください。下図のようなバッファ・メニューが表示されます。

メニュー上に memo.txt バッファの名前が確認でき、それがどのファイルに結びつけられているかが確認できます。それ以外に「 *Messages* 」「 *scratch* 」バッファが見えていますが、これについては後で説明します。また、マウスの右ボタンをクリックすると、下図のようなグローバル・メニューが表示されます。

このグローバル・メニューの「バッファ」を選択すれば、同様にバッファ・メニューが表示されます。

11. 複数のバッファを扱う

Emacs では複数のバッファを同時並行で扱うことができます。つまり複数のファイルの編集を並行に行えるわけです。以下に二つ目のファイルを読み込んだ状態を図示します。

それぞれのファイルに相当する二つのバッファが作成され、それぞれにファイル名と同じバッファ名がつけられた点に注意してください。Emacs ではこのようにしてバッファを名前で管理しています。普通の状態であれば、Emacs は存在する複数のバッファのいずれか一つを表示します。それ以外のバッファは表示はされませんが、消えたわけではありません。ただ保持された状態を維持すると考えて下さい。下図のように複数のバッファの上下関係を切り替え、最も上にあるバッファを表示するものと考えても良いでしょう。

12. 複数のバッファを意識したチュートリアル

では実際に複数のバッファを意識した一連の処理をやってみましょう。

12.1 二つ目のファイルを読み込む

再び C-x C-f に続けてファイル名(先ほどのファイルとは異なるもの)を指定して Enter です。

例では sample.txt という名前のファイルを読み込んでいます。

読み込み前にはモードラインのバッファ名が「 memo.txt 」だったものが「 sample.txt 」に変わっています。sample.txt ファイルのための sample.txt バッファが作成され、いまはこれが表示されていることを示しているのです。

再び Control キーを押しながらマウスの左ボタンをクリックしてバッファ・メニューを表示させましょう。

メニュー上に memo.txt バッファ、sample.txt バッファの両方が確認でき、それぞれどのファイルに結びつけられているかが確認できます。

12.2 バッファの切り替え

では表示するバッファを切り替えてみましょう。バッファメニューを表示させた状態で、現在のバッファとは異なるバッファを選択して下さい。

例では sample.txt バッファを表示している状態で、memo.txt バッファを選択しています。これによって再び memo.txt バッファの内容が表示され、モードラインのバッファ名表示も memo.txt になったことが確認できるでしょう。
再びバッファメニューを使ってバッファを切り替え、何度でもこの作業が繰り返せる事を確認して下さい。

キー操作によるバッファの切り替え

Emacs では全ての作業をキー操作のみで行うことができます。バッファの切り替え作業をキー操作で試してみます。バッファ切り替え操作は C-x b に続けてバッファ名を指定し、Enter です。
下図の例では memo.txt バッファに切り替えようとしています。

バッファが切り替わったことが確認できるでしょう。

Emacs では全ての操作がキー操作のみで完遂できるようになっています。 これはもともと Emacs がX window のような GUI 環境がない当時から存在している歴史的経緯からくるものと思いますが、しかしこの性質を好むユーザが多いことも確かです。Emacs でのカーソル移動がカーソルキー(矢印キー)だけでなく C-f, C-b などによっても可能であることを知っていますか?初心者には矢印キーの方が直感的であることは間違いありません。しかしもしあなたが完全にタッチタイプできるのであれば、キーボードのホームポジションから手を動かさずに済む Control キーとフルキーだけで操作が完遂できる方が効率的だと思うでしょう。 Emacs を好む利用者のなかには、このフルキーのみによる操作を極めて重視する層がいます。そしてファンクションキーも、テンキーも、カーソルキーもない、ただフルキーだけからなるキーボードもまた市販されています。その名も HHK (Happy Hacking Keyboard) 。 やあ、奥が深いと感じますか?それとも呆れますか?

12.3 バッファの破棄

さまざまな理由からバッファを破棄することがあります。修正内容をファイルに書き出した後でもバッファはそのまま残っていますから、そうした場合はバッファを破棄しておいた方が安全です。
(そうしないと何かの拍子にキーを押して意図せず内容を修正してしまい、最後に Emacs を終了する時に「はて、このバッファは修正してから正しく保存したのだろうか?それとも保存し忘れたのだろうか?」と混乱することがよくあります。)
もちろん修正したが保存したくない(ファイルに残したくない)という場合もあるでしょう。バッファの破棄は C-x k (kill の k と覚えると良いでしょう)に続いてバッファ名を指定して Enter です。

「 (default memo.txt) 」という表示の意味は、何もバッファ名を指定せずただ Enter キーを押した場合は memo.txt を破棄する、というものです。
C-x b による処理では現在表示されているバッファをデフォルトとして破棄しようとします。もしこのバッファの内容が修正されていた(未保存だった)場合、Enter キーを押せば以下のような警告が出るでしょう。

破棄して問題なければ yes とタイプして Enter です。破棄したくない場合(作業を中断したい場合)は no で Enter します。

上図のように再びバッファ・メニューを表示させると、破棄したバッファがリストにあがってこないことが確認できます。

コンピュータ用語でのデフォルト(default)は、省略した場合はこの処理をする、といったものの事を指し、初期値、既定値、と直訳されます。ただ一般の英語としては不参加、(怠慢としての)義務不履行、といった意味合いのようですから、あまり英語圏での一般的な会話には使わない方が良さそうです。(語源を知りませんが de - fault なのでしょうか?) 「約束を実行しない、決まり事を守らない」という意味から「(入力を省略した場合にとるべき)既定の値または処理」はなんとなくつながるのですが。

scratch バッファ

残ったバッファも試しに破棄し、その時バッファ・メニューがどうなるか、画面上の表示がどうなるか確認すると良いでしょう。
どうしても最後に「 *scratch* 」バッファが残り、一つもバッファがない状態にはできない、という Emacs の性質が観測できるからです。
scratch バッファは Emacs が起動された初期状態から存在する、一時利用に使えるバッファとして少々特別な存在なのです。
つまり今まで作業してきましたが、実際には読み込んだファイル以外に、Emacs 自身の作業などの必要性から幾つかのバッファが作成されていたのです。

イメージとしては上図のような状態でしょうか。Emacs はこのように、ファイルと結びつけられたバッファと、ユーザが意識的に作成したわけではないバッファを区別せず扱い、ユーザに見える状態にしています。

(つまりユーザは scratch バッファや Messages バッファの内容をファイルに書き出すことがごく自然にできます。)

13. コピー・ペースト(マウス操作編)

Emacs におけるコピーとペースト(貼り付け)の方法について説明します。例として編集中の一行、「学部:理学部コンピュータ科学科」を少し下に複製する操作を示します。

13.1 コピー

まずコピーする元となる文字列の先頭位置にマウスを移動し、左ボタンをプレスします。

この状態でコピーしたい文字列の終わりの位置までドラッグし、マウスボタンを離します。文字の色が反転表示(白黒反転のような状態)になっていることで選択範囲が示されています。
この選択された範囲のことをリージョン( region )と呼びます。

特別な操作はなく、この選択された範囲が次にペーストを行った時に処理対象となります。なお、選択は左ボタンでクリックして先頭位置を決め、右ボタンをクリックして終わりの位置を決める、といった方法もあります。

13.2 ペースト

ペーストしたい場所に(例では「特技」の行の下)マウスポインタを移動させ、そこで中ボタンをクリックします。この操作によって先ほど選択した部分が目的の場所に貼り付けられます。

メニューによるペースト

中ボタンではなく、グローバル・メニューによるペースト操作も可能です。ペーストしたい場所にカーソルを移動し、そこで右ボタンをクリックすれば下図のようにグローバルメニューが表示されます。ここで「編集」から「貼り付け」を選んで下さい。

メニューに見えているので分かるでしょうが、コピー操作もメニューを利用して明示的に行うこともできます。コピーは余り意味がないと思いますが、カットについては意味があるでしょう。両者の違いについてはコピーとカットで説明します。

14. コピー・ペースト(キー操作編)

Emacs では全ての作業がキー操作だけで行えます。コピー・ペーストも例外ではありません。

14.1 コピー

まずコピーする元となる文字列の先頭位置にカーソルを移動し、C-Space (Control キーを押しながら Space キーを押す)とします。

ウィンドウ最下行に Mark set と表示されています。この位置(例では「学部;」の最初の位置)をリージョンの先頭位置としてマークした(一時的に記憶した)事を意味しています。この状態でコピーしたい文字列の終わりの位置までカーソルを移動してください。文字の色が反転表示(白黒反転のような状態)になっていることで選択範囲が示されています。
(X Window 環境でなければこのような表示は行われません。)

この状態で M-w (Escape キーを押してから w キーを押す)とすると、選択されたリージョンがコピー(一時的に記憶)されます。

14.2 ペースト

ペーストしたい場所(例では「特技」の行の下)にカーソルを移動させ、そこで C-y とします。この操作によって先ほどコピーした部分が目的の場所に貼り付けられます。

コピーとカット

「コピー・ペースト」ではなく「カット・アンド・ペースト」といった表現を見ることがあるでしょう。元の文書の選択した部分を目的の文書に貼り付けることには違いがないのですが、元の文書で選択した部分の扱いが異なります。

コピー : 選択した部分を残して、その複写を目的の場所に貼り付ける
カット : 選択した部分を削除し、その部分を目的の場所に貼り付ける

Emacs におけるカットのキー操作は、C-w です。つまり C-Space によるマークを行ったあと、 M-w とするとマークからカーソルまでをコピーし、C-w とするとカットが行われます。
マウスによる操作とキーによる操作は等価なものですから、マウスで選択し、C-w でカットしても構いませんし、その後マウスの中ボタンを押してペーストすることもできます。

15. 検索

エディタにとって検索は基本的な機能のひとつです。

15.1 インクリメンタル・サーチ

インクリメンタル・サーチ (incremental search) は増分検索などと訳され、追加的に検索キーワードを伸ばしていくタイプの検索です。つまり「sample」という単語を検索する場合、まず「s」とタイプすれば最初に「s」が見つかった場所を表示し、次に「a」とタイプすれば、最初に「sa」が見つかった場所を表示します。使ったことがないとピンと来ないかもしれませんが、使ってみるとこれは非常に便利です。
C-s が前向き(下向き)のインクリメンタル・サーチです。C-s とタイプすると下図のような表示になるでしょう。

この「 I-search: 」 に続けて、検索する文字列を一文字ずつタイプしていきます。例えば下図では、「coun」とタイプした状態を示します。

検索文字列とマッチしている部分は色が変わって表示されます。C-s をもう一度押せば、更に下に向かって次々と検索を続けます。
(この例では次は二行下にある count にマッチするでしょう。)

逆向け(上向け)の検索

検索をカーソル位置から上に向かって行いたい場合は、C-r です。操作方法は C-s と同じです。C-s で検索している途中で、検索方向を C-r によって切り替えることもできます。その逆、つまり上向け検索を下向けに切り替えることも可能です。

15.2 単語(漢字含む)の検索

インクリメンタル・サーチは便利なのですが、2 バイト文字(漢字)を検索することができません。インクリメンタル・サーチをしている最中に C-\ しても「 No EGG!! 」とエラーメッセージが出てくるだけです。漢字を含む文字列の検索をする場合は、インクリメンタルでない検索機能を使います。
方法は C-s とした後、何も検索文字を入れずに Enter キーを押し、続けて検索したい単語を入力します。

表示が「 I-search: 」ではなく「 Search: 」になっています。この状態で Enter キーを押せば、その単語の検索がはじまります。

インクリメンタルサーチとは異なり、マッチした文字列の色を変えて表示されたりはしません。カーソルがマッチした文字列の最後の位置に移動しますので、それで判断してください。
さらに下に向かって検索したければ C-s です。(この時はマッチする文字列に色が付きます。)

この単語検索も、C-s ではなく C-r で始めれば、カーソル位置から上に向かって単語検索するようになります。検索途中で C-s や C-r によって検索方向を切り替えることができる点もインクリメンタルサーチと同じです。

漢字を含んだ単語の指定

この単語検索の場合には、検索文字列を入力する時に C-\ として Wnn によるかな漢字変換を始めることができます。これで漢字を含んだ単語の検索が可能になるわけです。

16. 置換

対話的な(または問い合わせ型の)置換、と呼ばれる置換方法について紹介します。例では文字列「 count 」を「 number 」に置き換えます。M-% としてください。下図の表示になります。

ここでは置き換える元の文字列をたずねています。「count」とタイプし、Enter キーを押してください。下図のような表示になります。

続いて置き換え後の文字列をたずねています。「number」とタイプし、Enter キーを押してください。下図のような表示になります。

まず最初にマッチした文字列(count)の色が変わって表示されています。対話的置換では次に押すキーによってその後の処理が変わります。

Space この文字列を新文字列に置換し、次にマッチする部分を検索・表示する
Delete この文字列は置換せず、次にマッチする部分を検索・表示する
Enter 置換処理をこれで終了とする(この文字列は置換しない)
! (エクスクラメーションマーク) この文字列は置換せず、次にマッチする部分を検索・表示する
^ (ハット) 直前に置き換えた文字について元に戻す(最後の一つより前の置換にはさかのぼれない)

最終的に何箇所が置換されたかを下図のようにして表示します。

置換の再開

一度途中で終了した置換をカーソルの位置から再開することもできます。C-x Escape Escape (Control キーを押しながら x キーをおし、Escape キーを二度押す)としてください。下図のような表示になります。

この状態で Enter キーを押せば、最後の置換動作が再開されます。

17. よくある質問・トラブル

17.1 終了しようとしたのに終われない

Emacs を終了しようとしたときに、下記のようなメッセージが画面最下行に出て終了できない状態になっていませんか?

これは「終了する以前に編集してまだ保存できていない部分がある」ことを意味しています。上の例にそって説明すると、memo.txt ファイルを編集(修正)したのですが、まだ保存しないまま Emacs を終了しようとしています。保存して終了するか、保存せず終了するか、処理を選んでください。

ただし q (保存せず終了)とした場合、一度だけ確認のために「Modified buffers exist; exit anyway? (yes or no)」(修正してる部分があるが、それを保存せず終了して良いの?)と聞いてきます。
問題なければ yes とタイプし、Enter です。y と q 以外にも選択肢(n, !, . )はありますが、ここでは説明しません。

17.2 ローマ字入力のヒント

「たんい」(もしくは「んお?」など)のように「ん」の次に母音が来る場合

「ん」を単独でタイプするために N(大文字), n', nn が用意されていますのでいずれかを利用してください。「taNi」もしくは「tan'i」、「tanni」とタイプすれば「たんい」とローマ字変換されます。
「たんに」と入力するには「tannni」とnを3回入力する必要があります。

「あっ」(もしくは「んぁ?」など)のような小さい「っ」「ぁ」を入力したい場合

小さい「ぁぃぅぇぉ」などは、x を前に付けてタイプします。「xa」とタイプすれば「ぁ」とローマ字変換されます。「xtu」で「っ」、「xyu」で「ゅ」です。

17.3 記号の入力

一覧から選択する方法

C-^ (Control キーを押しながら ^ キーを押す。^ は BackSpace キーの二つ左)で記号などが入力できるモードに変わります。画面一番下の行に注目してください。

矢印キー、または番号を指定して入力文字種別、方法を選び、Enter キーを押します。矢印下キーを押すと、いま画面に見えている以上の入力が可能なことがわかるでしょう。
JIS入力、記号、英数字、ひらがな、カタカナ、ギリシャ文字、ロシア文字、罫線、部首入力、画数入力、第一水準、第二水準、補助漢字
の各入力モードが用意されています。よく使うのは記号と罫線でしょうか。ここでは記号を選択してみます。

ここで「5. ・」を選び、Enter キーを押すと、「・」が入力されます。上下左右の矢印キーで、いま画面に見えている以上の記号の一覧が表示されます。一文字入力すると、記号入力モードから抜けて通常の文字入力状態になります。
続けて記号を入力したい場合はもう一度 C-^ です。このときは入力方法の選択ではなく、記号入力画面になります。もし「罫線」など、それとは異なる記号入力をしたい場合は(入力方法の再選択をしたい場合)は、この状態で C-g としてください。

登録されたコードによる入力

例えば「○」なら z1 のように z と何かのキーという形でいくつか登録されている記号もあります。普通にローマ字入力するタイミングで「asuhaz7」と入力すると「あすは◎」となります。
以下に一覧を示しておきます。

入力記号 入力記号 入力記号 入力記号 入力記号 入力記号 入力記号 
z1 z2 z3 z4 z5 z6    
z! z@ z$ z$ z% z^    
z< z> z= z+± z*× zV÷ z_ 
z7 zv z&£ z8¢ z9 z0 z- 
zh zj zk zl          
z; z: zr zt zp zf zd 
z( z) z[ z]          
z{ z} zq zw          
z/ z, z. z' zn z" zm 

17.4 単語登録

Emacs で利用しているかな漢字変換システムである Wnn7 は一度変換した文字は極力覚えるようになっていますが、もとから辞書に載っていないような固有名詞などは変換できません。その場合は単語登録をすることで次回から簡単に変換候補にあがるようにできます。

Emacs を使った単語登録

以下に「中山広洋」(なかやまひろみ) [1] という人名を例にとり、Emacs に用意されている単語盗録機能について説明します。まず「なかやまひろみ」と入力して変換してみました。

「中山」は問題なく変換されたのですが、やはり「ひろみ」の読みに対して「広洋」は候補としてあがってきません。仕方ありませんので「広」だけ先に変換し、あとは「よう」とタイプして「洋」に変換することにします。

正しく「広洋」と入力できた所で、この「広洋」を「ひろみ」の読みで単語登録することにします。以下の図のように、まず登録したい単語を選択します。

選択の要領はコピー・ペーストの文字列選択と同じです。
まずカーソルを「広」の字まで移動させたところで、C-Space (Control キーを押しながら Space キーを押す)でマークをします。続いてカーソルを「洋」の後まで移動させます。マウスで「広洋」をドラッグして選択しても構いません。
この状態で M-x wnn7-toroku-region としてください。(Escape キーを押してから x キーを押し、wnn7-toroku-region とタイプしてから Enter です。)

Enter キーを押すと下図のように、画面最下行に登録用のメッセージが表示されます。

もしこうならず、「The mark is not active now」といったメッセージが表示された場合は、登録単語の選択に失敗しています。やり直して下さい。もしこの時点で希望と異なる単語が登録されようとしていた場合(つまりは選択範囲を間違えたのでしょうが)は、C-g で作業を中断できます。
続いて「ひろみ」と読みがなを入力します。このじてんでは既にローマ字入力モードになっていますので、単に「hiromi」とタイプすればいいでしょう。Enter を押すと、下図のようになります。

ここでは登録する辞書の種類を尋ねています。0. の 「 ud 」(user dictionary) をカーソルキーで選択して、Enter キーを押して下さい。

次は品詞を尋ねています。今回は固有名詞ですので 1. の「固有名詞」をカーソルキーで選択して、Enter です。

続いて更に細かく尋ねています。0. の「人名」をカーソルキーで選択して、Enter です。これで「広洋」が読みを「ひろみ」として登録されました。

試みに「なかやまひろみ」とタイプして変換してみました。

今まではなかった変換候補である「広洋」が二番目に現れています。


辞書ユーティリティを使った単語登録

登録するのは Wnn7 に対してであって Emacs にではありません。当然ですが Emacs を使わずに単語登録するための辞書ユーティリティ、wnndictutil コマンドが用意されています。

% wnndictutil 

wnndictutil コマンドを実行すると、新しいウィンドウが一つ開き、単語登録処理ができるようになります。

「詳細表示」ボタンをクリックすると、品詞の設定などができます。ツールを終了するにはウィンドウ右上端の×マークをクリックします。

単語登録ユーティリティへの漢字と読みの入力について

cc 環境の UNIX 環境では、単語登録ユーティリティには漢字や読みがなが入力できません。
通常なら「語句」や「読み」のフィールドに Wnn を使ったかな漢字変換ができるはずなのですが、この原稿を書いている時点(2005.4)ではできません。しばらくは kterm のウィンドウなどに登録する単語や読みがなを入力して表示させ、それを Copy & Paste で「語句」「読み」フィールドに記入するようにしてください。
(まずドラッグして Copy する文字列を選択してから、貼り付ける場所を中ボタンでクリックすれば Paste されます。)

17.5 画面下端の E や ** は何を意味している?

画面下端にある色の違う一行は編集中の状態などを示しています。

左から順に各項目が何を意味するか説明します。

入力モード[ あ ]かな漢字変換入力
 [ -- ]直接入力(タイプした英文字などがそのまま入力されます)
文字コードEEUC 漢字コードのファイルを編集中(または EUC コードで保存します)
 -漢字(2 バイト文字)を含まない(英文など)
 SShift JIS コードのファイルを編集中
 JJIS コードのファイルを編集中
変更フラグ**修正を加え、まだ保存していない状態
 --まったく修正されていないか、最後に保存してから修正されていない状態
(最初は「 -- 」状態、修正すると「 ** 」になり、保存すると再び「 -- 」表示になります)
ファイル名memo.txt編集元、また保存先となるファイル名
 *scratch*ファイル名未指定の状態

ここでの説明は用語や表現について厳密ではないことに注意してください。

18. 参考文献

GNU Emacs マニュアル 20.6
Richard M.Stallman著 / 2000年 / アスキー
Emacs 最初の開発者 Stallman によるマニュアル。600 page 超のボリュームがあり、網羅的にカバーしている。

入門 GNU Emacs 第2版
Debra Cameron, Bill Rosenblatt, Eric Raymond 著, 福崎 俊博 訳 / 1999年 / オライリー・ジャパン
Emacs の各機能について概念、操作法をまとめた教科書的書籍。1999 年出版なので最新バージョンには対応していないが、X には対応しており、日常的には充分だろう。

GNU Emacs拡張ガイド ― Emacs Lisp プログラミング
Bob Glickstein 著, 榎並 嗣智 訳 / 1998年 / オライリー・ジャパン
Emacs Lisp による Emacs のカスタマイズと機能拡張について詳細に説明。Lisp プログラミングの本ではなく、あくまで Emcs に強く結びついた内容。

GNU Emacs マニュアル
http://www.bookshelf.jp/texi/emacs-man/21-3/jp/emacs.html
Emacs とともに配布されている GNU Emacs Manual の松下晃久氏による私訳。これは version 21.3 のもの。

Meadow/Emacs memo
http://www.bookshelf.jp/soft/meadow.html
Meadow は Windows 向け Emacs として作られたもの。Unix で動作する Emacs と違いはほとんど無いため参考になるだろう。
著者の松下晃久氏による書籍版「Meadow/Emacsスーパーチュートリアル」(秀和システム, 2004)もある。

19. 謝辞

このドキュメントはコンピュータリテラシークラスのために作成されました。私に作成の動機を与えてくれた受講生たちに感謝します。
2005.4

京都産業大学 理学部
安田豊