Subsections

5.7 バッファとウィンドウ


5.7.1 複数バッファの利用

ここでは,複数のファイルを一度に編集する方法を扱います。まず,ファイル commands の中にある cat の説明の行を,新しいファイル commands_filter の 中に複写してみます。以下の操作を行ってください。
  1. Emacs が起動中であれば,一度終了してから,再度起動してください。

  2. Emacs のバッファにファイル commands を読み込んでください。

  3. commands の中の cat の行を,kill-ring に入れてください。

    そのためには,まず,ウィンドウに表示されている cat の行を領域指定 する必要があります。領域指定したい行の行頭でマークを設定してから, カーソルを次の行の行頭まで移動すればいいですね。

    さらに,適当な Emacs のコマンドを使って,指定した領域を kill-ring に入れます。消去はしないでください。 操作を誤ったら,焦らずに undo しましょう。

  4. 新規のファイル commands_filter 用のバッファを用意してください。

    2. で行ったのと同じ Emacs コマンドを 使います。ミニバッファに入力する名前は,もちろん, commands_filter です。

  5. commands_filter 用のバッファが用意できたら,cat の説明が入ってい る kill-ring の内容を取り出して (貼り付けて) ください。

  6. バッファ commands_filter をファイルに保存してください。

以上でファイル commands_filter が出来上がりました。 ところで, commands というバッファはウィンドウから消えてしまいましたが, このバッファは無くなったのでしょうか?

答えは「いいえ」です。バッファ commands は,今使っている Emacs から無く なった訳ではなくて,新しく用意したバッファの陰に隠れてしまっただけです。 次に,バッファ commands の内容を再度ウィンドウに表示してみます。

  1. C-x b を押してください 26。 これは編集中のバッファ (current buffer) を切り替えるコマンドです。

  2. エコー領域に
    Switch to buffer: (default commands_file)
    と表示されるはずです。ここで (default commands) とあるのは, 「特に指定がなければcommands とします」ということなので, そのまま <ENTER> を押します。もしも default の後に commands 以外の 文字列が現われたら,それを commands に修正してから <ENTER> を押します27

    「デフォルト (default)」という言葉は Emacs 以外の場面でもよく使 いますので,この機会に覚えておきましょう。

commands のバッファがウィンドウに現れましたから,このバッファを引き続い て編集することも可能です。

以上の操作では,二つのバッファを同時に使って編集作業を行いましたが,三つ 以上のバッファを同時に使うこともできます。


5.7.2 ウィンドウの分割

  1. まず,バッファ切り替えのコマンド (C-x b) を使って,*scratch* バッ ファをウィンドウに表示してください。

    Emacs を使っている間は,バッファ削除の操作をしなければ, *scratch* バッファは常に存在しています。 ミニバッファに入力するバッファ名は *scratch* です。 <TAB> による入力補完も利用できます。

  2. C-x 2 を押しましょう。 ウィンドウが上下二つに分割されました。 でも表示されている内容は同じですね。

  3. a という文字を入力してください。 カーソルは上のウィンドウにありますから,文字はそこに入力されたの ですが,下のウィンドウにも同じ文字が現われました。 *scratch* という名の一つのバッファを,別々のウィンドウ(窓) から覗いて,編集している状態にあるからです。

  4. C-x o を押してください。 この o は other の頭文字です。 別のウィンドウにカーソルが移動しました。 もう一度,C-x o を押しましょう。 また,別のウィンドウにカーソルが移動して,上に戻りました。

  5. さらに 10 個ほど a を入力して28,カーソルの位置を確認してから C-x o を押し てください。

    別のウィンドウにカーソルが移動しましたが,カーソルの位置が上と下 では違いますね29

    一つのバッファを複数のウィンドウで編集しているときには,あるウィ ンドウで行ったバッファの内容変更 (文字入力) は,他のウィンドウに も反映されます。一方,カーソル位置や表示位置はウィンドウ毎に独立 ですので,一つのバッファの異なる場所を,別々のウィンドウに表示し て,それぞれで編集することができます。長い文書を扱うときに便利で す。

  6. C-x 1 を押しましょう。これは,編集中(カーソルの存在する)ウィ ンドウをただ一つだけ残して,他のウィンドウを閉じるコマンドでした。

  7. C-x 3 を押してください。結果を確認したら,ウィンドウを一つに戻 してください。

