git-gutter.elを書いてみました
ST2の中でGitDiffを視覚化するGitGutterが死ぬほど便利だった - mizchi log
という記事を見て、作ってみました。上記のサイトであるように
"git diff"を視覚化するものです。
例
以下のようなコミット済みのファイルがあったとします。
#!/usr/bin/env ruby # -*- coding:utf-8 -*- def orig_func # I'm orig func end def foo puts "hello foo" end
それを以下のように変更します。
#!/usr/bin/env ruby # -*- coding:utf-8 -*- def orig_func # I'm orig func end def added_func # I'm added func end def foo puts "hello foo" end
そして "M-x git-gutter"と実行すると以下のようになります。
どの部分を修正したかが視覚的に確認できます。
設定例
定期的にか、保存時ごとに git-gutterを実行するようにすると
良いでしょうか
(require 'git-gutter) (add-hook 'after-save-hook (lambda () (if (zerop (call-process-shell-command "git rev-parse --show-toplevel")) (git-gutter))))
問題点
diffの解析方法はオリジナルと同じにしているんですが、ある同一行の修正の
近くに新規の追加があるといい感じに表示されません。先ほどの例で不自然な
改行がありますが、それを削除すると以下のようになってしまいます。
このあたりをもっとよくするとかなりいい感じになりそうです。
制限
linum-modeの実装と同じ方法を用いているので、現状 linum-modeと
併用できません。それを回避するために fringeを使った方法を現在
検討しています。冬休みに余裕があったら試してみるというところ
でしょうか。
おわりに
結構どんな感じを修正したかというのの確認に "git diff"を使うことが
多かったので、もっと diffの解析がよくなれば重宝しそうですね。
本家の修正を見つつ、改善できたらと思います。