Emacsにおいてバッファを保存するとは、 バッファの内容をそのバッファの訪問先のファイルへ書き戻すことです。
save-buffer
)。
save-some-buffers
)。
not-modified
)。
write-file
)。
ファイルを保存して変更を恒久的なものとするには、
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-x s(save-some-buffers
)は、
変更された任意のバッファやすべてのバッファを保存できるようにします。
各バッファについて、何をするか聞いてきます。
このとき選べる返答は、query-replace
に対するものに似ています。
save-some-buffers
を終了する。
save-some-buffers
を終える。
save-some-buffers
に戻りふたたび質問する。
Emacsから抜けるキー列C-x C-cは、
save-some-buffers
を起動するので、同じ質問をしてきます。
バッファを変更したけれども変更を保存したくないならば、
それを避けるための処置をすべきでしょう。
そうしないと、C-x sやC-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-w(write-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-newline
がnil
以外だと、
Emacsはファイルを保存するたびに、
ファイルの末尾に改行がなければ改行を挿入します。
デフォルトはnil
です。