如何将缓冲区的副本保存到文件?


9

我希望能够将缓冲区的副本(或快照)保存到文件中。该行为与相似write-file,不同之处在于它不会设置缓冲区来访问此文件。

对于一个用例,假设您有一个Shell会话,并且想要将其全部快速保存到日志文件中。不应重命名缓冲区(以便依赖缓冲区名称的功能仍然可以使用),并且不应访问文件(以免意外覆盖文件,并且退出emacs时不会发出警告)。

我可以想象有几种肮脏的方法,我将发布一个作为自我回答,但是从手册中读取,整个“访问文件”系统比看起来要复杂得多,我想起草一个错误的解决方案。有没有隐藏的内置方法来实现这一目标?

Answers:


18

只需选择整个缓冲区(C-x h)并使用即可write-region


3
如果您write-region从Lisp 使用(例如,在自己的命令中),则无需选择缓冲区文本。只需将它(point-min)和和(point-max)文件名一起传递即可。
Drew

2
C-x h M-x write-region
JakubNarębski15年

感谢您的选择缓冲区和实际M-x write-region命令。
格兰特·鲍曼

0

肮脏的elisp做我想做的事:

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

这看起来比需要的麻烦多了,因为我们必须照顾被访问的文件和缓冲区名称,并且不能确定我们不会忘记其他任何东西。

其他解决方案包括将缓冲区文本复制到新缓冲区中,然后保存并杀死该缓冲区可能会更好,但是我会担心大型缓冲区的性能问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.