LoginSignup
34
17

More than 5 years have passed since last update.

Vimのセッション機能を使う

Last updated at Posted at 2018-12-14

Vim Advent Calendar 2018 14日目 代打記事です。

みなさん、vimにセッション機能があるのはご存知でしょうか?
便利そうなので使ってみようと思っていますが、せっかくなのでVim scriptの勉強も兼ねてコマンド作ってみました。

fzf.vimを使うとこんな感じになります。
image.png

以下のコードをvimrcに貼ればそのまま使えるとおもいます。

[2018-12-22] 追記

プラグイン化しました。
また、記事中のソース若干変更は入っています。
https://github.com/skanehira/vsession

セッションファイル保存先

~/.vim/sessions/配下にセッションファイルを保存します。
ディレクトリがなければ作るようにしています。

" session path
let s: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 call s:saveSession(<f-args>)
function! s:saveSession(file)
    execute 'silent mksession!' s:session_path . '/' . a:file
endfunction

セッションの復元

:LoadSession ~/.vim/sessions/test1.vimという感じで、セッションファイルのパスを指定して読み込みます。

" load session
command! -nargs=1 LoadSession call s:loadSession(<f-args>)
function! s:loadSession(file)
    execute 'silent source' a:file
endfunction

fzf.vim版はこちらです。

command! FloadSession call fzf#run({
\  'source': split(glob(s:session_path . "/*"), "\n"),
\  'sink':    function('s:loadSession'),
\  'options': '-m -x +s',
\  'down':    '40%'})

セッションの削除

:DeleteSession ~/.vim/sessions/test1.vimという感じで、削除します。

" delete session
command! -nargs=1 DeleteSession call s:deleteSession(<f-args>)
function! s:deleteSession(file)
    call delete(expand(a:file))
endfunction

fzf.vim版はこちらです。

command! FdeleteSession call fzf#run({
\  'source': split(glob(s:session_path . "/*"), "\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

最後に

初めてVim script書いたので、おかしなところがありましたら教えて頂けると助かります。
ちなみに、vimのセッションプラグインはありました。

使ってないのですが、良さげなので興味ある方はどうぞー

https://github.com/Shougo/unite-session
https://github.com/xolox/vim-session

34
17
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
17