export EDITOR=vim

と設定していると

$ crontab -e

したときに、vimが起動するが、システムによっては、保存して終了した時

crontab: temp file must be edited in place

というメッセージが表示され、cronが更新されない。

これは、vimが、オリジナルのファイルをリネームして、バックアップファイルを作り、cronが更新されたかどうかのチェックがうまくいかなくて起きるエラーらしい。

:h crontab

で表示されるヘルプの前後を見ると、そのあたりのことが書いてあるのでまとめてみる。

まず、vimにはbackupcopyというオプションがあって、

・yesにすると、オリジナルファイルをコピーして、バックアップファイルを作り、更新は上書きで保存される。

・noにすると、オリジナルファイルをリネームすることでバックアップファイルを作り、更新は新しいファイルが作られて保存される。

・autoにすると、bestな方が実行される。

また、backupskipというオプションがあり、ここで設定されたパターンにマッチしたファイルではバックアップファイルが作られない。 デフォルトでは"/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*"となっている。

crontabの一時ファイルの保存先が/tmpの場合はバックアップファイルが生成されないので、エラーはでないが、/tmpが/home/tmpのシンボリックリンクだったり、macだと/private/tmpに保存されるらしく、このときbackupcopyのオプションがnoないしautoに設定されているとエラーが出るらしい。ちなみにカレントファイルのフルパスは1 Ctrl+gで表示できる。

そこで対処法としては、そもそもbackupしない

[vim]

set nobackup

[/vim]

[vim]

set backupcopy=yes

[/vim]

にするか

set backupskip+=/home/tmp/*,/private/tmp/*

のようにパターンを増やせば良い。

ちなみにbackup, backupcopy, backupskipはglobalでのみ有効なオプション。

追記

backupcopyはlocalで設定できるようになった。

以下のサイトを参考にした。