前書き
以前、VimでGit連携といえば、fugitiveが定番で(参考1、参考2)で、コミットツリーの確認するにはGitvが便利、という状況でしたが、最近、次々と新しいプラグインがリリースされていますので、紹介したいと思います。
Agit.vim
git log
を見やすく表示するためのプラグインです。
従来より、gitv というプラグインがありましたが、それら機能に加えて、修正されたファイル一覧も見られるようになっています。
また、gitvにあった以下のような難点も改善されています。
- キーバインドをカスタマイズするために、filetype=gitvのautocmdを作成しなければならない
- 外部コマンド(git)の実行タイミングの影響かなんかもっさり
- encodingの設定によっては日本語のコミットログをデコードに失敗して文字化けする
参考: gitk クローンみたいな Vim プラグイン作った
committia.vim
git commit
のコミットログ入力をサポートするプラグインです(紹介記事)。
従来、差分を確認しながらコミットする場合、git commit -v
と-v
オプションをつける必要があり(fugitive を利用する場合は :Gcommit -v
)、
その場合でもコミットログの入力バッファに追記される形でdiffが表示されるため、視認性が悪いという難点がありました。
その欠点に対し、3ペイン構成で表示することで、視認性の向上が図られています。
- ログ入力
- Diff
- ステータス
Diffが別ウィンドウになったことで、差分をじっくり確認でき、また、カーソルをジャンプして行ったり来たりしながらログを書く必要がなくなります。
また、コミット時にフックをしかけられるようになっており、編集をインサートモードで開始したり、専用のキーマッピングを設定したりと、色々とカスタムできるようです。
vim-merginal
fugitive は編集バッファに対してのサポートがメインなので、Gitの機能のうち、それ以外に関連する部分についてはあまり機能がありません。
Gitvは、そのうちのコミットツリーの表示 (git log --graph
相当) をサポートするプラグインでした。
この Merginal は、git でのブランチ管理をサポートするプラグインです。
メインとなる機能は、ブランチの管理(一覧、作成、切替、削除)と、ブランチ間のマージ(およびコンフリクトの解消)です。
fugitive (編集系、コマンド直接実行), gitv (コミットツリー表示、管理), merginal(ブランチ管理) で、VimをGit用のGUIツールとして使うための機能がほぼ網羅されたといって差し支えないのではないかと思います。
gapply.vim
gapply はちょっと毛色の違うプラグインで、git add -p
を実行するためのものです。
同様の機能は、fugitive の :Gdiff
から差分編集することで可能です(参考)。
この機能はVimのdiff機能を活用しており、:diffput
(dp
)、:diffget
(do
)を利用してgit add -p
でき、とても便利です。
これはこれでなかなかいいなとは思うものの、diff故に編集中のファイルが下側、Gitのインデックス相当の差分が上側のウィンドウになってしまっており、コミット対象のhunkを下→上(または右→左)の方向で反映させて、上側ウィンドウを:w
しないといけないため、使いづらく感じます。
それを解消してくれるのが、このプラグインです。
使い方は、シェルでGit管理された任意のディレクトリでvim +Gapply
を実行するだけです。
すると、git diff
したそのままの画面が表示されます。
その中で、git add -p
したい差分だけ残した状態にしておき、:w
でバッファを保存すると、残した部分だけがStagingされます。
シンプルですが、わかりやすい機能です。シェルのエイリアスなんかに登録しておくと便利です(git のサブコマンドにしてもよさそうです)。