Vim Advent Calendar 2018 14日目 代打記事です。
みなさん、vimにセッション機能があるのはご存知でしょうか?
便利そうなので使ってみようと思っていますが、せっかくなのでvimscriptの勉強も兼ねてコマンド作ってみました。
以下のコードをvimrcに貼ればそのまま使えるとおもいます。
セッションファイル保存先
~/.vim/sessions/
配下にセッションファイルを保存します。
ディレクトリがなければ作るようにしています。
" session pathlets:session_path= expand('~/.vim/sessions')if!isdirectory(s:session_path)call mkdir(s:session_path,"p")endif
セッションの保存
:SaveSession test1.vim
という感じで、セッションファイル名を指定して保存します。
同じファイル名を指定すると上書きされるのでご注意。
" save session
command!-nargs=1 SaveSession calls:saveSession(<f-args>)function!s:saveSession(file)
execute 'silent mksession!'s:session_path.'/'.a:fileendfunction
セッションの復元
:LoadSession ~/.vim/sessions/test1.vim
という感じで、セッションファイルのパスを指定して読み込みます。
" load session
command!-nargs=1 LoadSession calls:loadSession(<f-args>)function!s:loadSession(file)
execute 'silent source'a:fileendfunction
fzf.vim版はこちらです。
command! FloadSession call fzf#run({\'source': split(expand('~/.vim/sessions/*'),"\n"),\'sink':function('s:loadSession'),\'options':'-m -x +s',\'down':'40%'})
セッションの削除
:DeleteSession ~/.vim/sessions/test1.vim
という感じで、削除します。
" delete session
command!-nargs=1 DeleteSession calls:deleteSession(<f-args>)function!s:deleteSession(file)call delete(expand(a:file))endfunction
fzf.vim版はこちらです。
command! FdeleteSession call fzf#run({\'source': split(expand('~/.vim/sessions/*'),"\n"),\'sink':function('s:deleteSession'),\'options':'-m -x +s',\'down':'40%'})
キーマッピング
こんな感じでマッピングしたら楽です。
nnoremap <Leader>se:SaveSession
nnoremap <Leader>lse :FloadSession<CR>
参考記事
https://thinca.hatenablog.com/entry/20100201/1265009821
https://qiita.com/shinshin86/items/6e6cbdb77cb59b87d21f
http://nanasi.jp/articles/code/io/file-path.html
最後に
初めてvimscript書いたので、おかしなところがありましたら教えて頂けると助かります。
ちなみに、vimのセッションプラグインはありました。
使ってないのですが、良さげなので興味ある方はどうぞー
https://github.com/Shougo/unite-session
https://github.com/xolox/vim-session