anything-vcs-project.elというelispを書いた。
https://github.com/podhmo/anything-vcs-project.el
これ何?
バージョン管理システム(git,hg)などで管理されているファイルをanythingからアクセスするためのelisp。
(以降バージョン管理システム=VCS)
実際の動作。
- 現在開いているバッファのディレクトリから、~/.{git,hg}を探す。
- ~/foo/bar/boo/yee.txtにいる時は、~/foo/bar/boo/.git, ~/foo/bar/.git, ~/foo/.git, ~/.gitを探していく
- (hgについても同様)
- 見つかったら、そのVCSが管理しているファイルをanythingで選択して絞り込む
- 次回からは、開いているバッファがVCSが管理しているバッファでなくても開けるように覚えておく。
便利なのは、gitとhgどちらで管理しているか気にしなくて良いこと。*1
もう少しファイルの選択方法について詳しく説明すると。
ここで、hg,gitなどで管理しているファイル群をプロジェクトと呼ぶことする。ファイルの選択の方法は2種類あって、
- 現在のプロジェクトの管理下のファイルから絞り込む
- プロジェクトを選択する=>選択したプロジェクトの管理下のファイルから絞り込む
というような感じ。
install
anything.elが必要。anythingが入って入れば
git clone git@github.com:podhmo/anything-vcs-project.el.git cd anything-vcs-project.el cp anything-vcs-project.el <emacsのload-pathが通ったディレクトリ> cp with-prefix.el <emacsのload-pathが通ったディレクトリ>
あと、.emacs以下のように設定を書き足せば良い。
(require 'anything-vcs-project) ;; 見つけたプロジェクトを覚えておくか(基本tの方が便利) (setq anything-vcs-project:cache-enable-p t) ;; 覚えておくプロジェクトのパス (setq anything-vcs-project-cache:project-list-path "~/.emacs.d/.project.list") ;; git で管理下ファイルの一覧を取得する時に除去するパターン (setq anything-vcs-project-git:exclude-args "--exclude .hg") ;; hg で管理下ファイルの一覧を取得する時に除去するパターン (setq anything-vcs-project-hg:exclude-args "--exclude '*.pyc' --exclude .git") ;; key bind (global-set-key (kbd "C-c C-:") 'anything-vcs-project)
C-c C-:で使えるようになる。結構便利だと思う。
*1:普通はどちらか一方だけ使うのであまりメリットがないのかも?