年末に知ったvimagitってvimのプラグインが使ってて気持ち良い。
Gitの差分をvimで開けて、行単位でStageしたりCommitできる。
git add -pするvimmerには特におすすめ!

ちなみにEmacsプラグインのmagitってやつのコピー版らしい。
インストール〜使い方、オススメ設定まで記載しておく。

インストール

NeoBundle 'jreybert/vimagit'

使い方

GitHubのリポジトリにリンクされてるビデオとかを見るとざっくりイメージできると思う。

開き方

:Magit または <Leader>Mでbufferを開く。

セクション

bufferは以下の5つのセクションに分かれている。
後で記載するけど表示順などをオプションで指定できる。

  • info: current branchやHEAD commitのメッセージなどが表示されている
  • Commit message: コミットする時に現れて、メッセージを入力する
  • Staged changes: そのままだけどStagingされた変更部分
  • Unstaged changes: まだStagingされてない変更部分。Untracked filesもここに表示される
  • Stash list: Stashのリスト

コマンド

READMEみれば丁寧に書いてあるけど、自分が普段使うものを記載しておく。

command description
:Magit または <Leader>M magit bufferを開く。すべてはここから
S Stage <-> Unstage の切り替え。ファイル名の上ならファイルごとStageされるし、vで行選択すればその行だけStageされる
DDD Unstagedセクションでだけ使える。変更を破棄する
CC Commitセクション以外にいるならCommitセクションを開く。CommitセクションにいるならCommitする
CA CCのcommit --amendバージョン。直前のcommitに含めるならこれ。
CF commit --amendで、コミットメッセージを変更しない場合はこのコマンド一発で完了
R bufferをrefreshする
q bufferを閉じる
h help表示のON/OFF

他にもIやLとか色々あるけど、自分はほぼ使ってない。

オプション

vimrcで指定できるオプション。

option description default
g:magit_enabled vimagitの有効[1]・無効[0] 1
g:magit_show_help ヘルプの表示[1]・非表示[0] 1
g:magit_default_show_all_files bufferを開いた時にdiffを閉じておく[0]・modified filesのdiffだけ表示[1]・全ファイルのdiffを表示[2] 1
g:magit_default_fold_level 上記のdiff表示の詳細設定。ファイル名だけ表示する[0]・ファイル名とhunkの一覧だけ表示[1]・hunkの中身のdiffも表示[2] 1
g:magit_default_sections 各セクションの表示/非表示と順番 ['info', 'global_help', 'commit', 'staged', 'unstaged']
g:magit_warning_max_lines bufferを開く際にwarningを出すdiffの行数。実際に開くかはyes/noで回答 10000

オススメ設定

自分がやってる設定と理由を簡単に。

let g:magit_show_help = 0  " 少し慣れたらいらなくなる
let g:magit_default_show_all_files = 2  " わざわざ開くのは面倒なので
let g:magit_default_fold_level = 2  " 同上
let g:magit_default_sections = ['global_help', 'info', 'unstaged', 'staged', 'commit']  " helpはデフォルト非表示。次にcurrent情報。それ以下は上から順に処理していくイメージ

最初のcommitが2015年9月。 READMEにもあるようにまだまだ機能追加されそう。

VimでGitといえばfugitiveだと思うけど、それには無いものをいっぱい持ってるし、併用もアリだと思う!