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

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

      返信削除

    コメントを投稿

    このブログの人気の投稿

    sonictemplate-vim を denite.nvim で使うための source と kind を書きました

    sonictemplate-vim を denite.nvim で使うための source と kind を書きました こうなって こうなって こう宣言したので Meguro.vim #9 で 進捗 を出してきました コメント等合わせても 50行 程度の実装です 概要 sonictemplate-vim を denite.nvim から呼び出すための拡張用 source & kindを書きました sonictemplate-vim-denite-extension これはなに? mattn さんが作成されている sonictemplate-vim の機能を、 Shougo さんが作成されている denite.nvim を経由して呼び出せるようにするための source と kind の実装です なにができるの? :Denite sonictemplate を execute すると、適用対象テンプレートの候補が denite.nvim のインターフェースでリスト表示される リストからテンプレートを選択( <Enter> )すると、ソースコードに適用される それ :Template でできるよ そもそも :Template までが command モードで入力された状態で <Tab> 等を押せば、候補が表示&補完される機能が本家の sonictemplate-vim 自身に備わっているので、必要十分ではあります ならなんで作ったの? 自分が denite.nvim のインターフェースにかなり依存して Neovim を用いているため、作業中の操作を極力ひとつに統一させておきたい denite.nvim 上で候補リストを表示することで、候補の絞り込み機能が提供されるため、少し便利になる Vimスクリプトコーディングのリハビリを兼ねて書きたかった (Python スクリプトだけど) 辺りが主な理由です なんで fork じゃなく別リポジトリで作ったの? 以前 unite.vim 用の source & kind を作ったときは、 Vim があれば使えたので一緒でも良かったのですが(実際当時はそこまで考えてませんでしたが)、今回は de

    就職活動現況報告

    今週若干余裕があるので少しネタの更新・・と思っていますが 研究も進めないといかんので保留。。 本を読む本 (講談社学術文庫) をほぼ読み終わったので 電車の中で次はviの本かWebプログラミング基本みたいな本を読もうと思います。 後は久々に漫画を衝動買い。 ぷりぞな6 1 (サンデーGXコミックス) これ。絵描いてる人が韓国の人らしい。 ブラックラグーンの作者が支持みたいなことが書いてあったので読んで見ました。 まー絵は萌え系みたいな感じだけどシリアス混じってて面白そうかな? Amazonでは絵が無いですが一応公式の紹介は GX作家&作品紹介 こんな感じです。 結構表紙飾っているようなので見たことある人も居るかもしれません。 で、タイトルの就活現況では、前回順調とか言ってましたが 志望していた6社のうちとうとう1社落ちました。 しかも結構でかいところです。 グループ面接の時点で落ちてしまったので、 もしかしたら表面の部分(礼儀とか仕草)で落とされたのかもしれないですが、 反省としては 内容が冗長で話す内容が長かった 何か反論された時に言い訳じみた答えを返してしまった 自分はエンジニア経験があるんだ的な内容を押しすぎた 辺りと考えています。 で、対策。 まず冗長分ですが、今のところ話す内容を完全に決めてしまわずに、 ある程度の枠を決めてその場で考えて話しているので もうちょっと 質問の後に結論を考えてから内容を話す ように気をつけようと思います。 反論じみた言い訳というのは、とっさに返してしまう対応策みたいなもので、 相手に この人は実務でミスしてもその場対応するんじゃないか という印象を与えてしまった気がしております。 ので、対策としては 一度相手の内容を肯定して、その上で簡潔にこうすればいいんじゃないかと思うと一言返す 位に留めようと思います。 最後にエンジニア押しは、一応自分の売りの一つではあるので止めることはせずに 事実だけをしっかり伝えて冗長分は省く というような感じにしようかと思います。 以上。 自分の反省なので発信するような内容じゃないんですが、 文に書かないとなかなか省みない性格なので文にして発信。 結論を言えば「もっと落ち着いて簡潔に」を心がけるといったところでしょう。 正直面接凄い苦手なのでなかなか落ち着くのはきついですが、 省みなずに 運

    USBメモリでポータブル環境を作る(その2)

    その1では、環境作りの前の下地を作成しました。 その2では、実際にソフトを入れ、完成させて、使ってみます。 2.ポータブル環境用ソフト選び この辺りは基本的にこの二つのサイト 「USBメモリに入れて持ち運べる便利なソフト」まとめ PortableApps.com を参照して、自分の使いやすい環境にすべくソフトを詰め込みます。 中でも恐らく必須なのは、ランチャーです。 自分は前者のサイトでも紹介されている CraftLaunch をデスクトップやノートPCでも愛用しているので、こちらを使いました。 ランチャー選びの注意点として、 接続するPCによってドライバ名が変わるため ランチャーは相対パスで指定できなければなりません。 その辺り対応しているランチャーが先ほどの まとめ や、 USBメモリ徹底活用術 で紹介されているので 使いやすそうなものを選んでみてください。 自分はコマンド入力式のランチャーがなければ生きていけません。 残りのアプリケーションは好みで。 参考までに自分が入れているアプリケーションをさらすと CraftLaunch FFFTP FireFoxPortable foobar2000 DeleteDust StartScr Suspend IDM LimeChat PidginPortable SunbirdPortable TeraPad Twit UnplugDrive Portable Vim 現在のところこれらになります。 今現在使っているUSBメモリがそれほど容量が大きくなく、転送速度もそれなりなため あまり重そうなソフトは入れていませんが、 軽くて便利なソフトは他にも多々あるので、 個々使えそうなアプリを探してみてください。 重そうなので入れていませんが、OpenOfficeのPortableバージョンなどもあります。 3.用途と感想等 ということで、ここまで携帯環境構築を色々と垂れ流しました。 様々なソフトの設定がいつでもどこでも保持されている状態なので、 いつどこのどのPCでも自分の使いやすい環境が維持されることになります。 ただしまぁセキュリティ上ネカフェとかのPCで使うのはやめておいた方が良いと思いますが。 転送速度が十分速いお高めのUSBメモリであれば、 USBメモリに入れているアプリは自分の使う自宅