Next: , Up: ファイルの保存   [Contents][Index]


19.3.1 ファイルを保存するコマンド

ファイルの保存と書き込みに関するコマンドが、いくつかあります。

C-x C-s

現在のバッファーを、そのファイルに保存します(save-buffer)。

C-x s

任意、またはすべてのバッファーを、それらのファイルに保存します(save-some-buffers)。

M-~

現在のバッファーが変更されたことを忘れます(not-modified)。プレフィクス引数(C-u)を指定すると、現在のバッファーを変更済みとマークします。

C-x C-w

現在のバッファーを、指定したファイル名で保存します(write-file)。

M-x set-visited-file-name

現在のバッファーが保存される場所で、ファイル名を変更します。

M-x rename-visited-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と同様です。

y
SPC

このバッファーを保存し、残りのバッファーについて尋ねます。

n
DEL

このバッファーは保存せずに、残りのバッファーについて尋ねます。

!

このバッファーを保存し、残りのバッファーを尋ねることなくすべて保存します。

q
RET

これ以上の保存をせずに、save-some-buffersを終了します。

.

このバッファーを保存したら、他のバッファーをどうするか尋ねることなく、save-some-buffersを終了します。

C-r

現在尋ねられているバッファーを閲覧します。Viewモードから抜けると、再びsave-some-buffersはどうするか尋ねます。

C-f

save-some-buffersをexitして、カレントで問い合わせ中だったバッファーをvisitします。

d

そのバッファーに対応するファイルとDiffをとり、どのような変更を保存するのか確認できます。これはコマンドdiff-buffer-with-file (ファイルの比較を参照してください)を呼び出します。

C-h

これらのオプションについての、ヘルプメッセージを表示します。

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を参照してください。