スキップしてメイン コンテンツに移動

git を操作したい時にちょっと便利かもしれない unite-source を書いています


こんばんは。この記事は、 Vim Advent Calendar 2012 の 50日目の記事です。
49日目は、 @uryt さんの vim.orgにアップロードされていないプラグインがあるかチェックするgit-unreleased-vimplugins作った でした。

本日は、長いこと自前で作成している、 unite を利用して 簡単な git 操作を行える unite-source 、 giti を紹介します。

vim-unite-giti
https://github.com/kmnk/vim-unite-giti

これは何?

初期構想としては、自分の自分による自分のための git 操作用 unite source です。
現在はドキュメントも書いたので、自分以外の方にも、お使いいただける物になっていると思います。

言わずと知れた unite のインターフェースを用いて、 git の色々な操作を実現するための plugin's plugin になります。
unite を使って git 操作をしたい気持ちになる方に、是非使ってみて頂きたいです。

普段の仕事でヘビーに使っているので、基本的な操作に関しては、この source で(多分)完結できるはずです。

何故作ったの?

git の vim plugin と言えば、有名な vim-fugitive があります。

自分も、仕事で使うバージョン管理システムが svn から git に移行したタイミングで、最初は使おうとしていました。
ですが、長らく(こちらも自前の) vim-unite-svn で、バージョン管理システムを unite 経由で使うことに慣れきってしまっており、
差分をコミットするごとにフラストレーションが溜まり、限界を超えた頃、気づくと自前で作成していました。

何ができるの?

(自分が仕事を使ってる分には不自由しない程度に)基本的な操作は大体出来ます。

source 名を羅列すると、以下のような物を用意してあります。

* giti/branch, giti/branch_all
* giti/config
* giti/log
* giti/remote
* giti/status

それぞれ、簡単に説明してみます。

giti/branch, giti/branch_all

git branch や git branch -a を叩いた結果をリストにして表示する source です。

指定した branch に対して、 delete や merge 、 rebase などをの action を実行する kind を用意してあるので、

# branch を一覧する
# 指定した branch に対して何かする

という操作を、コマンドを打たずに選択するだけで行えます。

例えば、 typo を修正するために切った branch を master に merge したい場合は

giti/branch source を実行(:Unite giti/branch)し、 master が current branch になっている状態で fix_typo branch を選択して



tab 等で action リストを展開し、 merge を実行すると





merge が実行されます。



新しい branch を master から切りたい場合は、 giti/branch source を実行して、作成したい branch 名を入力して [new branch] とある行を選択した状態で Enter を押すと、



デフォルトで branch/new kind が起動して、 start point を聞いてくるので、 master の行を選択して、再び Enter を押すと、 master から branch が切られます。



giti/config

git config -l を実行した結果を format して、リストにして表示する source です。

直接 config 名を入力すると config を追加できます。また、 write や remove などの action を持った kind を用意しています。

ローカルの clone の一部だけ user.name などを書き換えたい時など、現在の値を参照しながら、変更することができます。

giti/log

git log を実行した結果をリストにして表示する source です。



diff や reset_hard 、 revert などの action を持った kind を用意しています。

一行のみを選択している状態での diff は、その行の差分を新たな tab に表示しますが、

二行選択して diff を実行した場合、その commit 間の diff を表示します。



その他、 comment を見ながら reset --hard したかったり、 revert したかったりする commit を探して、 hash をコピペするなどなしに、一発で実行できるところなどが地味に便利です。

giti/remote

git remote を実行した結果をリストにして表示する source です。
直接 remote 名を入力すると、新たな remote を追加できます。また、 fetch や delete 、rename 等の action を持った kind を用意しています。

remote に追加している、ある repository だけ fetch したいときなど、 repository に付けた名前などを思い出す必要なく、選択して Enter だけで fetch できます。


giti/status

git status -s を実行した結果を format して、リストにして表示する source です。



