GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Customize-Save.html ・ emacs-doc.conao3.com

20.3.3 ファイルの保存のカスタマイズ

変数 require-final-newline の値が t の場合、ファイルの保存または書き込み時に、末尾に改行が存在しない限り、自動的に改行が追加されます。値が visit の場合、Emacs はファイルに改行が含まれていない場合、ファイルを開いた直後に末尾に改行を追加します。(これによりバッファが変更済みとしてマークされ、元に戻すことができます。)値が visit-save の場合、Emacs はファイルを開いたときと保存時の両方でこのような改行を追加します。値が nil の場合、Emacs はファイルの末尾をそのままにします。それ以外の nil 以外の値の場合、Emacs は改行を追加するかどうかをユーザーに確認します。デフォルトは nil です。

一部のメジャーモードは、常に改行で終わることが前提となっている特定の種類のファイル向けに設計されています。こうしたメジャーモードでは、変数 require-final-newline に mode-require-final-newline の値を設定しますが、この値はデフォルトで t となっています。後者の変数を設定することで、これらのモードが末尾の改行をどのように処理するかを制御できます。

このオプションが non-nil であり、シンボリックリンク経由でファイルにアクセスしている場合、file-precious-flag の値が non-nil であれば、Emacs はバッファを保存する際にシンボリックリンクを解除し、シンボリックリンクと同じ名前のファイルにバッファを書き込みます(The Emacs Lisp Reference Manual の file-precious-flag を参照)。このような場合に、Emacs にバッファをシンボリックリンクが指すファイルに保存させたい(これによりリンクを保持したい)場合は、変数 file-preserve-symlinks-on-save を t にカスタマイズしてください。

通常、プログラムがファイルを書き込む際、オペレーティングシステムはデータを二次記憶装置に書き込む前に、そのデータをメインメモリに一時的にキャッシュします。これによりパフォーマンスを大幅に向上できますが、キャッシュを書き込む前にシステムの電源が切れた場合にデータが失われるリスクがあるほか、プラットフォームによっては他のプロセスがファイルの変更に即座に気づかないこともあります。

このリスクを軽減するため、Emacsはファイル保存後にfsyncシステムコールを呼び出すことができます。fsyncを使用しても、データ損失や通知の遅延のリスクが解消されるわけではありません。その理由の一つは、多くのシステムがfsyncを適切にサポートしていないことであり、もう一つは、Emacsのファイル保存処理が通常、ディレクトリ更新にも依存しており、たとえfsyncが正常に動作していても、クラッシュ時にその更新が保持されない可能性があるためです。

write-region-inhibit-fsync 変数は、ファイル保存後に Emacs が fsync を呼び出すかどうかを制御します。この変数のデフォルト値は t です。

Emacsは自動保存ファイルを書き出す際にfsyncを一切使用しません。こうしたファイルは、いずれにせよデータが失われる可能性があるためです。