5.7.3 複数ウィンドウでの複数バッファの操作

5.7.2 節では, 異なるウィンドウから一つのバッファの 内容を眺めてみましたが,もちろん,異なるウィンドウで異なるファイル(バッ ファ)を編集することもできます。

  1. Emacs のウィンドウを上下二つに分割してください。

  2. 上のウィンドウで,ファイル commands を読み込んでください。

  3. カーソルを下のウィンドウに移動させて,ファイル commands を読 み込んでください。

ここでは,実際に作業を行うことは略しますが,カーソルを上下のウィンドウに 移動することによって,各ウィンドウ内のバッファを編集することが可能です。

これまで使ってきたファイルへの保存の操作 (C-x C-s) では,保存される バッファは,カーソルが存在するウィンドウ内のもののみです。複数のウィンド ウに表示されている異なるバッファをファイルに保存するには,それぞれのウィ ンドウで C-x C-s を押す必要があります。

一回のコマンド操作で複数のバッファをファイルに保存したければ C-x s を使 います。このコマンドを実行すると,元のファイルから内容変更のあったバッファ 各々について,保存するか否かを尋ねられますので,保存する場合には y で答 えます。

では,C-x s を試してみましょう。今の場合,変更を施したバッファはないは ずですから,保存の対象となるバッファはありません。エコー領域に,その旨表 示されます。

5.7.4 バッファの一覧と削除

今 Emacs が持っているバッファの一覧を表示するコマンドは C-x C-b30 です。
  1. C-x C-b を実行してください。

    ウィンドウを分割した状態で実行した場合には,カーソルの存在しない ウィンドウに *Buffer List* という名前のバッファ一覧が表示されます。 一つのウィンドウのみで作業していた場合には,ウィンドウが分割され て,一覧が現われます。

  2. *Buffer List* ウィンドウ31 の *scratch* という語のある行にカーソルを移動して, <ENTER> を押してみましょう。バッファ切り替えのコマンド(C-x b) を 使わなくても,*Buffer List* が *scratch* に切り替わります。

次は不要になったバッファを削除してみましょう。 そのためのコマンドは C-x k32です。 これを使って commands バッファを削除してみます。

  1. C-x k を押してください。 エコー領域に
    Kill buffer: (default *scratch*)
    と表示されます。 カーソルの存在するウィンドウに commands を表示した状態でコマンド を実行すると,デフォルトのバッファ名が commands になりますが, 今は *scratch* になっているはずなので,commands とタイプして から <ENTER> を押します。<TAB> による入力補完も可能です。

  2. バッファ一覧を表示して,バッファが削除されたか確認しましょう。た だし,ここでバッファ一覧を表示するには,C-x C-b を使ってくだ さい。バッファ切り替えコマンド (C-x b) でバッファ一覧 (*Buffer List*) を表示しても,一覧に変更は反映されていません33

なお,第 3.3 節で確認したように,バッファを削除しても,ファ イルが削除されるわけではありません。ファイルを編集する必要が生じたら, C-x C-f で再度バッファに読込めばよいのです。

5.7.5 複数フレームの利用

オプション -nw をつけずに新しいウィンドウで Emacs を開いたときには,こ んなこともできます。 ここではメニューを使った操作を紹介します。 試してください。
  1. File -> New Frame
  2. File -> Delete Frame

注意

特に理由がない限り,コマンド行から emacs & を何度も打って,複数の Emacs を同時に動かすことは避けましょう。計算機の負荷が大きくなってしまいます。 Emacs で複数のウィンドウ (Emacs の用語ではフレーム) を利用したければ, ここで紹介した方法を使いましょう。