前書き
以前、VimでGit連携といえば、fugitiveが定番で(参考1、参考2)で、コミットツリーの確認するにはGitvが便利、という状況でしたが、最近、次々と新しいプラグインがリリースされていますので、紹介したいと思います。
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 でのブランチ管理をサポートするプラグインです。
vital.vimのブランチ一覧
メインとなる機能は、ブランチの管理(一覧、作成、切替、削除)と、ブランチ間のマージ(およびコンフリクトの解消)です。
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 のサブコマンドにしてもよさそうです)。