もっとVimでdiffる

Vimからdiffを使うときはいつも:Gdiffでそれ以外はWinMergeを使ってしました。
(個人的にはVimからdiffを呼ぶのが面倒なので)
が、ふとMacでdiffをしようと思ったらなんとMacにはWinMergeが無い...orz

こうなったらVimのdiffを使いやすくするしかない!
というわけでこんなUniteのactionを作ってみました。

let diff_action = {
      \   'description' : 'diff',
      \   'is_selectable' : 1,
      \ }

function! diff_action.func(candidates)
  if len(a:candidates) == 1
    " カレントバッファとdiffを取る
    execute 'vert diffsplit ' . a:candidates[0].action__path
  elseif len(a:candidates) == 2
    " 選択されたファイルとdiffを取る
    execute 'tabnew ' . a:candidates[0].action__path
    execute 'vert diffsplit ' . a:candidates[1].action__path
  else
    " 3-way以上は非対応
    echo 'too many candidates!'
  endif
endfunction

call unite#custom_action('file', 'diff', diff_action)

unlet diff_action

これをvimrcに追加するとUniteやVimFilerからdiffが使えるようになります。

きっとこれでVimからdiffを使う頻度が上がるはず。
そしてもうWinMergeが無くても困ることはないでしょう。