Emacs内で編集しているテキストはバッファ(buffer)と 呼ばれるオブジェクトの中に存在します。 ファイルを訪問するたびに、 ファイルのテキストを保持するバッファを作ります。 diredを起動するたびに、ディレクトリ一覧を保持するバッファを作ります。 C-x mでメッセージを送信するときには、 メッセージのテキストを保持するためにバッファ`*mail*'が使われます。 コマンドの説明文を求めると、`*Help*'と呼ばれるバッファに説明文が現れます。
どんなときでも、1つのバッファだけが選択されています。 このバッファをカレントバッファとも呼びます。 バッファが1つしかないかのように、 コマンドが『バッファ』に作用するといういい方をよくします。 しかし、実際には、コマンドが選択されたバッファに作用するということです (多くのコマンドはそうする)。
複数のウィンドウがあるとき、 各ウィンドウはそこに表示しているバッファを選んでいますが、 いつでもそれらのウィンドウのうち1つだけが選択されていて、 そのウィンドウに表示されているバッファが選択されているバッファです。 各ウィンドウのモード行は、 そのウィンドウに表示しているバッファの名前を表示します(see section 複数のウィンドウ)。
各バッファにはどんな長さでもよい名前があり、 バッファ名を指定してバッファを選択できます。 多くのバッファはファイルを訪問することで作成され、 それらの名前はファイル名から導き出します。 好きな名前で空のバッファを作ることもできます。 Emacsを新たに始めると、Emacs内でLisp式の評価に使える `*scratch*'という名前のバッファができます。 バッファ名では大文字小文字を区別します。
各バッファは独立に、どのファイルを訪問しているか、 変更されているか、どのメジャーモードとマイナモードを使っているか を記録しています。(see section メジャーモード)。 どのEmacs変数も各バッファにローカルにすることができます。 つまり、あるバッファでの変数の値を 他のバッファでのその変数の値とは違う値にできます。 See section ローカル変数。
switch-to-buffer
)。
switch-to-buffer-other-window
)。
switch-to-buffer-other-frame
)。
bufnameという名前のバッファを選択するには、
C-x b bufname RETと打ちます。
これは、引数bufnameでコマンドswitch-to-buffer
を実行します。
バッファ名の略称形を補完することができます(see section 補完)。
C-x bに空の引数を指定すると、
どのウィンドウにも表示されていない最近選択したバッファを意味します。
ほとんどのバッファは、ファイルを訪問することで作られるか、
テキストを表示するようなEmacsコマンドによって作られますが、
C-x b bufname RETと打って、
明示的にバッファを作ることもできます。
こうすると、ファイルを訪問していない新しい空のバッファを作り、
編集できるようにそのバッファを選択します。
このようなバッファは、自分用のメモを作るのに使います。
これらのバッファを保存しようとすると、
使用するファイル名を聞かれます。
新しいバッファのメジャーモードは、
default-major-mode
の値で決まります(see section メジャーモード)。
C-x C-fやファイルを訪問する他のコマンドは、 ファイルを訪問している既存のバッファへの切り替えにも使えることに 注意してください。 See section ファイルを訪問する。
Emacsは、内部目的用のバッファには、空白で始まるバッファ名を使います。 Emacsは、これらのバッファを少々特別に扱います。 たとえば、デフォルトでは、アンドゥ情報を記録しません。 このようなバッファ名は避けるのが最良です。
list-buffers
)。
既存のすべてのバッファを一覧表示するには、 C-x C-bと打ちます。 各行は、バッファ名、メジャーモード、訪問しているファイルを示します。 バッファは選択された順に表示されます。 もっとも最近に選択されたバッファが始めにきます。
行頭の`*'は、バッファが『修正され』ていることを示します。 いくつかのバッファが修正されているなら、 C-x sでいくつかのバッファを保存する時期かもしれません (see section ファイルを保存する)。 `%'は、読み出し専用バッファを示します。 `.'は選択されているバッファに付けられます。 つぎは、バッファ一覧の例です。
MR Buffer Size Mode File -- ------ ---- ---- ---- .* emacs.tex 383402 Texinfo /u2/emacs/man/emacs.tex *Help* 1287 Fundamental files.el 23076 Emacs-Lisp /u2/emacs/lisp/files.el % RMAIL 64042 RMAIL /u/rms/RMAIL *% man 747 Dired /u2/emacs/man/ net.emacs 343885 Fundamental /u/rms/net.emacs fileio.c 27691 C /u2/emacs/src/fileio.c NEWS 67340 Text /u2/emacs/etc/NEWS *scratch* 0 Lisp Interaction
バッファ`*Help*'は、ヘルプ要求で作られたものです。
このバッファはファイルを訪問していません。
バッファman
は、
ディレクトリ`/u2/emacs/man/'に対してdiredが作ったものです。
vc-toggle-read-only
)。
バッファは、読み出し専用にもなります。 そうすると、その内容を変更するコマンドは許されません。 モード行では、左端付近に`%%'や`%*'を表示して、 読み出し専用バッファであることを示します。 通常、読み出し専用バッファは、テキストを操作する特別なコマンドを持つ diredやrmailなどのサブシステムが作ります。 書き込みを禁止されたファイルを訪問しても 読み出し専用バッファが作られます。
読み出し専用バッファで変更したいときには、
コマンドC-x C-qを使います(vc-toggle-read-only
)。
これは、読み出し専用バッファは書き込み可能にし、
書き込み可能バッファは読み出し専用にします。
多くの場合、これは変数buffer-read-only
を設定することで動作します。
この変数は各バッファでローカルな値を持ち、
値がnil
以外だとバッファは読み出し専用になります。
ファイルが版管理の下に置かれている場合には、
C-x C-qは版管理システムを介して
バッファだけでなくファイルの読み出し専用の状態も変更します。
See section VC(版管理、バージョンコントロール)。
M-x rename-bufferは、カレントバッファの名前を変更します。 ミニバッファ引数として新しい名前を指定します。 デフォルトはありません。 すでに他のバッファに使っている名前を指定すると、 エラーになり、名前は変更されません。
M-x rename-uniquelyは、 他のどれとも違う唯一の名前にするために、 カレントバッファ名に数字の接尾辞を付け加えて似た名前に変更します。 このコマンドは引数を必要としません。 このコマンドは複数のシェルバッファを作るのに便利です。 バッファ`*Shell*'を改名すれば、 M-x shellをふたたび実行して バッファ名`*Shell*'の新しいシェルバッファを作れます。 一方、古いシェルバッファは、新しい名前で存在し続けます。 この方法は、メイルバッファ、コンパイルバッファ、 特定の名前のバッファを作るEmacsの多くの機能にも有効です。
M-x view-bufferは、既存のEmacsバッファを調べることを除けば、 M-x view-file(see section その他のファイル操作)によく似ています。 閲覧(view)モードには、バッファを簡単にスクロールするための コマンドがありますが、変更するコマンドはありません。 qで閲覧(view)モードから抜けると、 ウィンドウにまえに表示していたバッファ(とその中での箇所)に切り替わります。 あるいは、eで閲覧(view)モードから抜けると、 閲覧していたバッファとそのポイント位置はそのまま残ります。
コマンド、M-x append-to-bufferとM-x insert-bufferは、 1つのバッファから別のバッファへテキストをコピーするのに使います。 See section テキストの蓄積。
Emacsのセッションをしばらく続けると、 たくさんの数のバッファが溜っているでしょう。 もう必要としないバッファを消去したほうがよいと思うかもしれません。 多くのオペレーティングシステムでは、 バッファを消去するとそのメモリ領域を解放して オペレーティングシステムに返すので、 他のプログラムが使えるようになります。 バッファを消去するコマンドをいくつかあげます。
kill-buffer
)。
C-x k(kill-buffer
)は、
ミニバッファで指定した名前のバッファを消去します。
ミニバッファでRETだけ打ったときに使われるデフォルトは、
カレントバッファを消去することです。
カレントバッファを消去すると、別のバッファが選択されます。
どのウィンドウにも表示されていない、
もっとも最近に選択されたバッファです。
ファイルを訪問して修正してある(編集後に保存していない)バッファを
消去しようとすると、バッファを消去するまえにyesでの確認を求めます。
コマンドM-x kill-some-buffersは、
1つ1つ各バッファについて消去するか聞いてきます。
yと答えると、そのバッファを消去します。
カレントバッファや未保存の変更を含むバッファを消去しようとすると、
新しいバッファを選択するかkill-buffer
のように確認を求めてきます。
バッファメニュー機能(see section 複数バッファの操作)も、 さまざまなバッファを削除するのに便利です。
バッファを削除するときに、毎回何か特別なことをしたいならば、
フックkill-buffer-hook
にフック関数を追加します(see section フック)。
多くの人々がやるように、何日にもわたってたった1つのEmacsセッションを 実行する場合、数日前に使ったバッファで一杯になることがあります。 コマンドM-x clean-buffer-listは、 それらのバッファを消去する便利な方法です。 長い期間にわたって使っていない未修正のバッファすべてを消去します。 3日間表示していない普通のバッファは消去されます。 しかし、特定のバッファを自動的には消去しないようにしたり、 ほんの数時間使用しないだけで消去するようにも指定できます。
真夜中(midnight)モードをオンにすれば、
このようなバッファの消去を毎日真夜中に行わせることもできます。
真夜中(midnight)モードは、毎日真夜中に動作します。
真夜中に、clean-buffer-list
、あるいは、
ノーマルフックmidnight-hook
に指定した関数を実行します。
真夜中(midnight)モードをオンにするには、
カスタマイズ(customization)バッファを使って、
変数midnight-mode
にt
を設定します。
See section 簡便なカスタマイズ方法。
バッファメニュー(buffer-menu)機能は 『バッファに対するdired』に似ています。 このコマンドは、バッファ一覧を収めたEmacsバッファを編集することで、 さまざまなEmacsバッファを操作できます。 バッファの保存、消去(ここではdiredとの一貫性のために削除と呼ぶ)、 表示を行うことができます。
コマンドbuffer-menu
は、
すべてのEmacsバッファの一覧をバッファ`*Buffer List*'に書き、
そのバッファをバッファメニュー(buffer-menu)モードにして
選択します。
そのバッファは読み出し専用で、本節で述べる特別なコマンドでのみ変更できます。
普通のEmacsカーソル移動コマンドは、`*Buffer List*'バッファでも使えます。
つぎにあげるコマンドは、現在行に書かれているバッファに作用します。
d、C-d、s、uコマンドは、 フラグを追加または削除して、1行下へ(あるいは上へ)移動します。 これらのコマンドは、反復回数として数引数を取ります。
つぎにあげるコマンドは、現在行に書かれているバッファにただちに作用します。
他のバッファや複数のバッファを選択するコマンドもあります。
buffer-menu
が直接行うことは、
適切なバッファを作成してそれに切り替えてから、
バッファメニュー(buffer-menu)モードにすることです。
それ以外の上に述べたことはすべて、
バッファメニュー(buffer-menu)モードが用意した特別なコマンドで
実装されています。
その結果、`*Buffer List*'バッファから別のEmacsバッファへ切り替えて、
そこで編集できます。
あとで`*Buffer List*'バッファをふたたび選択してすでに指示した操作を実行したり、
このバッファを削除したり、無視したりもできます。
buffer-menu
とlist-buffers
の唯一の違いは、
buffer-menu
は選択されたウィンドウで
`*Buffer List*'バッファに切り替えることです。
list-buffers
は別のウィンドウにこのバッファを表示するだけです。
list-buffers
を実行し(つまり、C-x C-bと打つ)、
`*Buffer List*'バッファを手動で選択すると、
ここに述べたすべてのコマンドを使えます。
バッファを作成したり削除したりしても、
バッファ`*Buffer List*'は自動的に更新されません。
その内容はただのテキストにすぎません。
バッファを作成/削除/改名したら、
現在のバッファの状態を見るために`*Buffer List*'を更新する方法は、
g(revert-buffer
)を打つか、
buffer-menu
コマンドを再度実行することです。
間接バッファは、他のバッファとテキストを共有します。 そのような他のバッファを間接バッファの基底バッファと呼びます。 ある意味で、ファイルのあいだのシンボリックリンクに似ています。
間接バッファのテキストはつねに基底バッファのテキストと同じです。 どちらか片方を編集して変更すると、他方のバッファでもすぐにそれが見えます。 しかし、それ以外のすべての点では、 間接バッファとその基底バッファは完全に別のものです。 これらは、異なる名前、異なるポイントの値、異なるナロイング、 異なるマーカ、異なるメジャーモード、異なるローカル変数を持ちます。
間接バッファではファイルを訪問できませんが、 基底バッファではできます。 間接バッファを保存しようとすると、実際には基底バッファを保存します。 基底バッファを消去すると間接バッファも消去されますが、 間接バッファを消去しても基底バッファには影響しません。
間接バッファの使い方の1つは、アウトラインを複数の視点で表示することです。 See section 複数の視点からアウトラインを眺める。
Go to the first, previous, next, last section, table of contents.