git-gutter.elは Sublime Textの GitGutterの Emacs版です. 導入することで前回の変更点からの差分を視覚的に確認することができるようになります.
現在対象は gitレポジトリ下で管理されているファイルのみです (Mercurialについては現在対応を検討しています)
git-gutter.el
は MELPA, marmaladeに登録されているので, Emacs24以降を利用している場合は,
package.elを使って簡単にインストールすることができます. また el-getのレシピとしても登録されているので,
レシピを自分で書く必要もありません.
M-x package-refresh-contents
M-x package-install git-gutter
以下は package.elもしくは el-getでインストールした場合を想定しています.
手動でインストールした場合は, load-path
の設定及び git-gutter.el
のロードを行う必要があります.
git-gutter.el
が提供するグローバルマイナーモード(global-git-gutter-mode
)を有効にすると,
git管理下のファイルについてすべて git-gutter-mode
を有効にします. git管理下のファイルに
ついて常時利用するという場合は, グローバルマイナーモードを有効にするのが良いでしょう.
グローバルマイナーモードを有効にするには, 設定ファイルに以下を追加します.
(global-git-gutter-mode t)
あまりないと思いますが, 特定のモードで git-gutter
を有効にしたい場合は,
該当するモードの hookに git-gutter-mode
を追加してください.
(add-hook 'ruby-mode-hook 'git-gutter-mode)
(add-hook 'python-mode-hook 'git-gutter-mode)
差分情報の表示が更新されるのは以下のタイミングです.
- ファイル保存時
- buffer revert時
- major mode切替時
- バッファ切替時
定期的に更新したい方は, auto-save-buffersなどと併用すると良いでしょう. またバッファ切替時に更新されるので, magitと相性が良いです. magitの操作を 行った後, 元のバッファに戻ることで差分情報が更新されます.
差分情報を更新します. git-gutter-mode
を有効にしている場合は不要です.
次の差分があるブロックに移動します. 現在が最後の差分ブロックの場合は, 先頭の差分ブロックに移動します. prefix argumentを使うことで, 指定した数だけ移動します.
前の差分ブロックに移動します. git-gutter:next-hunk
の逆方向版です.
現在の差分ブロックの内容をポップアップ(pop-to-buffer
)します. 元のコードと現在のコードの
差を見たい場合に利用します.
git-gutter:popup-diff
でバッファをポップアップした状態で,
git-gutter:next-hunk
, git-gutter:previous-hunk
を実行するとポップアップされた
バッファの内容も連動して更新されます.
現在の差分ブロックの修正を更新前の状態に戻します. 間違って戻してしまった場合は undoを利用することで取り消せます.
差分情報の表示/非表示を切り替えます.
概要 | 記号 | face |
---|---|---|
追加 | git-gutter:added-sign(Default '+') | git-gutter:added |
削除 | git-gutter:deleted-sign(Default '-') | git-gutter:deletedline |
変更 | git-gutter:modified-sign(Default '=') | git-gutter:modified |
以下はその設定例となります. 文字数に特に制限はありません.
(setq git-gutter:added-sign "++")
(setq git-gutter:deleted-sign-sign "--")
(setq git-gutter:modified-sign " ") ;; 空白 2つ
(set-face-foreground 'git-gutter:added "green")
(set-face-foreground 'git-gutter:deleted "yellow")
(set-face-background 'git-gutter:modified "magenta")
全角幅文字を記号として使う場合, 明示的に幅を指定することを推奨します. 一部全角幅の文字は Emacsの持つ関数で計算できるのですが, 多くの文字では 計算を誤ってしまうためです.
(setq git-gutter:window-width 2)
(setq git-gutter:modified-sign "⇔")
(setq git-gutter:added-sign "⇒")
(setq git-gutter:deleted-sign "⇐")
git-gutter.el
は linum-modeと同じ方法を使って差分情報を表示しているので,
linum-mode
と併用することが現状出来ません. linum-mode
と併用したい, と
考えられている方には git-gutter-fringeがあります.
git-gutter-fringe.el
はフリンジに表示する以外は git-gutter.el
と同様です.
カスタマイズ性がやや低いですが, linum-mode
とは干渉しないので, 併用して
利用することができます.
こちらまでお願いします.