Wenn Sie einige Informationen in einen anderen Puffer kopieren und von da an die Puffer unabhängig voneinander entwickeln möchten, können Sie genau das tun .
Wenn Sie jedoch möchten, dass der andere Puffer den ursprünglichen Inhalt in Echtzeit widerspiegelt, stellt Emacs diesen indirekte Puffer zur Verfügung . Ein indirekter Puffer ist ein weiterer Puffer, der den gleichen Inhalt wie das Original hat (Änderungen in einem Puffer werden im anderen Puffer wiedergegeben), jedoch unterschiedliche Einstellungen: ein anderer Hauptmodus, verschiedene Nebenmodi, verschiedene lokale Variablen, ein anderer Punkt, verschiedene Markierungen , eine andere Verengung usw.
So können Sie einen Teil eines Puffers in einem anderen Hauptmodus anzeigen, während Sie Änderungen im ursprünglichen Puffer verfolgen und Änderungen am ursprünglichen Puffer wiedergeben. Machen Sie zuerst einen indirekten Puffer mit M-x clone-indirect buffer
; es gibt auch clone-indirect-buffer-other-window
was gebunden ist C-x 4 c
( C-x 4
Fensterpräfix und c
für Klon ). In dem geklonten Puffer, verengt , um die gewünschte Region: Wählen Sie den interessanten Teil und Lauf C-x n n
( narrow-to-region
). Ändern Sie den Hauptmodus wie gewünscht.
Sie können dies mit einem Befehl wie diesem für die interaktive Verwendung automatisieren:
(defun edit-region-in-foo-mode (beg end)
(interactive "@r")
(let ((new-buffer (clone-indirect-buffer nil t)))
(narrow-to-region beg end)
(foo-mode)))
Zur Programmierung verwenden:
(defmacro with-indirect-buffer-in-foo-mode (beg end &rest body)
`(with-current-buffer (clone-indirect-buffer nil nil)
(narrow-to-region beg end)
(foo-mode)
(unwind-protect
,body
(kill-buffer (current-buffer)))))