うっかりファイルの保存を忘れていたために、OSやアプリケーショ ンが突然落ちて何時間もの作業を失ったという経験のある人は多い。 うっかりと書いたが、これはうっかりしていた人間が悪いというよ り、作業内容を失ってしまう計算機の方が悪い話である。
こうした「ファイルの保存し忘れ問題」に備える現実的な対策は、 ファイルの保存をこまめに行う、という方法である。実際、多くの 人がこれを行っている。なんだかおかしな話だ。
Emacs にはバックアップを自動保存する機能が備わっているが、
- いざというときに復元の仕方がよくわからない。
M-x recove-file して復元するファイル名を指定する。 バックアップファイルが残っているときにファイルを開くと M-x recover-file せよ、と説明がでるけど、 再度ファイル名を指定し直さないといけないのは不便 (このととき RET を押だけでもいいけど、知らなければ気づかない) - 自動バックアップは、しばらく放置するか、あるいは、ある程度キーボードを叩くかしないと作動しない。
標準では auto-save-timeout で設定された 30秒経過後、あるいは auto-save-interval で設定された 300キーイベント発生後に作動する - 自動バックアップファイルの文字コードは変
#foo# のような名前で保存される自動バックアップファイルは emacs-mule という文字コードで保存されているので、 そのまま開いても読めない。 がんばって開くなら C-x RET c emacs-mule RET C-x C-f #foo#
といった問題があり、あまり信用できない。そこで、僕は 以前 からファイルを自動で保存するように Emacs の設定を行っている。 Emacs でファイルの自動設定を行うには、 山岡克美氏作 (に筆者がコードを加えた) の auto-save-buffers.el を、適切なディレクトリ (M-x describe-variable load-path で表示されるディレクトリのう ち site-lisp という文字列を含むディレクトリ。たとえば /usr/share/emacs/site-lisp。) にコピーし、 ~/.emacs に次の設定を加えればよい。
(require 'auto-save-buffers) (run-with-idle-timer 0.5 t 'auto-save-buffers)
上のように設定を加えると、キー操作が 0.5 秒ないときに更新の あったファイルがすべて自動的に保存されるようになる。この設定 を行ってから 2年以上の間、C-x C-s をまったく打たなくなった。
しかし、auto-save-buffers はたいへん便利であると主張しても、 大方の人は「今のままでいいや」 「まちがって修正してしまったのが、勝手に保存されるほうが嫌」 などと理由を挙げて、なかなか納得してくれない。 Emacsのマニュアル を見ても、同じようなことが書かれている。
自動セーブは通常は読み込んだファイル名でのセーブは行ないませ ん.これは予定の半分しか変更していないような中途半端なプログ ラムをセーブするのは望ましくないからです.その代わり,自動セー ブは自動セーブファイルと呼ばれる別のファイルに行なわれ,読み 込んだファイルは,陽にセーブした(C-x C-sなどで)場合のみ変更 されます.
この考え方は CVS などのバージョン管理システムが広く使われる ようになった現在では古くなっていると思う。きりのいいところで ファイルに保存するのではなく、きりのいいところでバージョン管 理システムに保存すればいい。
実際のところ、僕の場合は、auto-save-buffers を設定してから困っ たことはほとんどない。その反対に以前は、ファイルが自動保存さ れないために、編集内容を失ったり、コードは修正したものの保存 を忘れて「なんでバグが直らないんだ!」と混乱したりと、困った ことは何度もあった。誰もが auto-save-buffers に向いていると は言わないけど、興味のある人は試してもらえるとうれしい。これ に慣れると「ファイルの保存」を手動で行うなんてばかばかしいと 気づくはずである。
関連情報
- Unix Magazine連載: 横着プログラミング最終回
実は同じネタはすでに Unix Magazine の記事の中で紹介している。 このページは、auto-save-buffersをより広く紹介するために作成した。 - Vim 6でファイルの自動保存
本ページで紹介した自動保存と同様の仕組みを Vim 6 で実現する方法を解説している。 - Vim で、ファイルの切り替 え時や C-z によるサスペンド時などに自動でファイルを保存する には ~/.vimrc に「set autowrite」という設定を加える。 (Masahiro Satoさん情報さんくす)
- xyzzy 用の auto-save-buffers の紹介ページ
xyzzy用のものも auto-save-buffers もあるそうな。 - Palm のメモ帳や 紙 では 「ファイルの保存」を自動にするだけではなく、 「ファイル名」という概念までなくしている。
- 『ヒューメイン・インタフェース』
使いやすいソフトウェアの条件を分析したこの本では、 「ファイル名」や「明示的な保存」をユーザに 意識させないことが重要であると述べられている。 - zsh で履歴の自動保存 かつ逐次保存するには次のように設定を行う。
HISTFILE=$HOME/.zsh-history # 履歴をファイルに保存する HISTSIZE=100000 # メモリ内の履歴の数 SAVEHIST=100000 # 保存される履歴の数 setopt extended_history # 履歴ファイルに時刻を記録 setopt share_history # 履歴ファイルを逐次保存
更新履歴
- 2004-03-25: auto-save-buffers の on/off をトグルで切り替える関数 auto-save-buffers-toggle を追加した。
- 2004-03-23: auto-save-buffers 関数に include/exclude 用の引数を渡せるようにコードを修正した。
- 2004-02-20: Makefile の Suspicious line XXX. Save anyway を抑制するコードを追加した。
- 2003-07-16: ページを公開。