LoginSignup
19
20

More than 5 years have passed since last update.

Agit.vim に最近追加した機能とか紹介

Last updated at Posted at 2014-12-01

この記事は Vim Advent Calendar 2014 の2日目の記事です。

僕が作成した Vim から Git のログを見るためのプラグイン、Agit.vim についてです。
Agit.vim の基本的なことについては以前の記事を参照ください。

gitk クローンみたいな Vim プラグイン作った

ファイルモード

:AgitFile

と実行することにより Agit をファイルモードとして開くことができます。
ファイルモードではリポジトリ全体の履歴ではなく、ある特定のファイルのみの履歴と、その時のファイルの中身を表示します。

shot1

また、--file=path/to/file というオプションで履歴を見たいファイルを指定することもできます。
これだけだとあまり意味はないのですが、後述する unite.vim との連携等 Agit を外部から呼び出したい場合には便利です。

--dir オプション

:Agit --dir=path/to/dir

で指定したディレクトリを起点として Agit を起動することができるようになりました。
起点として、というのは指定したディレクトリが含まれるリポジトリ全体の履歴を見るということです。

これだけだと特に面白くはないのですが、unite.vim 等と連携するなどすればとても便利になります。
例えば、下記のようなコードを vimrc に書きます。

let agit_action = {}
function! agit_action.func(dir)
  if isdirectory(a:dir.word)
    let dir = fnamemodify(a:dir.word, ':p')
  else
    let dir = fnamemodify(a:dir.word, ':p:h')
  endif
  execute 'Agit --dir=' . dir
endfunction
call unite#custom#action('file,cdable', 'agit', agit_action)

こうすると、例えば Unite file_mru のあと (a を押してアクションの絞り込みを行い) agit というアクションを実行することができるようになります。

この場合 agit アクションは指定したファイル、ディレクトリを起点に Agit を起動します。

unite-agit

(もしかしたらそのうちプラグイン化するかもしれない)

<C-g> でコミットメッセージを echo エリアに出せるようになった

いちにぃさんが要望を出してくれました。
最初は diff エリアにもコミットメッセージ出ているし不要かなとも思ったんですが、ファイルモードではコミットメッセージが出るエリアはないので実装しました。

c-g

言い訳のような何か

いろいろ他のことも忙しくてこれくらいしか機能追加できてないんですが、将来的にはファイルだけじゃなくて Author とか日付とかで柔軟に絞り込んだり、diff を Vim の diff 機能を使って表示するとかも実装するつもりです。

実際ファイルモード実装するの簡単だろwとか思ってたんですが、やってみるとかなりの部分で if filemode みたいなコードが出てきてしまってこれじゃアカンと思ってコード全体をリファクタリングしてから実装にとりかかりました。
(余談ですが gitv.vim はそういうコードになっています)

時間はかかったのですが、そのおかげで今後の拡張が少しやりやすくなったので今後はもう少し開発スピードを上げていきたいです。。。

明日は koron さんです。

19
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
20