この記事はクラウドワークス 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保存ファイル名
let g:session_default_name = '.session'
" session保持ファイルの拡張子
let g:session_extension = '.vim'
" session保存ディレクトリを現在のディレクトリにする
let g:session_directory = getcwd()
" vim終了時に自動保存しない
let g:session_autosave = 'no'
" 引数なしでvimを起動した時にセッションを復元しない
let g:session_autoload = 'no'
" 1分間に1回自動保存をしない
let g:session_autosave_periodic = 0
上記のような設定を行ってからVim
のコマンドラインモードでSaveSession
コマンドを実行すると、カレントディレクトリに.session.vim
というファイルが作成されてVim
の状態が保存されるようになります。復元したい場合はOpenSession .session
です。
fugitive.vim
を使用して更に快適にする
ここまでの設定でひとまず状態の保存と復元がやりやすくなったのですが、まだいまいち使い勝手が良くありません。やりたいのは複数のブランチを股にかけて作業するような時に、簡単に状態を保存・復元できるようにする事なのでVim
用のgit
ラッパープラグインであるfugitive.vim
を使って更に改善してみます。
インストール
NeoBundle 'tpope/vim-fugitive'
設定
" session保存ファイル名
let g:session_default_name = '.default.session'
" session保持ファイルの拡張子
let g:session_extension = '.vim'
" session保存ディレクトリを現在のディレクトリにする
let g:session_directory = getcwd()
" vim終了時に自動保存しない
let g:session_autosave = 'no'
" 引数なしでvimを起動した時にセッションを復元しない
let g:session_autoload = 'no'
" 1分間に1回自動保存をしない(する場合は1)
let g:session_autosave_periodic = 0
function! s:save_session(...)
if a:0
let session_name = a:1
else
" fugitive.vimの機能を使っているのはブランチ名を取得する部分のみ
" substitute(system('git rev-parse --abbrev-ref HEAD'), '\n', '', 'g')などで代替可能
let session_name = fugitive#head()
end
if strlen(session_name)
execute 'SaveSession .'.session_name.'.session'
else
SaveSession
endif
endfunction
function! s:load_session(...)
if a:0
let session_name = a:1
else
let session_name = fugitive#head()
end
if strlen(session_name)
execute 'OpenSession .'.session_name.'.session'
else
execute 'OpenSession '.g:session_default_name
endif
endfunction
command! -nargs=? SaveS call s:save_session(<f-args>)
command! -nargs=? LoadS call s:load_session(<f-args>)
この設定で新しくSaveS
とLoadS
というコマンドが定義されます。SaveS
とLoadS
は引数なしで実行すると.#{現在のブランチ名}.session.vim
というファイル名で状態の保存と復元を行うので、ブランチ毎の状態を簡単に扱う事ができるようになります。これでやっと使いやすくなりました。
まとめ
Vim
を使っている時間は長いので、小さな改善でもすぐに効果が実感できるのがいい所です。