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

VimでGitのブランチ毎にセッションを簡単に保持できるようにする

$
0
0

この記事はクラウドワークス Advent Calendar 2015 10日目の記事になります。
趣味のdotfilesいじりの中で、最近使い始めたVimの設定の紹介です。

背景

Gitで管理されているディレクトリ下で作業している時、あるブランチの変更はレビュー待ちだから新しいブランチを切って別の作業を進めよう、なんて事を繰り返していたら、あれよあれよと言う間にブランチが増えて、いつの間にか複数のブランチを股にかけて作業をしているという事がありますが、そうなった時に一度でもVimを閉じようものなら、作業しやすいように積んでいたバッファとかタブの順番とかウィンドウの状態が全てまっさらになってしまうので、再度作業しやすい状態にするという作業が繰り返されて結構なストレスになっていました。こういう繰り返しの作業は撲滅したいです。

vim-sessionを使用して快適にする

Vimmksessionというコマンドを使ってVimの状態(session)を保存することはできますが、そのsessionを扱いやすくしてくれるプラグインもあるので、今回はvim-sessionを使って改善する事にしました。

インストール

NeoBundle 'xolox/vim-session', {
  \ 'depends': 'xolox/vim-misc'
\ }

設定

" session保存ファイル名letg:session_default_name ='.session'" session保持ファイルの拡張子letg:session_extension ='.vim'" session保存ディレクトリを現在のディレクトリにするletg:session_directory = getcwd()" vim終了時に自動保存しないletg:session_autosave ='no'" 引数なしでvimを起動した時にセッションを復元しないletg:session_autoload ='no'" 1分間に1回自動保存をしないletg:session_autosave_periodic =0

上記のような設定を行ってからVimのコマンドラインモードでSaveSessionコマンドを実行すると、カレントディレクトリに.session.vimというファイルが作成されてVimの状態が保存されるようになります。復元したい場合はOpenSession .sessionです。

fugitive.vimを使用して更に快適にする

ここまでの設定でひとまず状態の保存と復元がやりやすくなったのですが、まだいまいち使い勝手が良くありません。やりたいのは複数のブランチを股にかけて作業するような時に、簡単に状態を保存・復元できるようにする事なのでVim用のgitラッパープラグインであるfugitive.vimを使って更に改善してみます。

インストール

NeoBundle 'tpope/vim-fugitive'

設定

" session保存ファイル名letg:session_default_name ='.default.session'" session保持ファイルの拡張子letg:session_extension ='.vim'" session保存ディレクトリを現在のディレクトリにするletg:session_directory = getcwd()" vim終了時に自動保存しないletg:session_autosave ='no'" 引数なしでvimを起動した時にセッションを復元しないletg:session_autoload ='no'" 1分間に1回自動保存をしない(する場合は1)letg:session_autosave_periodic =0function!s:save_session(...)ifa:0let session_name =a:1else    " fugitive.vimの機能を使っているのはブランチ名を取得する部分のみ    " substitute(system('git rev-parse --abbrev-ref HEAD'), '\n', '', 'g')などで代替可能let session_name = fugitive#head()endif strlen(session_name)
    execute 'SaveSession .'.session_name.'.session'else
    SaveSession
  endifendfunctionfunction!s:load_session(...)ifa:0let session_name =a:1elselet session_name = fugitive#head()endif strlen(session_name)
    execute 'OpenSession .'.session_name.'.session'else
    execute 'OpenSession '.g:session_default_name
  endifendfunction

command!-nargs=? SaveS calls:save_session(<f-args>)
command!-nargs=? LoadS calls:load_session(<f-args>)

この設定で新しくSaveSLoadSというコマンドが定義されます。SaveSLoadSは引数なしで実行すると.#{現在のブランチ名}.session.vimというファイル名で状態の保存と復元を行うので、ブランチ毎の状態を簡単に扱う事ができるようになります。これでやっと使いやすくなりました。

まとめ

Vimを使っている時間は長いので、小さな改善でもすぐに効果が実感できるのがいい所です。

参考URL


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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