なぜ間接バッファを使用するのですか?


回答:


16

同じバッファの複数の場所を表示および編集するには。そのため、長いバッファをスクロールする必要はなく、ウィンドウを表示領域に切り替えるだけです。クローンされた各バッファには、異なるマークリング、ナローイング、その他のバッファプロパティもあります。間接バッファを使用せずに同じバッファの別のウィンドウを作成すると、すべてが共有され、異なる場所を表示および編集する以外の高度な機能を実行できなくなります。たとえば、間接バッファを使用すると、すべてのコードブロックを折りたたみ、元のバッファに影響を与えずに「タグツリー」を効果的に作成できます。ウィンドウを使用すると、両方のバッファが同じであるため、両方のウィンドウの両方のバッファが折り畳まれます。

要するに、間接バッファーはまったく同じバッファーであり、元のバッファーと同じテキストとファイルを共有するため、クローンバッファーを保存すると、元のファイルも保存されます。


3
間接バッファには利点があることに同意します。ただし、最初のポイントでは、バッファーを間接的にする必要はありません。同じバッファが2つのウィンドウで単に開かれている場合でも、同じバッファの複数の場所を表示および編集できます。しかし、はい、独立した絞り込み、折りたたみなどは、私の意見では間接バッファの強力な機能です。
カウ

5
また、複数のモードで同じバッファーを編集します(間接バッファーをナローイングと組み合わせます)。
マークダウン

複数のウィンドウだけを使用して複数の場所を表示できますが、この状況ではポイントの値が1つしかないため、バッファを切り替えても両方のウィンドウの場所は保持されませんが、1つだけです。
ポリツァ

9

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)))

注:これは完璧ではありません。このシナリオで使用するには、フォントロックなどの特別な追加作業が必要です。


3

間接バッファは、同じバッファの複数のビュー、特に複数の絞り込みを提供します。各ビューは、多くの点で個別のバッファのように機能します。

図書館の解説にnarrow-indirect.elよると:

間接バッファは、考えている以上に使用できます。たとえば、Diredバッファーの一部から取得したクローンを使用して、ディレクトリリストに便利な(アクティブな)ビューを提供できます。gDiredバッファー全体のビューに依存するため、機能しないキー/コマンド(リストの更新など)はわずかです。試してみてください。間接バッファの興味深い新しい用途が見つかるでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.