ファイルに対して操作する git コマンド(add 、 commit 、 checkout 等)に対応する action を持った kind を用意しています。
普段使いでは、一番お世話になる source なので、色々と action を持っています。

例えば、あるファイルに修正を加えた状態で



checkout action を実行すると、




変更のない状態に戻ります。




どうやって使うの?

NeoBundle などを用いて頂いて、インストールした後、各機能をキーマップして使ってください。
自分の一部の設定は、ドキュメント(doc/vim-unite-giti.txt)に書いているので、一例としてご参照ください。


他に何か言いたいこととか

機能面の話ではないのですが、自分は機能実装と同じくらいか、それ以上にテストを書くのが好きなため、
test ディレクトリ下に h1mesuke さんの vim-unittest に依存して、ほぼ全 source をカバーした仕様化テストを入れています。

vim-unittest がロードされた状態で、ルートディレクトリ上で make test_all を実行すると、全テストを実行します。

vim script でテストを書くという例があまり無く、試行錯誤しながら書いていました。
良い書き方などあったら参考にさせていただきたいです。

これからどうするの?

基本的な作業には不自由しない段階にまでは実装が終わったので、この後は、自分が欲しいと思った機能や、作って欲しいと言われた便利そうな機能を都度実装していこうと思っています。

また、内部操作はシェルで git コマンドを叩いて、結果をフィルタリングして、 map して、 format して unite に流しこむをしているだけなので、
徐々に動作が遅くなってる箇所が目立ってきていて、もう少しデータの取り方を考えたほうが良いかなとも考えています。

直近では、軽量化するのではなく、重い動作をしている際に、進捗を見られるようにしたいと思っています。



以上です。お付き合いいただきありがとうございました。

明日は @asionfb さんの記事になります。お楽しみに!

コメント

このブログの人気の投稿

日記をつけはじめて1年とちょっと経ったまとめ

日記をつけはじめて1年とちょっと経ったまとめ去年(2017)の 1/11 から日記をつけ始め、気づくともう1年以上ほぼ毎日つけていました
まさか習慣化するとは思っていなかったんですが、意外と続いたので一旦まとめておこうと思ってのエントリこのエントリでは どういう手法で続けてきたか続けてきた結果どうなったか などをまとめておいて、自分用の改善材料にすること、及び、このエントリを見た人の判断材料にすることを目的としています…ので、書き始めた主要因である書籍 日記の魔力 については、覚えている内容を参考にする程度で、本自体の紹介はほぼしないです(読み返すのが面倒だっただけじゃないです)まとめ書いてみたら長くなったので、まとめから自分用のフォーマットを整えれば意外と書くのは楽愚痴も悩みもとりあえず文字に吐き出すと精神衛生上良い忘れっぽいと思っていたら、思っていたより数倍物事を忘れていることに気づく万が一興味を持ったら一度 日記の魔力 を読んでみては今後は…これまで通り毎日ログを書くふりかえりの意義を再考して、ちゃんと毎週&毎月ふりかえるようにするふりかえりの中で、どういうログを書いておくと使いやすいか考えて、日記自体も改善する以降、自分のふりかえりも兼ねているため長文ですが、つらつらと書きますきっかけ最初のきっかけは、 Twitter のタイムラインに流れてきたブログのエントリ 思考や行動を改善できる「日記の魔力」とは の引用…だった気がする(この時はまだログをつけていなかったので記録も記憶も残っていない…)ここで紹介されている 日記の魔力 という本を一通り読み、本に書いてあるとおりに 騙されたと思って日記を書き始めてみよう と思ったのが最初の一歩手法記憶が朧げですが、確か本の著者の方の手法はワープロかPCか何かで、毎日のログを隙間時間にファイルに記述する10日に一度くらいのスパンでそれまで書いた日記をふりかえる ふりかえりの中で、自分が人生で追っていきたい主題みたいなものに関連する内容を別のファイルにコピペして貯めていくみたいな形だったはず。色々と細かいルール(天気などの後から調べれば分かることは書かない等)が少しあった気がするけれど、既に覚えていないですそれを基にしつつ、自分の今の流れは以下の様な形に落ち着いています日付毎の1ファイルに、その日の出来事、やったこ…

