Omakeの自動継続ビルドしようとしたらvimでハマった

sphinx専用エディタとかないかなーってつぶやいたらOmakeを薦められた。
世の中便利なものがあるんだねーほえーとか思いながらOmakeをビルドして
自動makeいざ尋常にって勝負したら動いてくれないわけ。

いろいろやってもだめで悩んだ挙句ファイル汚くしたんで一旦戻そうと思って
svn revert * ってやったら動いたわけですよ。意味がわからんし。

そこでいろいろ試してみることに。
まずemacs使ってやった
なんだと。。。動くだと。。。
emacsにできてvimに(ry

次にvim -u NONE hoge.rst してみる。
vimをデフォルトの状態で起動したわけです。
なんだと。。。動くだと。。。

で、犯人は/Users/yuito/.vimrc or /Users/yuito/.vim/* に決定

で、ここからが本題です。

vimのhelpから引用

options - vimdoc-ja

'backupcopy' 'bkc' 文字列 (UnixでのViの既定値: "yes" 、それ以外: "auto")
グローバル
{Vi にはない}
ファイルの書き込みをしてバックアップが作られるとき、その方法をこのオプ
ションで指定する。このオプションはコンマで区切られた単語のリストである。

主な値は次の通り:
"yes" 先にファイルのコピーを作ってバックアップにして、更新した内容は
元のファイルに上書きする
"no" 先に元のファイルをリネームしてバックアップにして、更新した内容
は新しいファイルに書き出す
"auto" どちらか適切な方を選ぶ

次の値を上のどれか1つと組み合わせることができる:
"breaksymlink"は書き込み時に常にシンボリックリンクを切る。
"breakhardlink"は書き込み時に常にハードリンクを切る。

backupとwritebackupの関係

editing - vimdoc-ja

'backup' 'writebackup' 動作
off off バックアップは作られない
off on カレントファイルをバックアップし、後で消去する (既定)
on off 古いバックアップを消去し、カレントファイルをバックアッ
プする
on on 古いバックアップを消去し、カレントファイルをバックアッ
プする

簡単にいうとbackupを作成するときは元ファイルが更新されときと
元ファイルをバックアップにして新しいファイルに更新が書き出されるときがある。

しかし、こいつに関係しそうなオプションが沢山あってわけわかめなので
3つのオプションの組み合わせでどんな挙動をするのかの検証をしてみた。

基本的にはbackupはとらないので

set nobackup

は設定しておきます

  • その1
set writebackup
set backupcopy=auto
 *** omake error:
   File OMakefile: line 18, characters 1-36
   rule failed to build target: source/index.rst

対象ファイルがなくなったって言われる

  • その2
set writebackup
set backupcopy=yes

問題なし

  • その3
set writebackup
set backupcopy=no

問題なし

  • その4
set nowritebackup
set backupcopy=auto or yes or no

:quitのタイミングでbuildが走る


とりあえずbackupcopy=autoはやめましょうということで。