次: , 前: Visiting, 上: Files


12.3 ファイルを保存する

Emacsにおいてバッファを保存するとは、 バッファの内容をそのバッファの訪問先のファイルへ書き戻すことです。

C-x C-s
カレントバッファを訪問先のファイルに保存する(save-buffer)。
C-x s
任意のバッファかすべてのバッファをそれぞれの訪問先のファイルに保存する (save-some-buffers)。
M-~
カレントバッファを変更していないことにする(not-modified)。
C-x C-w
カレントバッファを指定したファイルに保存する(write-file)。
M-x set-visited-file-name
カレントバッファを保存するファイルの名前を変更する。

ファイルを保存して変更を恒久的なものとするには、 C-x C-ssave-buffer)と打ちます。 保存を完了するとC-x C-sはつぎのようなメッセージを表示します。

     Wrote /u/rms/gnu/gnu.tasks

選択されているバッファが変更されていなければ (バッファを作って以降、あるいは、最後に保存して以降に、変更されていない)、 保存しても何もならないので実際には保存しません。 かわりに、C-x C-sはつぎのようなメッセージをエコー領域に表示します。

     (No changes need to be saved)

コマンドC-x ssave-some-buffers)は、 変更された任意のバッファやすべてのバッファを保存できるようにします。 各バッファについて、何をするか聞いてきます。 このとき選べる返答は、query-replaceに対するものに似ています。

y
このバッファを保存し、残りのバッファについても質問する。
n
このバッファを保存しないが、残りのバッファについては質問する。
!
このバッファを保存し、 残りのすべてのバッファについても質問せずに保存する。
<RET>
何も保存せずにsave-some-buffersを終了する。
.
このバッファを保存し、他のバッファについては何も聞かずに save-some-buffersを終える。
C-r
質問対象のバッファを閲覧する。 閲覧(view)モードから抜けると、save-some-buffersに戻りふたたび質問する。
C-h
これらのオプションについてのヘルプメッセージを表示する。

Emacsから抜けるキー列C-x C-cは、 save-some-buffersを起動するので、同じ質問をしてきます。

バッファを変更したけれども変更を保存したくないならば、 それを避けるための処置をすべきでしょう。 そうしないと、C-x sC-x C-cを使うたびに、 まちがってバッファを保存してしまいがちです。 1つの方法は、M-~not-modified)と打つことです。 これは、バッファが変更されていることを示すフラグを消します。 こうしておくと、保存コマンドはバッファを保存する必要がないと結論します。 (`~'は「否定」(not)を意味する数学記号としてしばしば使われる。 よってM-~は、メタ付き「否定」。) set-visited-file-name(下記参照)を使って、 別のファイルを訪問しているバッファである旨の印を付けることもできます。 このときファイル名には、重要でない使っていないものを指定します。 あるいは、ファイルからテキストを再度読み直して、 ファイルを訪問したり保存したりした以降のすべての変更を取り消します。 これを復元(reverting)といいます。 See Reverting。 すべての変更がもとに戻るまでアンドゥコマンドC-x uを繰り返し使って、 変更しなかったことにもできます。 しかし、復元のほうが簡単です。

M-x set-visited-file-nameは、 カレントバッファで訪問しているファイルの名前を変更します。 このコマンドは、ミニバッファで新たなファイル名を読み取ります。 そして、訪問先ファイル名を設定し直し、 それに従って(新しい名前が使われていなければ) バッファ名も変更します。 set-visited-file-nameは、 新たに指定した訪問先のファイルへはバッファを保存しません。 あとで保存する場合に備えて、Emacs内部の記録を変更するだけです。 また、バッファには『変更された』旨の印を付け、 C-x C-sがそのバッファを保存しようとするようにします。

別のファイルを訪問しているという旨の印をバッファに付けて、 ただちに保存したい場合には、C-x C-wwrite-file)を使います。 このコマンドは、set-visited-file-nameに続けてC-x C-sを 実行するのと等価です。 ファイルを訪問していないバッファに対してC-x C-sを使うことは、 C-x C-wと同じ効果があります。 つまり、ファイル名を読み取り、 バッファにはそのファイルを訪問しているという印を付け、 バッファをそのファイルに保存します。 ファイルを訪問していないバッファのデフォルトのファイル名は、 バッファのデフォルトディレクトリとバッファ名を組み合わせて作ります。

新しいファイル名がメジャーモードを示唆するものであれば、 C-x C-wは、多くの場合、そのメジャーモードに切り替えます。 コマンドset-visited-file-nameもそのようにします。 See Choosing Modes

Emacsがファイルを保存しようとするときに、 ディスク上の最新版の日付がEmacsが最後に読み書きしたものと合わなかったら、 Emacsはそのことを通知します。 というのは、同時に編集したために引き起こされた問題である可能性があるので、 ユーザーにただちに知らせる必要があるからです。 See Interlocking

変数require-final-newlinenil以外だと、 Emacsはファイルを保存するたびに、 ファイルの末尾に改行がなければ改行を挿入します。 デフォルトはnilです。