Skip to content

Instantly share code, notes, and snippets.

@syohex
Created March 10, 2013 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syohex/5128767 to your computer and use it in GitHub Desktop.
Save syohex/5128767 to your computer and use it in GitHub Desktop.
git-gutter.elの紹介文

git-gutter.el

概要

git-gutter.elは Sublime Textの GitGutterの Emacs版です. 導入することで前回の変更点からの差分を視覚的に確認することができるようになります.

現在対象は gitレポジトリ下で管理されているファイルのみです (Mercurialについては現在対応を検討しています)

スクリーンショット

screenshot1

インストール方法

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のロードを行う必要があります.

global-minor-mode

git-gutter.elが提供するグローバルマイナーモード(global-git-gutter-mode)を有効にすると, git管理下のファイルについてすべて git-gutter-modeを有効にします. git管理下のファイルに ついて常時利用するという場合は, グローバルマイナーモードを有効にするのが良いでしょう.

グローバルマイナーモードを有効にするには, 設定ファイルに以下を追加します.

(global-git-gutter-mode t)

minor-mode

あまりないと思いますが, 特定のモードで 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

差分情報を更新します. git-gutter-modeを有効にしている場合は不要です.

git-gutter:next-hunk

次の差分があるブロックに移動します. 現在が最後の差分ブロックの場合は, 先頭の差分ブロックに移動します. prefix argumentを使うことで, 指定した数だけ移動します.

git-gutter:previous-hunk

前の差分ブロックに移動します. git-gutter:next-hunkの逆方向版です.

git-gutter:popup-diff

現在の差分ブロックの内容をポップアップ(pop-to-buffer)します. 元のコードと現在のコードの 差を見たい場合に利用します.

git-gutter:popup-diffでバッファをポップアップした状態で, git-gutter:next-hunk, git-gutter:previous-hunkを実行するとポップアップされた バッファの内容も連動して更新されます.

git-gutter:revert-hunk

現在の差分ブロックの修正を更新前の状態に戻します. 間違って戻してしまった場合は undoを利用することで取り消せます.

git-gutter:toggle

差分情報の表示/非表示を切り替えます.

カスタマイズ

表示する文字, 色の変更

概要 記号 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 "")

linum-modeと併用について

git-gutter.elは linum-modeと同じ方法を使って差分情報を表示しているので, linum-modeと併用することが現状出来ません. linum-modeと併用したい, と 考えられている方には git-gutter-fringeがあります. git-gutter-fringe.elはフリンジに表示する以外は git-gutter.elと同様です. カスタマイズ性がやや低いですが, linum-modeとは干渉しないので, 併用して 利用することができます.

問題が見つかった場合

こちらまでお願いします.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment