回答:
同じバッファの複数の場所を表示および編集するには。そのため、長いバッファをスクロールする必要はなく、ウィンドウを表示領域に切り替えるだけです。クローンされた各バッファには、異なるマークリング、ナローイング、その他のバッファプロパティもあります。間接バッファを使用せずに同じバッファの別のウィンドウを作成すると、すべてが共有され、異なる場所を表示および編集する以外の高度な機能を実行できなくなります。たとえば、間接バッファを使用すると、すべてのコードブロックを折りたたみ、元のバッファに影響を与えずに「タグツリー」を効果的に作成できます。ウィンドウを使用すると、両方のバッファが同じであるため、両方のウィンドウの両方のバッファが折り畳まれます。
要するに、間接バッファーはまったく同じバッファーであり、元のバッファーと同じテキストとファイルを共有するため、クローンバッファーを保存すると、元のファイルも保存されます。
1つのユースケースは、ファイルの一部で異なるメジャーモードを使用することです。
たとえば、特定の要素内にコードを含むxmlドキュメントを使用していたことがあります。まるでxmlのようにドキュメント全体を編集できるようにしたかったのですが、特定の要素にプログラミング言語のすべての主要なモード機能が組み込まれていました。そのため、適切なメジャーモード。
これを行うために使用する私の設定からの関数は次のとおりです。
(defun indirect-region (start end)
"Edit the current region in another indirect buffer.
Prompt for a major mode to activate."
(interactive "r")
(let ((buffer-name (generate-new-buffer-name "*indirect*"))
(mode (intern
(completing-read
"Mode: "
(mapcar (lambda (e)
(list (symbol-name e)))
(apropos-internal "-mode$" 'commandp))
nil t))))
(pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name))
(funcall mode)
(narrow-to-region start end)
(goto-char (point-min))
(shrink-window-if-larger-than-buffer)))
注:これは完璧ではありません。このシナリオで使用するには、フォントロックなどの特別な追加作業が必要です。
間接バッファは、同じバッファの複数のビュー、特に複数の絞り込みを提供します。各ビューは、多くの点で個別のバッファのように機能します。
図書館の解説にnarrow-indirect.el
よると:
間接バッファは、考えている以上に使用できます。たとえば、Diredバッファーの一部から取得したクローンを使用して、ディレクトリリストに便利な(アクティブな)ビューを提供できます。
g
Diredバッファー全体のビューに依存するため、機能しないキー/コマンド(リストの更新など)はわずかです。試してみてください。間接バッファの興味深い新しい用途が見つかるでしょう。