Emacsを使っていると、「このファイルの一部だけを別のウィンドウで編集したい…」「同じ内容だけど、表示モードを変えて見比べたい…」と思うことはありませんか?

自分は、よくありました。 そんな時に発見して感動した機能が、 Indirect Buffer です!

この記事では、Indirect Bufferの基本的な概念から、使い方、注意点までを解説します。

Indirect Bufferとは?

Indirect Bufferは、Emacsの特殊なバッファの一種で、別のバッファ(ベースバッファ と呼ばれます)の内容を「共有」するものです。 ファイルシステムのシンボリックリンクのようなもの、と言えばイメージしやすいかもしれません。

  • 内容の共有: Indirect Bufferは、ベースバッファのテキスト内容(文字だけでなく、文字の色やフォントなどの テキストプロパティ も含む)を完全に共有します。一方での変更は、もう一方に即座に反映されます。
  • 独立性: 内容は共有しますが、それ以外の点(バッファ名、カーソル位置、表示モードなど)は、Indirect Bufferとベースバッファでそれぞれ独立して設定できます。
  • ファイルとの関連: Indirect Buffer自体はファイルを直接開きませんが、ベースバッファはファイルを開くことができます。Indirect Bufferを保存しようとすると、実際にはベースバッファが保存されます。

Indirect Bufferの作り方

自分が調べた限りでは、 Indirect Bufferを作成する方法は、以下の3つでした。

  1. M-x make-indirect-buffer:
    • より汎用的な作成方法です。
    • ミニバッファを使って、ベースバッファとIndirect Bufferの名前を指定します。
  2. 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を開きます。
  3. (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) を参照してみてください。