:Vitalize を複数回実行すると空ファイルができる

タイトルのままですが,

 :Vitalize .
 :Vitalize .

とやると, カレントディレクトリに 1 という名前の空ファイルができる. なんぞや.
ソース眺めたけど理解できず..

謎だと言われた.

linger で謎だと言われてしまったので調べてみました. vim script のデバッグ方法はしらないので printf デバッグで.

" rmdir recursively.
function! s:rmdir(path, ...)
  let flags = a:0 ? a:1 : ''
  if exists("*rmdir")
    return call('rmdir', [a:path] + a:000)
  elseif has("unix")
    let option = ''
    let option .= flags =~ 'f' ? ' -f' : ''
    let option .= flags =~ 'r' ? ' -r' : ''
    let ret = system("/bin/rm" . option . ' ' . shellescape(a:path) . ' 2>&1')   " <=== ここ

空ファイルができる原因はここだった.

  • csh 系を使っているから駄目なのかと思ったけど, bash でも同じ結果
  • こんな感じでコマンド実行しても空ファイルができるのでここが原因なのは確定
:call system("/bin/rm -f -r '/tmp//autoload/vital' 2>&1") 
  • これだと空ファイルできない
:call system("/bin/rm -f -r '/tmp//autoload/vital'") 
  • 当然、bシェルで以下のようにしても空ファイルはできない
bash> /bin/rm -f -r /tmp/autoload/vital.vim 2>&1
  • cシェルだと空ファイルができる
csh> /bin/rm -f -r /tmp/autoload/vital.vim 2>&1
  • あとは助けてください.