まくまくVimノート
バックアップファイル/スワップファイル/アンドゥファイルの設定 (backup, swapfile, undofile)
2008-04-02

バックアップファイルの設定

Vim には、編集中のファイルを自動でバックアップするための機能が付いています(デフォルトではバックアップ機能 Off になっています)。 バックアップを有効に設定した状態で、例えば、sample.txt というファイルを保存すると、同じディレクトリに sample.txt~ というバックアップファイルが生成されます。

バックアップの ON/OFF (backup, nobackup)

バックアップの On/Off を切り替えるには以下のようにします。

:set backup    "バックアップファイルを生成する
:set nobackup  "バックアップファイルを生成しない(デフォルト)

現在の設定は、:set backup? で確認することができます。

バックアップディレクトリの設定 (backupdir)

バックアップファイルは、デフォルトでは編集中のファイルと同じディレクトリに作成されますが、このディレクトリは自由に変更することができます。 バックアップファイルを保存するディレクトリの設定は、backupdir オプションで行います。 ディレクトリ候補をカンマ (,) で区切って複数指定することができます。

バックアップディレクトリの設定例

:set backupdir=.,~/tmp,~/    "デフォルトの設定(カレントディレクトリに作られる)
:set backupdir=~/temp/backup/
:set backupdir=D:/y/backup/vim,C:/tmp,C:/temp

backup オプションを設定してあっても、この backupdir が指定されていないとバックアップファイルは生成されません。 backupdir には、存在するディレクトリを指定しておく必要があります。 存在しないディレクトリを指定すると、ファイルを保存したときに、「E510: バックアップファイルを作れません」というエラーが発生します。

backupdir をカレントディレクトリ以外の特定のディレクトリに設定した場合は、同じファイル名のファイルを編集して保存すると、バックアップディレクトリにあるバックアップファイルは上書きされます。

バックアップファイル名のプレフィックスを変更する (backupext)

:set backupext=.back

上記のように設定しておくと、sample.txt のバックアップファイル名は sample.txt~ ではなく、sample.txt.back になります。

スワップファイルの設定

Vim はデフォルトで、ファイルをオープンしたときに、.<ファイル名>.swp というスワップファイルを同じディレクトリに作成します。 これは、万が一 Vim がクラッシュしたときに備えるためのものです。 正常に Vim を閉じた場合は、スワップファイルは自動的に削除されます。

スワップファイルの ON/OFF (swapfile, noswapfile)

スワップファイルの機能を On/Off するには以下のようにします。

:set swapfile    "スワップファイルを生成する(デフォルト)
:set noswapfile  "スワップファイルを生成しない

スワップファイルを保存するディレクトリの設定 (directory)

スワップファイルの生成場所を、任意のディレクトリに変更することができます。

:set directory=.,c:\tmp,c:\temp    "デフォルトの設定(カレントディレクトリに作成)
:set directory=~/temp/backup/
:set directory=D:/y/backup/vim,C:/tmp,C:temp

デフォルトの設定では、まずカレントディレクトリ (.) にスワップファイルを作成しようとします。 既に同じ名前のファイルがあったりして、スワップファイルを作成できない場合は、カンマで区切られた次の候補(上の場合は c:\tmp)のディレクトリへ保存されます。

スワップファイルの保存タイミングを変更する (updatetime, updatecount)

デフォルトでは、4 秒おき、あるいは 200 文字タイプするごとにスワップファイルに保存されます。 これらのタイミングを変更するには以下のように設定します。

:set updatetime=30000  "30秒ごとに保存
:set updatecount=500   "500文字タイプするごとに保存

アンドゥファイルの設定

Vim でファイルを保存したときに、同じディレクトリに生成される .<ファイル名>.un~ というファイルは、アンドゥ情報が保存されたファイルです(例えば、sample.txt というファイルを保存した場合は、.sample.txt.un~ という名前のファイルが作成されます)。 このファイルがあると、次回ファイルを Vim で開いたときにも、前回の編集内容をさかのぼってアンドゥ (Ctrl-U)、リドゥ (Ctrl-R) を実行できるようになります。

アンドゥファイルの ON/OFF (undofile, noundofile)

アンドゥファイルの機能を On/Off するには以下のようにします。

:set undofile    "アンドゥファイルを生成する(デフォルト)
:set noundofile  "アンドゥファイルを生成しない

アンドゥファイルを保存するディレクトリの設定 (undodir)

アンドゥファイルの生成場所を、任意のディレクトリに変更することができます。 指定方法は backupdir の指定方法と同様で、ディレクトリ候補をカンマ (,) で区切って複数指定することができます。

:set undodir=.    "デフォルトの設定(カレントディレクトリに作成)
:set undodir=~/temp/vim_undo/,~/temp/,.

複数のディレクトリを指定すると、最初に見つかったディレクトリにアンドゥファイルを保存しようとします。どのディレクトリも見つからない場合は、アンドゥファイルは作成されず、エラーも発生しません。最後にカレントディレクトリ (.) を指定しておけば、少なくともカレントディレクトリにはアンドゥファイルが作成されることになります。

次回に同じファイルを開いたときには、undodir に設定されたすべてのディレクトリからアンドゥファイルを検索して、最初に見つかったアンドゥファイルを使用します。

ちなみに、アンドゥファイルの保存先ディレクトリをカレントディレクトリ以外に設定すると、ディレクトリ階層を % で繋いだファイル名でアンドゥファイルが作成されます(例: Users%maku%sample.txt)。このあたりの仕様は、バックアップファイルとスワップファイルの仕様とは少々異なりますね。

まとめ

バックアップファイルやスワップファイル、アンドゥファイルは、デフォルトでは編集中のファイルと同じディレクトリに作成されます。 カレントディレクトリに勝手にファイルが作成されるのが気になる場合は、下記のように保存先のディレクトリを変更しておくとよいでしょう。

~/.vimrc

""" Backup file settings (file.txt~)
set backup
set backupdir=~/temp/vim_backup

""" Swap file settings (.file.txt.swp)
set swapfile
set directory=~/temp/vim_backup

""" Undo file settings (.file.txt.un~)
set undofile
set undodir=~/temp/vim_backup

保存先のディレクトリは、あらかじめ作成しておく必要があることに注意してください。

個人的には、ファイルを再オープンしたときに前回の編集を遡ってまでアンドゥできてしまうと逆に怖いので、アンドゥファイルだけは無効にしています (set noundofile)。

参考

2008-04-02