この記事はクラウドワークス Advent Calendar 2015 10日目の記事になります。
趣味のdotfilesいじりの中で、最近使い始めたVim
の設定の紹介です。
背景
Git
で管理されているディレクトリ下で作業している時、あるブランチの変更はレビュー待ちだから新しいブランチを切って別の作業を進めよう、なんて事を繰り返していたら、あれよあれよと言う間にブランチが増えて、いつの間にか複数のブランチを股にかけて作業をしているという事がありますが、そうなった時に一度でもVim
を閉じようものなら、作業しやすいように積んでいたバッファとかタブの順番とかウィンドウの状態が全てまっさらになってしまうので、再度作業しやすい状態にするという作業が繰り返されて結構なストレスになっていました。こういう繰り返しの作業は撲滅したいです。
vim-session
を使用して快適にする
Vim
のmksession
というコマンドを使って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>)
この設定で新しくSaveS
とLoadS
というコマンドが定義されます。SaveS
とLoadS
は引数なしで実行すると.#{現在のブランチ名}.session.vim
というファイル名で状態の保存と復元を行うので、ブランチ毎の状態を簡単に扱う事ができるようになります。これでやっと使いやすくなりました。
まとめ
Vim
を使っている時間は長いので、小さな改善でもすぐに効果が実感できるのがいい所です。