ファイルの保存と書き込みに関するコマンドが、いくつかあります。
現在のバッファーを、そのファイルに保存します(save-buffer
)。
任意、またはすべてのバッファーを、それらのファイルに保存します(save-some-buffers
)。
現在のバッファーが変更されたことを忘れます(not-modified
)。プレフィクス引数(C-u)を指定すると、現在のバッファーを変更済みとマークします。
現在のバッファーを、指定したファイル名で保存します(write-file
)。
現在のバッファーが保存される場所で、ファイル名を変更します。
M-x set-visited-file-nameと同様ですが、(もしあれば)そのバッファーがvisitしているファイルのリネームも行います。
ファイルを保存して変更を永続化させたいときは、C-x C-s
(save-buffer
)とタイプします。保存が完了すると、C-x C-sは以下のようなメッセージを表示します:
Wrote /u/rms/gnu/gnu.tasks
現在のバッファーが変更されていない(新規作成されたとき、または最後に変更されたときから変更していない)場合、保存しても意味がないので実際の保存は行われません。かわりにC-x C-sは、エコーエリアに以下のようなメッセージを表示します:
(No changes need to be saved)
C-u C-x C-sのようにプレフィクス引数を指定すると、Emacsはそのバッファーを次回の保存が行われるときバックアップするようマークします。バックアップファイルを参照してください。
コマンドC-x s
(save-some-buffers
)は、任意、またはすべての変更されたバッファーの保存を提案します。これはバッファーごとに何を行うか尋ねます。使用できる応答は、query-replace
と同様です。
このバッファーを保存し、残りのバッファーについて尋ねます。
このバッファーは保存せずに、残りのバッファーについて尋ねます。
このバッファーを保存し、残りのバッファーを尋ねることなくすべて保存します。
これ以上の保存をせずに、save-some-buffers
を終了します。
このバッファーを保存したら、他のバッファーをどうするか尋ねることなく、save-some-buffers
を終了します。
現在尋ねられているバッファーを閲覧します。Viewモードから抜けると、再びsave-some-buffers
はどうするか尋ねます。
save-some-buffers
をexitして、カレントで問い合わせ中だったバッファーをvisitします。
そのバッファーに対応するファイルとDiffをとり、どのような変更を保存するのか確認できます。これはコマンドdiff-buffer-with-file
(ファイルの比較を参照してください)を呼び出します。
これらのオプションについての、ヘルプメッセージを表示します。
save-some-buffers-default-predicate
の値をカスタマイズして、どのバッファーにたいしてEmacsが問い合わせるか制御できます。
Emacsを終了するキーシーケンスC-x C-cは、save-some-buffers
を呼び出すので、同じ質問をします。
バッファーを変更したが変更を保存したくないとき、保存されるのを防ぐためにできることがいくつかあります(それ以外のC-x
sまたはC-x C-cで間違って保存してしまうのはあなたの責任です)。まずできることは、M-~
(not-modified
)とタイプすることで、これはバッファーが変更されているというマークをクリアーします。これを行うと、保存コマンドに、バッファーが保存を必要しないと信じこませることができます(‘~’は数学のシンボルで、“not(否定)”として使われることがあります。したがってM-~はメタと“not”になります。)。かわりにファイルからテキストを読み込むことにより、ファイルをvisitまたは保存された後に行った、すべての変更を取り消すことができます。これはリバート(reverting:
復元)と呼ばれます。バッファーのリバートを参照してください(undoコマンドC-x
uを繰り返すことにより、変更がすべての変更を取り消すこともできますが、リバートの方が簡単です)。
M-x
set-visited-file-nameは、現在のバッファーがvisitしているファイルの名前を変更します。このコマンドはミニバッファーを使って、新しいファイル名を読み取ります。その後に、そのバッファーがそのファイル名のファイルをvisitしているとマークし、バッファー名も合わせて変更します。set-visited-file-name
は、新しくvisitするファイルへの保存はしません。これは後で保存するときのために、Emacs内のレコードを変更するだけです。これはバッファーを変更されている(modified)とマークするので、そのバッファーでの将来のC-x
C-sで、保存が行われます。
バッファーにたいして、違うファイルをvisitしているとマークしてすぐに保存したい場合は、C-x C-w
(write-file
)を使います。このコマンドは、set-visited-file-name
の後すぐにC-x
C-sをするのと同じですが、C-x
C-wはファイルが存在するとき確認を求める点が異なります。ファイルをvisitしていないバッファーでのC-x C-sは、C-x
C-wと同じ効果をもちます。したがってファイル名を読み取り、バッファーがそのファイルをvisitしているとマークした後、バッファー内容をそのファイルに保存します。ファイルをvisitしていないバッファーのデフォルトファイル名は、バッファー名と、バッファーのデフォルトディレクトリーから合成されます(ファイルの名前を参照してください)。
新しいファイル名が何らかのメジャーモードに関連する場合、大抵はC-x
C-wによりそのメジャーモードへの切り替えが行われます。コマンドset-visited-file-name
もこれを行います。ファイルのモードを選択するを参照してください。
ファイルをvisitせずに別のファイルにカレントバッファーを保存したければ、mark-whole-buffer
(C-x
h)の後にM-x write-region (その他のファイル操作を参照)を使用してください。
Emacsがファイルを保存する際、ディスクの最新バージョンのファイル日付を確認して、それがEmacsが最後に読み込み、または書き込みしたときと異なる場合、Emacsはその事実をユーザーに知らせます。なぜならそれはおそらく同時編集による問題を示しており、それをすぐにユーザーに知らせる必要があるからです。Simultaneous Editingを参照してください。