vim から git 操作できる denite の source を作りました


はじめに

この記事は denite.nvim 向けの git ソースを作ったのでそれの説明を行う記事です。まだまだですが基本的な操作はだいぶできるようになってきたので宣伝です。

対象読者

  • vim ユーザ
  • denite.nvim を利用している(or これから利用する)
  • vim からの git 操作にめんどくささを感じている
    • そして、その解決を「denite.nvim の UI でやりたい!」と思っている

前提

vim における git 関連プラグインは非常に数が多く、denite-gitto よりも高機能で使いやすいものはたくさんあります。(gina.vim とかほんとすごいです。)
また、denite.nvim の UI で git 操作できる別プラグインも既にあったりします。(じゃあなんで作ったの?って話なんですが。。。git 操作ってめちゃくちゃやるので、自分好みの UI がよかったのかもしれません。)

インストール

お好みのプラグインマネージャでインストールしてください。
下記は dein.nvim を利用している前提のサンプルです。

  call dein#add('Shougo/denite.nvim') " denite.nvim 本体。v3 以降が必須。
  call dein#add('hrsh7th/vim-gitto') " git 関連操作を提供するプラグイン
  call dein#add('hrsh7th/vim-denite-gitto') " denite.nvim の source

利用方法

下記のマッピング一つだけで基本的な操作は全て可能です。git 関連操作のランチャーが立ち上がるイメージです。

デフォルトで status branch log fetch が表示されており、場合によって下記のようなメニューが追加で表示されます。

  • push(未 push なコミットがある場合)
  • pull(リモートのほうが進んでいるとわかった場合)
  • set-upstream-to(upstream が未設定で同名のリモートブランチがある場合)
nnoremap git :<C-u>DeniteGitto gitto<CR>

※ もちろん、個別に nnoremap gits :<C-u>DeniteGitto gitto/status<CR> などと書くこともできます。

その他

  • .git の検出は DeniteGitto を実行したバッファから行われます。
    • この挙動を変更したい場合は g:gitto#config.get_buffer_path を上書きすれば可能です。
  • DeniteGitto gitto を起動すると、status branch log push などのメニューが表示されます。
    • status からメニューに戻りたい場合は denite.nvimrestore_sources マップから行えます。これが激しく便利です。
  • なんと vim-plugin なのに doc がないです。
    • 現状、リポジトリの README.md に説明がちょろっとあるだけです。
    • これはボコボコにされかねない由々しき事態なので時間を見つけて doc を書きます。(本当に vim 周りのエコシステムはドキュメントが充実していて素晴らしいなと思います。思ってはいます。。。)

スクショ

DeniteGitto gitto

DeniteGitto gitto 実行後の状態

DeniteGitto gitto -> status

status を選択した状態。
denite.nvim の機能である restore_sources を実行すると前の画面に戻れる。

status から変更差分を表示

デフォルトアクションが diff になっているので、<CR> で別タブで vimdiff が表示される。

status から commit アクションを実行

status の一覧からコミットしたい対象を選択して commit アクションを実行する。

免責事項

ご利用の際は自己責任でお願いします