Vim には、編集中のファイルを自動でバックアップするための機能が付いています(デフォルトではバックアップ機能 Off になっています)。
バックアップを有効に設定した状態で、例えば、sample.txt
というファイルを保存すると、同じディレクトリに sample.txt~
というバックアップファイルが生成されます。
バックアップの On/Off を切り替えるには以下のようにします。
:set backup "バックアップファイルを生成する
:set nobackup "バックアップファイルを生成しない(デフォルト)
現在の設定は、:set backup?
で確認することができます。
バックアップファイルは、デフォルトでは編集中のファイルと同じディレクトリに作成されますが、このディレクトリは自由に変更することができます。
バックアップファイルを保存するディレクトリの設定は、backupdir
オプションで行います。
ディレクトリ候補をカンマ (,
) で区切って複数指定することができます。
:set backupdir=.,~/tmp,~/ "デフォルトの設定(カレントディレクトリに作られる)
:set backupdir=~/temp/backup/
:set backupdir=D:/y/backup/vim,C:/tmp,C:/temp
backup
オプションを設定してあっても、この backupdir
が指定されていないとバックアップファイルは生成されません。
backupdir
には、存在するディレクトリを指定しておく必要があります。
存在しないディレクトリを指定すると、ファイルを保存したときに、「E510: バックアップファイルを作れません」というエラーが発生します。
backupdir
をカレントディレクトリ以外の特定のディレクトリに設定した場合は、同じファイル名のファイルを編集して保存すると、バックアップディレクトリにあるバックアップファイルは上書きされます。
:set backupext=.back
上記のように設定しておくと、sample.txt
のバックアップファイル名は sample.txt~
ではなく、sample.txt.back
になります。
Vim はデフォルトで、ファイルをオープンしたときに、.<ファイル名>.swp
というスワップファイルを同じディレクトリに作成します。
これは、万が一 Vim がクラッシュしたときに備えるためのものです。
正常に Vim を閉じた場合は、スワップファイルは自動的に削除されます。
スワップファイルの機能を On/Off するには以下のようにします。
:set swapfile "スワップファイルを生成する(デフォルト)
:set noswapfile "スワップファイルを生成しない
スワップファイルの生成場所を、任意のディレクトリに変更することができます。
:set directory=.,c:\tmp,c:\temp "デフォルトの設定(カレントディレクトリに作成)
:set directory=~/temp/backup/
:set directory=D:/y/backup/vim,C:/tmp,C:temp
デフォルトの設定では、まずカレントディレクトリ (.
) にスワップファイルを作成しようとします。
既に同じ名前のファイルがあったりして、スワップファイルを作成できない場合は、カンマで区切られた次の候補(上の場合は c:\tmp
)のディレクトリへ保存されます。
デフォルトでは、4 秒おき、あるいは 200 文字タイプするごとにスワップファイルに保存されます。 これらのタイミングを変更するには以下のように設定します。
:set updatetime=30000 "30秒ごとに保存
:set updatecount=500 "500文字タイプするごとに保存
Vim でファイルを保存したときに、同じディレクトリに生成される .<ファイル名>.un~
というファイルは、アンドゥ情報が保存されたファイルです(例えば、sample.txt
というファイルを保存した場合は、.sample.txt.un~
という名前のファイルが作成されます)。
このファイルがあると、次回ファイルを Vim で開いたときにも、前回の編集内容をさかのぼってアンドゥ (Ctrl-U
)、リドゥ (Ctrl-R
) を実行できるようになります。
アンドゥファイルの機能を On/Off するには以下のようにします。
:set undofile "アンドゥファイルを生成する(デフォルト)
:set noundofile "アンドゥファイルを生成しない
アンドゥファイルの生成場所を、任意のディレクトリに変更することができます。
指定方法は backupdir
の指定方法と同様で、ディレクトリ候補をカンマ (,
) で区切って複数指定することができます。
:set undodir=. "デフォルトの設定(カレントディレクトリに作成)
:set undodir=~/temp/vim_undo/,~/temp/,.
複数のディレクトリを指定すると、最初に見つかったディレクトリにアンドゥファイルを保存しようとします。どのディレクトリも見つからない場合は、アンドゥファイルは作成されず、エラーも発生しません。最後にカレントディレクトリ (.
) を指定しておけば、少なくともカレントディレクトリにはアンドゥファイルが作成されることになります。
次回に同じファイルを開いたときには、undodir
に設定されたすべてのディレクトリからアンドゥファイルを検索して、最初に見つかったアンドゥファイルを使用します。
ちなみに、アンドゥファイルの保存先ディレクトリをカレントディレクトリ以外に設定すると、ディレクトリ階層を %
で繋いだファイル名でアンドゥファイルが作成されます(例: Users%maku%sample.txt
)。このあたりの仕様は、バックアップファイルとスワップファイルの仕様とは少々異なりますね。
バックアップファイルやスワップファイル、アンドゥファイルは、デフォルトでは編集中のファイルと同じディレクトリに作成されます。 カレントディレクトリに勝手にファイルが作成されるのが気になる場合は、下記のように保存先のディレクトリを変更しておくとよいでしょう。
""" 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
)。