
Emacsを使っていると、「このファイルの一部だけを別のウィンドウで編集したい…」「同じ内容だけど、表示モードを変えて見比べたい…」と思うことはありませんか?
自分は、よくありました。 そんな時に発見して感動した機能が、 Indirect Buffer です!
この記事では、Indirect Bufferの基本的な概念から、使い方、注意点までを解説します。
Indirect Bufferとは?
Indirect Bufferは、Emacsの特殊なバッファの一種で、別のバッファ(ベースバッファ と呼ばれます)の内容を「共有」するものです。 ファイルシステムのシンボリックリンクのようなもの、と言えばイメージしやすいかもしれません。
- 内容の共有: Indirect Bufferは、ベースバッファのテキスト内容(文字だけでなく、文字の色やフォントなどの テキストプロパティ も含む)を完全に共有します。一方での変更は、もう一方に即座に反映されます。
- 独立性: 内容は共有しますが、それ以外の点(バッファ名、カーソル位置、表示モードなど)は、Indirect Bufferとベースバッファでそれぞれ独立して設定できます。
- ファイルとの関連: Indirect Buffer自体はファイルを直接開きませんが、ベースバッファはファイルを開くことができます。Indirect Bufferを保存しようとすると、実際にはベースバッファが保存されます。
Indirect Bufferの作り方
自分が調べた限りでは、 Indirect Bufferを作成する方法は、以下の3つでした。
M-x make-indirect-buffer
:- より汎用的な作成方法です。
- ミニバッファを使って、ベースバッファとIndirect Bufferの名前を指定します。
M-x clone-indirect-buffer
またはdoom emacs でSPC B c
(clone-indirect-buffer-other-window
またはSPC B c
):- 現在開いているバッファをベースバッファとするIndirect Bufferを、素早く作成する方法です。
SPC B c
は、新しいウィンドウでIndirect Bufferを開きます。
- (org-mode内で)
M-x org-tree-to-indirect-buffer
(z n
):- 現在の subtree をIndirect Bufferとして開きます。
M-x doom/widen-indirectly-narrowed-buffer
(z N
)で、元のバッファに戻る
個人的には、1の方法は全く使わず、 2と3をよく使います。 手軽にIndirect Bufferを作れて、とても便利です!
Indirect Bufferの使い道
Indirect Bufferは、以下のような場面で活用できます。
- 大きなファイルの一部だけを編集したい
- 同じ内容に対して、異なる表示設定(メジャーモードなど)を適用したい
- アウトラインの異なるビューを同時に表示したい
- 特定の関数定義にジャンプして、呼び出し元を見ながら修正したい。
まとめ
Indirect Bufferは、Emacsの編集効率を大幅に向上させてくれる強力な機能です。ぜひ活用して、快適なEmacsライフを送りましょう!
さらに詳しく知りたい方は、Indirect Buffers (GNU Emacs Manual) を参照してみてください。