VimプラグインのGit界隈について

  • 158
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

前書き

以前、VimでGit連携といえば、fugitiveが定番で(参考1参考2)で、コミットツリーの確認するにはGitv便利、という状況でしたが、最近、次々と新しいプラグインがリリースされていますので、紹介したいと思います。

Agit.vim

git log を見やすく表示するためのプラグインです。

従来より、gitv というプラグインがありましたが、それら機能に加えて、修正されたファイル一覧も見られるようになっています。

また、gitvにあった以下のような難点も改善されています。

  • キーバインドをカスタマイズするために、filetype=gitvのautocmdを作成しなければならない
  • 外部コマンド(git)の実行タイミングの影響かなんかもっさり
  • encodingの設定によっては日本語のコミットログをデコードに失敗して文字化けする

2015-02-25 14_35_31-[Agit log] 2 - (~_vimfiles_ftbundle_vim_vital) - GVIM.png

参考: 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 でのブランチ管理をサポートするプラグインです。

2014-08-04 15_05_05-Merginal_Branches - (~_vimfiles_ftbundle_vim_vital) - GVIM.png
vital.vimのブランチ一覧

メインとなる機能は、ブランチの管理(一覧、作成、切替、削除)と、ブランチ間のマージ(およびコンフリクトの解消)です。

fugitive (編集系、コマンド直接実行), gitv (コミットツリー表示、管理), merginal(ブランチ管理) で、VimをGit用のGUIツールとして使うための機能がほぼ網羅されたといって差し支えないのではないかと思います。

gapply.vim

gapply はちょっと毛色の違うプラグインで、git add -p を実行するためのものです。

同様の機能は、fugitive の :Gdiff から差分編集することで可能です(参考)。

2014-08-04 17_16_04-vim-git.md (fugitive___C__Users_sugiurms_Work_Qiita_.git__0) - GVIM.png
幅が狭い場合は上下分割

2014-08-04 17_15_36-vim-git.md (~_Work_Qiita) - GVIM.png
幅が広い場合は左右分割

この機能はVimのdiff機能を活用しており、:diffput (dp)、:diffget(do)を利用してgit add -pでき、とても便利です。
これはこれでなかなかいいなとは思うものの、diff故に編集中のファイルが下側、Gitのインデックス相当の差分が上側のウィンドウになってしまっており、コミット対象のhunkを下→上(または右→左)の方向で反映させて、上側ウィンドウを:wしないといけないため、使いづらく感じます。

それを解消してくれるのが、このプラグインです。

使い方は、シェルでGit管理された任意のディレクトリでvim +Gapplyを実行するだけです。

2014-08-04 15_01_31-Gapply (~_Work_Qiita) - GVIM.png

すると、git diffしたそのままの画面が表示されます。

その中で、git add -pしたい差分だけ残した状態にしておき、:wでバッファを保存すると、残した部分だけがStagingされます。

シンプルですが、わかりやすい機能です。シェルのエイリアスなんかに登録しておくと便利です(git のサブコマンドにしてもよさそうです)。