[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacs内で編集しているテキストはバッファ(buffer)と 呼ばれるオブジェクトの中に存在します。 ファイルを訪問するたびに、 ファイルのテキストを保持するバッファを作ります。 diredを起動するたびに、ディレクトリ一覧を保持するバッファを作ります。 C-x mでメッセージを送信するときには、 メッセージのテキストを保持するためにバッファ`*mail*'が使われます。 コマンドの説明文を求めると、`*Help*'と呼ばれるバッファに説明文が現れます。
どんなときでも、1つのバッファだけがカレントになります. このバッファを選択されたバッファとも呼びます。 バッファが1つしかないかのように、 コマンドが『バッファ』に作用するといういい方をよくします。 しかし、実際には、コマンドがカレントバッファに作用するということです (多くのコマンドはそうする)。
複数のウィンドウがあるとき、 各ウィンドウは選択しているバッファを持ち,それを表示しています. しかし,いつでもそれらのウィンドウのうち1つだけが選択されていて、 そのウィンドウに表示されているバッファがカレントバッファになります。 各ウィンドウのモード行は、 通常そのウィンドウで選択されているバッファの名前を表示します(see 節 P. 複数のウィンドウ (2004/03/23))。
各バッファにはどんな長さでもよい名前があり、 バッファ名を指定してバッファを選択できます。 多くのバッファはファイルを訪問することで作成され、 それらの名前はファイル名から導き出します。 好きな名前で空のバッファを作ることもできます。 Emacsを新たに始めると、Emacs内でLisp式の評価に使える `*scratch*'という名前のバッファができます。 バッファ名では大文字小文字を区別します。
各バッファは独立に、どのファイルを訪問しているか、 変更されているか、どのメジャーモードとマイナモードを使っているか を記録しています。(see 節 S. メジャーモード (2005/03/20))。 どのEmacs変数も各バッファにローカルにすることができます。 つまり、あるバッファでの変数の値を 他のバッファでのその変数の値とは違う値にできます。 See 節 AE.2.4 ローカル変数。
バッファのサイズはいくつかの最大値よりも大きくなることはできません.最大サイズは データタイプ Emacs integer により表現できるバッファ位置により規定されます. これは,Emacs がバッファ位置をそのデータタイプを使って追跡しているためです.32ビッ トマシンでは最大バッファサイズは128MBになります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
switch-to-buffer
)。switch-to-buffer-other-window
)。switch-to-buffer-other-frame
)。 bufnameという名前のバッファを選択するには、 C-x b bufname RETと打ちます。 これは、引数bufnameでコマンドswitch-to-buffer
を実行します。 バッファ名の略称形を補完することができます(see 節 E.3 補完 (2005/03/24))。 C-x bに空の引数を指定すると、 どのウィンドウにも表示されていない最近選択したバッファを意味します。
現在とは異なるウィンドウでバッファを選択するには C-x 4 b bufname RET を入力します.これは,関数 switch-to-buffer-other-window
を実 行し,他のウィンドウで bufname のバッファを表示します.デフォルトでは,バッ ファを表示すると,隣接しているウィンドウに表示し,縦方向の高さを均等になるように 調節します.この機能を無効にし,ウィンドウ設定を保存するようにするには, even-window-heights
を nil
にします.
同様に C-x 5 b buffer RET は関数 switch-to-buffer-other-frame
を実行し,バッファを別フレームで選択します.
special-display-buffer-names
と special-display-regexps
, same-window-buffer-names
, same-window-regexps
をカスタマイズすることでこれらのコマンドがあるバッファ をどう扱うか制御できます.これらの変数の詳細は P.5 同じウィンドウへの強制表示 と Q.9 特別なバッファフレーム を参照ください.さらに, 変数 display-buffer-reuse-frames
が 非-nil
で切り替えたいバッファ がすでにフレームで表示されているなら,Emacsはそのフレームを前面に出します.
ほとんどのバッファは、ファイルを訪問することで作られるか、 テキストを表示するようなEmacsコマンドによって作られますが、 C-x b bufname RETと打って、 明示的にバッファを作ることもできます。 こうすると、ファイルを訪問していない新しい空のバッファを作り、 編集できるようにそのバッファを選択します。 このようなバッファは、自分用のメモを作るのに使います。 これらのバッファを保存しようとすると、 使用するファイル名を聞かれます。 新しいバッファのメジャーモードは、 default-major-mode
の値で決まります(see 節 S. メジャーモード (2005/03/20))。
C-x C-fやファイルを訪問する他のコマンドは、 ファイルを訪問している既存のバッファへの切り替えにも使えることに 注意してください。 See 節 N.2 ファイルを訪問する。
Emacsは、内部目的用のバッファには、空白で始まるバッファ名を使います。 Emacsは、これらのバッファを少々特別に扱います。 たとえば、デフォルトでは、アンドゥ情報を記録しません。 このようなバッファ名は避けるのが最良です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
list-buffers
)。既存のすべてのバッファを一覧表示するには、 C-x C-bと打ちます。 各行は、バッファ名、メジャーモード、訪問しているファイルを示します。 バッファは選択された順に表示されます。 もっとも最近に選択されたバッファが始めにきます。
最初のフィールドの`*'は、バッファが『修正され』ていることを示します。 いくつかのバッファが修正されているなら、 C-x sでいくつかのバッファを保存する時期かもしれません (see 節 N.3 ファイルを保存する)。 `%'は、読み出し専用バッファを示します。 `.'はカレントバッファに付けられます。 つぎは、バッファ一覧の例です。
CRM Buffer Size Mode File . * .emacs 3294 Emacs-Lisp ~/.emacs % *Help* 101 Help search.c 86055 C ~/cvs/emacs/src/search.c % src 20959 Dired by name ~/cvs/emacs/src/ * *mail* 42 Mail % HELLO 1607 Fundamental ~/cvs/emacs/etc/HELLO % NEWS 481184 Outline ~/cvs/emacs/etc/NEWS *scratch* 191 Lisp Interaction * *Messages* 1554 Fundamental |
バッファ`*Help*'は、ヘルプ要求で作られたものです。 このバッファはファイルを訪問していません。 バッファsrc
は、 ディレクトリ`~/cvs/emacs/src/'に対してdiredが作ったものです。前置引数を付け ることで訪問しているファイルバッファのみを一覧できます.たとえば,C-u C-x C-b とすると可能です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
toggle-read-only
)。バッファは、読み出し専用にもなります。 そうすると、その内容を変更するコマンドは許されません。 モード行では、左端付近に`%%'や`%*'を表示して、 読み出し専用バッファであることを示します。 通常、読み出し専用バッファは、テキストを操作する特別なコマンドを持つ diredやrmailなどのサブシステムが作ります。 書き込みを禁止されたファイルを訪問しても 読み出し専用バッファが作られます。
読み出し専用バッファで変更したいときには、 コマンドC-x C-qを使います(toggle-read-only
)。 これは、読み出し専用バッファは書き込み可能にし、 書き込み可能バッファは読み出し専用にします。 これは変数buffer-read-only
を設定することで動作します。 この変数は各バッファでローカルな値を持ち、 値がnil
以外だとバッファは読み出し専用になります。 版管理の下に置かれているファイルがある場合には、C-x C-q を vc-toggle-read-only
にバインドした方が便利かもしれません.それなら, C-x C-q と入力することで,読み出し専用の変数を変更するだけでなく,ファイル の読み出し専用状態も確認します。See 節 N.7 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 節 N.10 その他のファイル操作)によく似ています。 閲覧(view)モードには、バッファを簡単にスクロールするための コマンドがありますが、変更するコマンドはありません。 qで閲覧(view)モードから抜けると、 ウィンドウにまえに表示していたバッファ(とその中での箇所)に切り替わります。 あるいは、eで閲覧(view)モードから抜けると、 閲覧していたバッファとそのポイント位置はそのまま残ります。
コマンド、M-x append-to-bufferとM-x insert-bufferは、 1つのバッファから別のバッファへテキストをコピーするのに使います。 See 節 H.10 テキストの蓄積 (2005/03/20)。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
Emacsのセッションをしばらく続けると、 たくさんの数のバッファが溜っているでしょう。 もう必要としないバッファを消去したほうがよいと思うかもしれません。 多くのオペレーティングシステムでは、 バッファを消去するとそのメモリ領域を解放して オペレーティングシステムに返すので、 他のプログラムが使えるようになります。 バッファを消去するコマンドをいくつかあげます。
kill-buffer
)。C-x k(kill-buffer
)は、 ミニバッファで指定した名前のバッファを消去します。 ミニバッファでRETだけ打ったときに使われるデフォルトは、 カレントバッファを消去することです。 カレントバッファを消去すると、別のバッファがカレントバッファになります。 どのウィンドウにも表示されていない、 もっとも最近のカレントバッファです。 ファイルを訪問して修正してある(編集後に保存していない)バッファを 消去しようとすると、バッファを消去するまえにyesでの確認を求めます。
コマンドM-x kill-some-buffersは、 1つ1つ各バッファについて消去するか聞いてきます。 yと答えると、そのバッファを消去します。 カレントバッファや未保存の変更を含むバッファを消去しようとすると、 新しいバッファを選択するかkill-buffer
のように確認を求めてきます。
バッファメニュー機能(see 節 O.5 複数バッファの操作 (2004/07/16))も、 さまざまなバッファを削除するのに便利です。
バッファを削除するときに、毎回何か特別なことをしたいならば、 フックkill-buffer-hook
にフック関数を追加します(see 節 AE.2.3 フック)。
多くの人々がやるように、何日にもわたってたった1つのEmacsセッションを 実行する場合、数日前に使ったバッファで一杯になることがあります。 コマンドM-x clean-buffer-listは、 それらのバッファを消去する便利な方法です。 長い期間にわたって使っていない未修正のバッファすべてを消去します。 3日間表示していない普通のバッファは消去されます。 しかし、特定のバッファを自動的には消去しないようにしたり、 ほんの数時間使用しないだけで消去するようにも指定できます。
真夜中(midnight)モードをオンにすれば、 このようなバッファの消去を毎日真夜中に行わせることもできます。 真夜中(midnight)モードは、毎日真夜中に動作します。 真夜中に、clean-buffer-list
、あるいは、 ノーマルフックmidnight-hook
に指定した関数を実行します。
真夜中(midnight)モードをオンにするには、 カスタマイズ(customization)バッファを使って、 変数midnight-mode
にt
を設定します。 See 節 AE.2.2 簡便なカスタマイズ方法。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
バッファメニュー(buffer-menu)機能は 『バッファに対するdired』に似ています。 このコマンドは、バッファ一覧を収めたEmacsバッファを編集することで、 さまざまなEmacsバッファを操作できます。 バッファの保存、消去(ここではdiredとの一貫性のために削除と呼ぶ)、 表示を行うことができます。
コマンドbuffer-menu
は、 すべてのEmacsバッファの一覧をバッファ`*Buffer List*'に書き (15)、 そのバッファをバッファメニュー(buffer-menu)モードにして 選択します。`*Buffer List*' で表示されるリストは O.2 既存バッファの一覧 (2004/07/16) で述べ たものと全く同じように見えます. そのバッファは読み出し専用で、本節で述べる特別なコマンドでのみ変更できます。 普通の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
コマンドを再度実行することです。
関数 buffer-menu-other-window
は buffer-menu
と同じように動作しま すが,バッファリストを別ウィンドウに表示することだけが異なります.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
間接バッファは、他のバッファとテキストを共有します。 そのような他のバッファを間接バッファの基底バッファと呼びます。 ある意味で、ファイルのあいだのシンボリックリンクに似ています。
clone-indirect-buffer-other-window
).間接バッファのテキストは基底バッファのテキストと常に同一です.一方で編集された変 更は,他方でも即座に見ることができます.しかし,他の観点では間接バッファと基底バッ ファは完全に分離しています.つまり,バッファ名もカーソル位置も,ナローイングも, マークもメジャーモードも,ローカル変数もすべて異なるのです.
間接バッファはファイルを訪問できませんが,基底バッファはできます.もし間接バッファ を保存しようとすると,実際には基底バッファで保存処理が行われます.基底バッファを キルすると,事実上間接バッファもキルされます.しかし,間接バッファをキルしても基 底バッファには何ら影響を与えません.
間接バッファを使う一つの方法はアウトラインで複数箇所を表示させることです. See 節 U.8.4 複数の視点からアウトラインを眺める.
間接バッファを作る手っ取り早い方法は M-x clone-indirect-buffer を使うこと です.このコマンドは基底バッファがカレントバッファである間接バッファを作成し,選 択します.前置引数があると,間接バッファの名前を問い合わせます.そうしなければ, バッファ名は,カレントバッファの名前に,`<n>' を追加して作成されます. C-x 4 c (clone-indirect-buffer-other-window
) は M-x clone-indirect-buffer のように動作しますが,他のウィンドウで間接バッファを選択 します.例えば,新しい`*info*' や `*Help*' バッファを作成したい場合に は手軽なコマンドとなります.
より一般的なコマンドは M-x make-indirect-bufferです.このコマンドは base-buffer の基底バッファから indirect-name の名前の間接バッファを 作成します.base-buffer と indirect-name はミニバッファで入力します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
この節はバッファ切り替えをより便利にするようなモードや機能を紹介しています.
O.7.1 バッファ名を分かりやすく (2004/07/16) Buffer names can contain directory parts. O.7.2 バッファ名検索でバッファを切り替える ― iswitchb (2004/07/16) Switching between buffers with substrings. O.7.3 バッファメニューのカスタマイズ (2004/07/16) Configurable buffer menu.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
同一のファイル名を持つファイルを開きバッファを作成するためには,Emacs が区別でき るバッファ名が必要になります.通常はバッファ名の最後に `<2>',`<3>' な どを付加することでバッファ名を区別できるようにしています.
他の方法はバッファ名にそれぞれのディレクトリ名の一部を追加する方法です.ディレク トリの追加方法は uniquify-buffer-name-style
(see 節 AE.2.2 簡便なカスタマイズ方法) をカスタマイズすることで設定できます.
例えば,forward
を選択すると,バッファ名の最初にディレクトリ名の一部が付け られます.この方法で,`/u/mernst/tmp/Makefile' と `/usr/projects/zaphod/Makefile' を開くと,バッファ名はそれぞれ `tmp/Makefile' と `zaphod/Makefile' になります (デフォルトではそれぞれ `Makefile' and `Makefile<2>' となります).
対照的に,post-forward
は `Makefile|tmp' と `Makefile|zaphod'に, reverse
は`Makefile\tmp' と `Makefile\zaphod' のようなバッファ 名にします.post-forward
と reverse
の大きな違いが,1つのディレク トリ名では対応できない時です.reverse
はディレクトリ名を逆順で追加してい きます.つまり,`/top/middle/file' が `file\middle\top' になります.一 方,post-forward
はファイル名の後に `file|top/middle' のように追加し ます.
どの方法を使っても,バッファ名を入力する際に,見て確認するのであれば,方 法は大して重要ではありません.しかし,熟練したユーザのように,ルールを熟知してい れば,見ることはないでしょう.そして,その場合,いずれかのルールでバッファ 名が表示されていれば,思い出し利用するのが容易になることでしょう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
グローバルマイナーモードである Iswitchb はバッファ名を文字で検索することで切り替 えを便利にする機能です.この機能はデフォルトで C-x b, C-x 4 b, C-x 5 b やC-x 4 C-o に割り当てられている機能をより便利な機能で代替し ます.
これらのコマンドはバッファ名の入力を求めます.その時,選択したい名前の一部だけを 入力できます(最初から入力しなくていいのです).一部の文字を入力すると,Iswitchb は入力した文字を含むバッファ名のリストを表示します.
リストの最初のバッファは RET で選択します.つまり,特定のバッファを選択し たければ,リストの先頭に持ってくればいいのです.これには2つの方法があります.1つ はさらに文字を入力して,不要なバッファを除外して,バッファ名のリストを絞り込むこ と.もう一つは,C-s と C-r で希望のバッファが先頭になるまで,リスト の順番を変更させることです.
バッファ名を入力している間,TAB はバッファ名のリストをもとに補完する機能が あります.
Iswitchb を有効にするには M-x iswitchb-mode を実行するか iswitchb-mode
を t
にカスタマイズ (see 節 AE.2.2 簡便なカスタマイズ方法) し ます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
M-x bs-show はカスタマイズは可能ですが,通常は C-x C-b で表示される ものと似た一覧を表示します.通常のものよりもこちらが良ければ,このコマンドを C-x C-b に割り当てることができます.バッファリストのカスタマイズはカスタマ イズグループの bs
を利用できます (see 節 AE.2.2 簡便なカスタマイズ方法).
グローバルマイナーモードである MSB (MSBは「mouse select buffer」を表す) はポップ アップされるメニューをデフォルトとは異なるものにします.これは, 通常 C-Down-Mouse-1 に割り当てられている mouse-buffer-menu
を置き換 え,「buffer」メニューも置き換えます.カスタマイズはグループ msb
でできま す.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |