dotfilesいじりが趣味の岩下(@ToruIwashita)です。
昨年末の クラウドワークス Advent Calendar で「VimでGitのブランチ毎にセッションを簡単に保持できるようにする」という記事を公開してからというもの、あの設定だと vim-session プラグインと vim-fugitive プラグインに依存しているから微妙かなと思ったり、Vim上でブランチを切り替えつつセッションも同時に切り替えられるようにしたらもっと便利になるじゃんと思ったりして、うまいこと作り直したい欲求が抑えられなくなったのでプラグインを作る事にしました。
まずはじめにした事
プラグインを作る事にしたと言いつつ、既に誰かが作ってくれていたら自分で作らずむしろそれを使いたいので、まずは既存のプラグインの調査から始めました。
・vim-session
GitHub - xolox/vim-session: Extended session management for Vim (:mksession on steroids)
普段愛用しているセッション管理プラグイン。
実装を見ると SaveSession
や OpenSession
コマンドでブランチ名を補完してくれるようで、若干Gitを考慮しているみたいでしたが、ブランチを切り替える機能までは見当たらず。
・gitsessions.vim
GitHub - wting/gitsessions.vim: Auto save/load vim sessions based on directory and git branch.
Gitのブランチ毎にセッションを自動で保存・復元できるようになるプラグイン。 アドベントカレンダーの設定を作る前にこれを見つけていたらこれで事足りた。。でもブランチの切り替えまではできなそう。
・vim-git-session
GitHub - rnaveiras/vim-git-session: Save vim sessions follow the automatic name branch-repo-name
こちらもGitのブランチ毎にセッションを自動で保存・復元できるようになるプラグイン。gitsessions.vim
よりも軽量な実装。
しかしこちらもブランチの切り替えまではできなそう。
さくっと検索してみた結果、上記3つのプラグインが候補になりました。
特に gitsessions.vim
はかなりやりたい事に近く、after/plugin
を使用すればやりたい事は実現出来そうでしたが、細かい所まで作っていくと after/plugin
のファイルが大きくなりそうで嫌だし、やっぱり自分で作ってしまおうという結論になりました。
※ ちなみに自分は unite.vim を使っておらず、ctrlp.vim を軸にVimを育てているので unite.vim
を使えば簡単に実現できてしまうのかもしれません。
作ってみた
最終的に作ったプラグインはこちらです。
Git管理下のディレクトリで、Vimでファイルを編集している時に以下のコマンドを使ってセッションとブランチを操作する感じになります。
基本的に :Gsw ブランチ名
だけ使っていれば状態の切り替えを簡単に行う事ができます。
・Gsw
カレントブランチのセッションを保存、ブランチの切り替え、新しいブランチのセッションを復元。
・Gsw!
Gsw
の動作でセッションの保存をスキップし、ブランチの切り替えと新しいブランチのセッションを復元。
・GswSave
現在の状態をカレントブランチのセッションとして保存。
・GswLoad
カレントブランチのセッションを復元。
現状ヘルプドキュメントが無かったり作りこみの余地はあるのですが、これから徐々に改善していくつもりです。
最後に
プラグインを作るにあたって、困った時にググればすぐに日本語の記事がヒットする環境があるというのはありがたい事だなとすごく思いました。 Vimの諸先輩方に感謝です。
We're hiring!
自分はVim好きなのでVimの記事を書かせてもらいましたが、社内ではもちろん各自好きなエディタを使って開発を行っています!
クラウドソーシングサイトのクラウドワークスでは公開できそうな機能を積極的に切り出してOSS化する事が好きなエンジニアを募集しています。