バッファのコピーをファイルに保存する方法は?


9

バッファのコピー(またはスナップショット)をファイルに保存できるようにしたいと思います。動作はに似ていますが、このファイルにアクセスするためのバッファが設定されないwrite-file点が異なります。

ユースケースとして、シェルセッションがあり、すべてをログファイルにすばやく保存したいとします。バッファーの名前は変更しないで(バッファー名に依存する機能が引き続き機能するように)、ファイルを訪問してはなりません(ファイルが誤って上書きされないようにし、emacsを終了するときに警告が表示されないようにします)。

私はこれを行ういくつかの汚い方法を想像することができます、私はそれを自己回答として投稿しますが、マニュアルから読むと、「visited file」システム全体は見た目よりも複雑であり、私はそれをドラフトするのは簡単だと思います間違ったソリューション。これを達成するための隠された組み込みの方法はありますか?

回答:


18

バッファ全体(C-x h)を選択して使用するだけwrite-regionです。


3
write-regionLispから(たとえば、独自のコマンドで)使用している場合は、バッファテキストを選択する必要はありません。ちょうどそれを渡す(point-min)(point-max)、ファイル名と一緒に。
2014

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

選択バッファと実際のM-x write-regionコマンドをありがとう。
Grant Bowman 2017

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

訪問したファイルとバッファ名の両方を処理する必要があるため、必要以上に面倒であるように見え、他のことを忘れていないことを確認することはできません。

新しいバッファーにバッファーテキストをコピーし、そのバッファーを保存して強制終了することを含む他の解決策はおそらくより適切に機能しますが、大きなバッファーのパフォーマンスの問題が心配になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.