Bearbeiten Sie eine Datei in zwei verschiedenen Puffern in Emacs

28

Ich möchte die Datei foo.barzweimal (oder öfter) in Emacs öffnen , damit ich zwei verschiedene Teile gleichzeitig bearbeiten kann. Ist es möglich? Wahrscheinlich ist die bessere Frage, wie es geht? Gibt es eine Möglichkeit, jede Instanz in einem eigenen Puffer / Frame zu öffnen?

Dror
quelle
Sie können denselben Puffer in verschiedenen Fenstern anzeigen. Ist das nicht eine Lösung für dieses Problem?
Tom

Antworten:

35

Sie können denselben Puffer in mehr als einem Fenster öffnen (das auf verschiedene Frames verteilt werden kann), dies ist jedoch nicht sehr praktisch. Jedes Fenster hat einen eigenen Punkt, aber alle haben die Marke, den Dateimodus, die Verengung und andere Eigenschaften gemeinsam, da abgesehen vom Punkt so ziemlich alle Eigenschaften mit dem Puffer verknüpft sind. Wenn Sie zufällig einen anderen Puffer in einem Fenster aufrufen, verlieren Sie Ihren Platz in der Datei.

Sie können einen indirekten Puffer erstellen, der über einen eigenen Punkt, eine eigene Markierung, Modi usw. verfügt, jedoch denselben Inhalt wie der ursprüngliche Puffer hat (und einen der beiden Puffer speichert, der in dieselbe Datei geschrieben wird). Führen Sie den folgenden Befehl aus, um einen zweiten Puffer zu erstellen, der ein Klon des aktuellen Puffers ist M-x clone-indirect-buffer RET. Um diesen zweiten Puffer in einem anderen Fenster zu öffnen, können Sie Folgendes eingeben C-x 4 c.

Gilles 'SO - hör auf böse zu sein'
quelle
3
Zur Verdeutlichung: C-x 4 cWird ausgeführt clone-indirect-buffer-other-window, wird also verwendet, anstatt clone-indirect-bufferdiesem Befehl nicht zu folgen. Auf meinem System scheinen beide Befehle dasselbe zu tun.
SabreWolfy
Ich wünschte, ich könnte herausfinden, wie ich mich daran erinnern könnte: - /
pedz
@pedz C-x 4ist das Präfix für Windows, cist für den Klon . Sie können andere Bindungen definieren, wenn Sie dies vorziehen. C-x cwird in der Standardkonfiguration nicht verwendet, können Sie dies verwenden, wenn Sie keine Angst haben, versehentlich zu schlagen C-x C-c. Ich definiere C-x 5 cdas Klonen in einem neuen Frame in meiner Init-Datei.
Gilles 'SO- hör auf böse zu sein'
8

Geteilter Bildschirmmodus: wobei ctrl+ xbedeutet, dass Sie die Strg-Taste gedrückt halten und ein x eingeben. Geben Sie dann die folgende Zahl ein.

ctrl+ x2 (horizontale Teilung)

oder

ctrl+ x3 (vertikale Teilung)

Dann können Sie sie unabhängig voneinander in derselben Datei scrollen oder einen anderen Puffer öffnen, wenn Sie dies in einer von ihnen wünschen.

So kehren Sie zu einem einzelnen Ansichtstyp zurück

ctrl+ x1

Wenn Sie möchten, können Sie jeden Bildschirm (Abschnitt) so oft wie nötig teilen. Wählen Sie den Bildschirm aus, den Sie zuerst teilen möchten, und führen Sie dann eine horizontale oder vertikale Teilung durch.

Matt H
quelle
Huch! Sollten Sie keine Tastaturnavigation zwischen Frames einschließen? C-x oLäuft other-windowund durchläuft die sichtbaren "Fenster" in jedem "Frame". (Unter Verwendung der Emacs-Konfiguration, in der Fenster des Fenstermanagers als Frames bezeichnet werden und die separaten Fenster darin als Fenster bezeichnet werden (ich weiß, ich weiß, aber ich bin nicht dafür verantwortlich).)
dmckee
Ich neige dazu, die Maus zu benutzen.
Matt H
1

Emacs ist auf Fenster und nicht auf Frames ausgerichtet. Es ist oft wünschenswert, denselben Puffer in einem anderen Frame zu öffnen, nicht nur in einem anderen Fenster im selben Frame. Aber C-x 5 cist standardmäßig ungebunden. Dieser Code definiert die fehlende clone-indirect-buffer-other-frameFunktion:

(global-set-key [?\C-x ?5 ?c]
             '(lambda(newname display-flag)
               "Like `clone-indirect-buffer-other-window' but display in another frame."
               (interactive
                (progn
                  (if (get major-mode 'no-clone-indirect)
                      (error "Cannot indirectly clone a buffer in %s mode" mode-name))
                  (list (if current-prefix-arg
                            (read-buffer "Name of indirect buffer: " (current-buffer))) t)))
               (save-window-excursion
                 (let ((newbuf (clone-indirect-buffer newname display-flag)))
                   (switch-to-buffer-other-frame newbuf)
                   )
                 )
               )
            )
Andreas Spindler
quelle