Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Gitのブランチを元にセッション管理を行うgit-switcher.vimプラグインを作った話

$
0
0

Vimのセッション管理には session.vimを使っていたのですが、Git管理下のディレクトリで上手い具合にセッションを扱おうとするには物足りなかったので、ブランチ毎のセッション管理を簡単に行う git-switcher.vimというプラグインを作りました。

インストール

お使いのプラグインマネージャでインストールするか、vim.orgからプラグインをダウンロードして下さい。

vim-plugの場合

Plug 'ToruIwashita/git-switcher.vim'

使い方

Git管理下のディレクトリ上でVimを起動して、セッションを保存したくなったらGswSaveを実行しセッションを保存します。後はブランチを切り替える時にGswコマンドを使ってブランチを切り替えるだけです。
Gswコマンド実行時、切り替えるブランチにマッチするセッションが保存されている場合にブランチ切り替えに追随してセッションがロードされます。

また、Gswコマンドはデフォルトでブランチ切り替え時にセッションを保存するかの確認を行うので、GswSaveコマンドを使わずGswコマンドだけでもセッションの保持・復元を行えます。

git-switcher.vimサンプル

代表的なコマンドとオプションについて

コマンド

  • Gsw[!] <branch-name>
    作業ブランチを切り替えます。切り替え時にブランチと同名のセッションが保存されていた場合は同時にそのセッションをロードします。また、切り替え時に対象のブランチがローカルに存在しない場合は、新しいブランチを作成して切り替えます。

  • GswRemote[!] <branch-name>
    リモートリポジトリにあるブランチをローカルリポジトリにcheckoutします。その時、取得したブランチと同名のセッションが保存されている場合は、同時にそのセッションをロードします。

  • GswSave [session-name]
    現在の作業ブランチ名でセッションを保存します。引数を与えた場合は与えられた文字列をセッション名として保存します。

  • GswLoad [session-name]
    現在の作業ブランチ名のセッションを復元します。引数を与えた場合は与えられた文字列をセッション名として復元します。

  • GswDeleteSession[!] <session-name>
    指定されたセッションを削除します。

  • GswDeleteSessionsIfBranchNotExist[!]
    保存したセッションのうちローカルに同名のブランチが存在しないものを削除します。

オプション

# セッションを保存するディレクトリパス。
g:gsw_sessions_dir = $HOME.'/.cache/vim/git_switcher'

# Gswコマンド実行時にセッションの保存の確認を行う。デフォルトはyes。
g:gsw_save_session_confirm = 'yes'

# vim起動時のセッション自動ロード設定。yes、no、confirmを設定可能でデフォルトはno。
g:gsw_autoload_session = 'no'

# vim起動時保存したセッションのうちローカルに同じ名前のブランチが存在しないものを削除する。yes、no、confirmを設定可能でデフォルトはno。
g:gsw_autodelete_sessions_if_branch_not_exist = 'no'

最後に

git-switcher.vim はGitのブランチを元にセッション管理を行うプラグインですが、通常のセッションの管理を session.vim、git関連のセッション管理を git-switcher.vim というように併用して使っていくのは微妙だったので、Git管理のディレクトリでなくともGswSaveGswLoadなどの一部のコマンドは動くようにしてあり、セッション管理は git-switcher.vim 一本でいけるようになっています。

良かったら使ってみて下さい。バグや要望などありましたら是非githubへの投稿お願いします。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>