書きました。
https://github.com/kmnk/vim-unite-giti
すでに有りそうな気もするんですが、今のところ知らないのと、
http://kmnk.blogspot.com/2011/02/unitesvn-statussvn-diffsource.html
で書くといって既に一年経っているのとで自分で書いてみました。
まだ仕事でがっつり使っていないので、バグや動作不全などあるかもしれません。
昔作った svn と違って何故か vim-unite-git じゃなくて giti なのは、日和っただけで深い意味は無いです。
インストール方法は割愛します。unite.vim 使っている方なら余裕なはずという想定で…
作ったsourceの名前は以下。
それぞれ、独自 kind を定義していて、以下のactionを持っています。
giti/status
git/branch
その他、以下の関数を用意しています。key map などして使えるかもしれないです。
以下、例によって簡単な動作デモ
:Unite giti/status
https://github.com/kmnk/vim-unite-giti
すでに有りそうな気もするんですが、今のところ知らないのと、
http://kmnk.blogspot.com/2011/02/unitesvn-statussvn-diffsource.html
で書くといって既に一年経っているのとで自分で書いてみました。
まだ仕事でがっつり使っていないので、バグや動作不全などあるかもしれません。
昔作った svn と違って何故か vim-unite-git じゃなくて giti なのは、日和っただけで深い意味は無いです。
インストール方法は割愛します。unite.vim 使っている方なら余裕なはずという想定で…
作ったsourceの名前は以下。
- giti/status
- giti/branch
- giti
- giti/log
- giti/config
それぞれ、独自 kind を定義していて、以下のactionを持っています。
giti/status
- add
$ git add $FILES - rm_cached
$ git rm --cached -- $FILES - reset
$ git reset HEAD $FILES - commit
$ git commit $FILES - amend ←動作が怪しい
$ git commit --amend $FILES - checkout
$ git checkout -- $FILES - diff
$ git diff $FILES - diff_cached
$ git diff --cached $FILES
git/branch
- run
$ git checkout $BRANCH_NAME or git checkout -b $NEW_BRANCH_NAME - delete
$ git branch -d $BRANCH_NAME
その他、以下の関数を用意しています。key map などして使えるかもしれないです。
- giti#branch#delete_force(branch)
$ git branch -D $BRANCH_NAME - giti#commit#dry_run(files)
$ git commit --dry-run $FILES - giti#push#run()
$ git push - giti#push#run(repository, refspec)
repository と refspec を指定して push - giti#push#expressly()
repository と refspec の入力を対話的にやる
よくよく考えたら、関数提供しても command にしないと CommandLine で使いにくいことに気づいたので、いくつか command を追加しました。
- GitiDiff
- GitiDiff $FILE1 $FILE2 ...
- GitiDiffCached
- GitiDiffCached $FILE1 $FILE2 ...
- GitiPush
- GitiPush $REPOSITORY $REFSPEC
- GitiPushExpressly
if globpath(&rtp, 'plugin/giti.vim') != ''追記ここまで(02/26)
nnoremap <expr> <silent> <Space>gD ':<C-u>GitiDiff ' . expand('%:p') . '<CR>'
nnoremap <expr> <silent> <Space>gd ':<C-u>GitiDiffCached ' . expand('%:p') . '<CR>'
nnoremap <silent> <Space>gp :<C-u>GitiPush<CR>
nnoremap <silent> <Space>gP :<C-u>GitiPush
endif
以下、例によって簡単な動作デモ
:Unite giti/status
何もないときでも、commit --amend などは実行したいので、常に候補としてdummyを表示しています。
action はこんな感じに。
file を編集して保存したので、差分が出ます。新ファイルなので Untracked
add
IndexStatus が Added になります。
更に編集すると、 WorkStatus が変わるので
また add
こんな感じで繰り返していきます。
間違えて編集したとき(まだ add してないとき(WorkStatus が Modified))は、
checkout で戻す
戻りました。add 済みであれば reset を使います(reset HEADが実行されます)。
しばらく作業したら commit したいファイルを選択して
commit
コメントを編集して ZZ
commit できました
新規に add したけど、やっぱり要らなくなったものは
rm_cached
Untrackedにもどります。
commit しちゃったけど要らなくなったものは、
file kind に追加されている git_rm action を実行
Deleted になります
giti/branch も入ってますが、しっかり動作確認できていないです。多分動く…
かっとなって作ったため、まだ仕事で使っておらず、動作が不安定な箇所もあると思います。バグや要望等ありましたらお知らせ下さい。
一応、そのうちやりたいなということは、README の TO DO に書いていますが、実装予定は未定です。。
Vim script on Vim script もドキュメントしっかり書いた方が良いのかな…
こんにちは。unite.vimの作者です。これはかなり良い機能だと思います。が、やはりこういった各プラグインに分かれてしまっているVCSの操作というのは一つにまとめるべきだと思っています。この機能をvim-vcsに統合できないでしょうか。
返信削除https://github.com/Shougo/vim-vcs
> Shougoさん
返信削除はい、vcsとしてまとめることには賛成です。
可能であれば統合したいです。
まだしっかりと考えていないですが、gitとsvnだけでも細かい操作までは対応付けが難しそう、詳細の機能までインターフェースを合わせるのは大変そう、と時間がかかりそうなイメージがあったのと、
直近の仕事でgitを使い始め、作業に差し支えが生じてきたので、取り急ぎ作ってしまっていました。
まず、svnの方の対応を考えつつ、どういうインターフェースを切るのが良いのか妄想してみたいと思っています。手をつけ始めましたらご相談させてください。