Wie speichere ich eine Kopie eines Puffers in einer Datei?


9

Ich möchte eine Kopie (oder einen Schnappschuss) eines Puffers in einer Datei speichern können. Das Verhalten wäre ähnlich write-file, außer dass der Puffer für den Besuch dieser Datei nicht festgelegt wird.

Stellen Sie sich für einen Anwendungsfall vor, Sie haben eine Shell-Sitzung und möchten alles schnell in einer Protokolldatei speichern. Der Puffer sollte nicht umbenannt werden (damit Funktionen, die auf dem Puffernamen basieren, weiterhin funktionieren) und keine Datei besuchen (damit die Datei nicht versehentlich überschrieben wird und beim Beenden von Emacs keine Warnung angezeigt wird).

Ich kann mir ein paar schmutzige Wege vorstellen, dies zu tun. Ich werde einen als Selbstantwort posten, aber wenn ich aus dem Handbuch lese, ist das gesamte "besuchte Datei" -System komplizierter als es aussieht, und ich denke, es ist einfach, einen zu entwerfen falsche Lösung. Gibt es einen versteckten, eingebauten Weg, um dies zu erreichen?

Antworten:


18

Wählen Sie einfach den gesamten Puffer ( C-x h) und verwenden Sie write-region.


3
Sie müssen den Puffertext nicht auswählen, wenn Sie write-regionLisp verwenden (z. B. in Ihrem eigenen Befehl). Übergeben Sie es einfach (point-min)und (point-max)zusammen mit dem Dateinamen.
Drew

2
C-x h M-x write-region
Jakub Narębski

Vielen Dank für den Auswahlpuffer und den eigentlichen M-x write-regionBefehl.
Grant Bowman

0

Schmutzig elispmachen was ich machen will:

(defun tv/copy-buffer-to-file (filename)
  (interactive "sFile to write? ")
  (let ((bufname (buffer-name)))
    (set-visited-file-name filename)
    (save-buffer)
    (set-visited-file-name nil)
    (rename-buffer bufname)))

Dies scheint viel mühsamer zu sein, als es nötig wäre, da wir uns sowohl um die besuchte Datei als auch um den Puffernamen kümmern müssen und nicht sicher sein können, dass wir nichts anderes vergessen haben.

Andere Lösungen, bei denen der Puffertext in einen neuen Puffer kopiert und dann gespeichert und beendet wird, funktionieren wahrscheinlich besser, aber ich würde mir dann Sorgen über Leistungsprobleme mit großen Puffern machen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.