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

git status と git branch ができる unite の source 書いた

書きました。

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
追記(02/29): READMEには追加しているんですが、sourceをいくつか追加しました。以後は README.markdown を参照してください。
  • giti
  • giti/log
  • giti/config
 追記ここまで(02/29)

    それぞれ、独自 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 の入力を対話的にやる
    追記(02/26): よくよく考えたら、関数提供しても command  にしないと CommandLine で使いにくいことに気づいたので、いくつか command を追加しました。
    • GitiDiff
    • GitiDiff $FILE1 $FILE2 ...
    • GitiDiffCached
    • GitiDiffCached $FILE1 $FILE2 ...
    • GitiPush
    • GitiPush $REPOSITORY $REFSPEC
    • GitiPushExpressly
    下記のような感じに設定しています。

    if globpath(&rtp, 'plugin/giti.vim') != ''
      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
    追記ここまで(02/26)



    以下、例によって簡単な動作デモ


    :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 もドキュメントしっかり書いた方が良いのかな…

    コメント

    1. こんにちは。unite.vimの作者です。これはかなり良い機能だと思います。が、やはりこういった各プラグインに分かれてしまっているVCSの操作というのは一つにまとめるべきだと思っています。この機能をvim-vcsに統合できないでしょうか。
      https://github.com/Shougo/vim-vcs

      返信削除
    2. > Shougoさん
      はい、vcsとしてまとめることには賛成です。
      可能であれば統合したいです。
      まだしっかりと考えていないですが、gitとsvnだけでも細かい操作までは対応付けが難しそう、詳細の機能までインターフェースを合わせるのは大変そう、と時間がかかりそうなイメージがあったのと、
      直近の仕事でgitを使い始め、作業に差し支えが生じてきたので、取り急ぎ作ってしまっていました。

      まず、svnの方の対応を考えつつ、どういうインターフェースを切るのが良いのか妄想してみたいと思っています。手をつけ始めましたらご相談させてください。

      返信削除

    コメントを投稿

    このブログの人気の投稿

    日記をつけはじめて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で未対応と書きましたが、一応後継機としてのどかというソフトが別の方により引き続き更新されており、
    そちらは動作するようになっているそうです。

    日本語キーボー…