Warum indirekte Puffer verwenden?

Antworten:

16

Anzeigen und Bearbeiten mehrerer Positionen desselben Puffers. Sie müssen also nicht in einem langen Puffer scrollen, sondern müssen nur das Fenster auf den sichtbaren Bereich umschalten. Jeder geklonte Puffer hat auch einen anderen Markierungsring, eine andere Verengung und andere Puffereigenschaften. Wenn Sie keinen indirekten Puffer verwenden, sondern ein anderes Fenster desselben Puffers erstellen, wird alles gemeinsam genutzt, und Sie können keine weiteren erweiterten Funktionen ausführen, die über das Anzeigen und Bearbeiten verschiedener Speicherorte hinausgehen. Mit einem indirekten Puffer können Sie beispielsweise den gesamten Codeblock falten und effektiv einen "Tag-Baum" erstellen, ohne den ursprünglichen Puffer zu beeinträchtigen. Bei Verwendung eines Fensters werden beide Puffer in beiden Fenstern gefaltet, da beide Puffer gleich sind.

In der Summe ist der indirekte Puffer ein völlig anderer Puffer, der denselben Text und dieselbe Datei in Ihrem ursprünglichen Puffer enthält. Wenn Sie also den geklonten Puffer speichern, wird auch Ihre ursprüngliche Datei gespeichert.

Tu Do
quelle
3
Ich bin damit einverstanden, dass indirekte Puffer Vorteile haben. Für Ihren ersten Punkt müssen die Puffer jedoch nicht indirekt sein. Sie können mehrere Positionen desselben Puffers anzeigen und bearbeiten, auch wenn derselbe Puffer einfach in zwei Fenstern geöffnet wird. Aber ja, unabhängige Verengung, Faltung usw. sind meiner Meinung nach die starken Merkmale eines indirekten Puffers.
Kaushal Modi
5
Bearbeiten Sie denselben Puffer auch mit mehreren Modi (kombinieren Sie indirekten Puffer mit Verengung). Sie können einige Teile eines Puffers mit Markdown-Modi bearbeiten, einen anderen Teil mit Python-Modi, einen anderen Teil mit
Json-
Sie können mehrere Standorte mit mehreren Fenstern allein anzeigen. Da es in dieser Situation jedoch nur einen Punktwert gibt, werden die Standorte in beiden Fenstern durch Pufferwechsel nicht beibehalten, sondern nur in einem.
Politza
9

Ein Anwendungsfall ist die Verwendung eines anderen Hauptmodus für einen Teil einer Datei.

Ich habe zum Beispiel einmal mit XML-Dokumenten mit Code in bestimmten Elementen gearbeitet. Ich wollte in der Lage sein, das gesamte Dokument so zu bearbeiten, als ob es XML wäre, aber dennoch alle wichtigen Modusfunktionen für die Programmiersprache in bestimmten Elementen eingebettet haben. Deshalb habe ich mich auf die Gesamtheit dieser Elemente in einem indirekten Puffer beschränkt, in dem das ausgeführt wird geeigneter Hauptmodus.

Hier ist eine Funktion aus meiner Konfiguration, mit der ich das mache:

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

Hinweis: Dies ist nicht perfekt, Dinge wie die Schriftsperre erfordern besondere zusätzliche Arbeit für die Verwendung in diesem Szenario.

Jordon Biondo
quelle
3

Indirekte Puffer geben Ihnen mehrere Ansichten desselben Puffers, insbesondere mehrere Verengungen, von denen jede in vielerlei Hinsicht wie ein separater Puffer wirkt.

Wie der Kommentar für die Bibliothek narrow-indirect.elsagt:

Sie können indirekte Puffer für mehr als Sie vielleicht denken. Sie können Klone verwenden, die aus Teilen von Dired-Puffern entnommen wurden, um beispielsweise nützliche (aktive) Ansichten in einer Verzeichnisliste anzuzeigen. Es gibt nur wenige Tasten / Befehle (z. B. gzum Aktualisieren der Liste), die nicht funktionieren, da sie von der Ansicht des gesamten Dired-Puffers abhängen. Experimentieren Sie, und Sie werden ohne Zweifel interessante neue Verwendungen für indirekte Puffer finden.

Drew
quelle