のどかを購入した

以前以下の辺りの記事
変態キーバインドを勧めてみる続・変態キーバインドを勧めてみるで紹介したように、完全に「窓使いの憂鬱」に依存している自分にとって、
Vistaや7への移行の最大の妨げとなっていたのがVista発表とほぼ同時期に発表されたこの一文。

「窓使いの憂鬱」の開発は終了いたしました。Windows Vista では動作しませんのでご注意ください。

当初はかなりショックを受けたものです。

すぐに有志のパッチが出たりはしたのですが、その後派生プロジェクトとして
のどか[http://www.appletkan.com/nodoka.htm]というものがapplet氏により開発、継続されました。

基本的にVistaでは"デジタル署名のないデバイスドライバは動作しない"ため、フリーソフトのレベルでは限界がありました。
この"のどか"は、シェアウェアであり、いずれ法人化&署名獲得を目指すということで、当時から購入を迷っていたのですが、
この度、めでたく法人化されるということでこの機会に購入。

窓使いの憂鬱をアンインストールし、のどかをインストールしました。

設定ファイルなどは若干の修正が必要なものの、ほぼ今までの物をそのまま使えたため、スムーズに移行することができました。

これで学校のPCや新ノートのVista(そのうち7)でも快適なタイピング環境が構築できそうです。

追記
Vista 64bitの場合、起動時にF8でメニューを出して署名強制を無効にしないと動作しないらしい。
これを調べていなくて学校のPCへのインストールに時間がかかりました。

現在は快調に動作中。
セミコロンエンターがいい感じです。

追記の追記
とうとう署名付き版のv4.10がリリースされたようです。
インストールしてみたところ署名強制無効を行わずに問題なく動作しました。

続・変態キーバインドを勧めてみる

以前 変態キーバインドを勧めてみる で紹介したキーバインドを若干修正したので、改めて紹介。
導入やら詳細は上記に依るとして、現状は

使用ソフト
窓使いの憂鬱(WindowsVista非対応)IMEのプロパティ
キーバインド内容
CapsLock→LeftCtrlセミコロン→EnterC-セミコロン→セミコロンC-h→バックスペースC-[→EscC-無変換→[C-変換→]S-無変換→{S-無変換→}C-ひらがな→\C-ひらがな→|無変換:日本語OFF、変換文字の半角化変換:日本語ON、変換文字の全角英数化ひらがな:変換文字のカタカナ化
な感じになっています。

最後の3つはIMEのプロパティで設定、
その他窓使いの憂鬱を用いた設定内容は、

include "109.mayu" # JIS配列の場合はこちら

# CapsLockをControlに
mod control += 英数
key *英数 = *LeftControl

# セミコロンをエンターに
key *IC-SemiColon = Enter

# Ctrlを押しながらだとセミコロンに
key *IC-C-~S-SemiColon = SemiColon

# Ctrl+Hをバックスペースに
key *IC-C-H = BS

# vi風キー操作
key C-OpenBracket = ESC
key IC-C-OpenBracket = ESC

# 遠いキーを近くへ
key C-無変換 = OpenBracket
key C-変換 = CloseBracket
key S-無変換 = S-OpenBracket
key S-変換 = S-CloseBracket
key C-ひらがな = YenSign
key S-ひらがな = S-YenSign

こんな感じです。

オレンジは今回新しく追加したもの、
青はおおよそ誰にでもお薦めできるバインドです。

赤は、初心者にはお薦めできn(ry なものです。
慣れるまでかなりいらいらしますが、慣れてしまうとタイピングの勢いが何かを決定するたびに止まってしまって逆にいらいらする感じになります。なってます。

窓使いの憂鬱はVistaで未対応と書きましたが、一応後継機としてのどかというソフトが別の方により引き続き更新されており、
そちらは動作するようになっているそうです。

日本語キーボー…