Proposed tip Please edit this page to improve it, or add your comments below (do not use the discussion page).
created February 5, 2013 · complexity basic · version 7.0
Daily I need to switch between different git projects. This script automatically saves Vim sessions per git directory.
Usage[]
- Starting Vim with no filename argument in a git directory will load a previously stored session if one exists.
- Exiting Vim (with no filename argument given at invocation) in a git directory will store the current session.
- Starting Vim with a filename argument does not restore or save a session.
$HOME/.vim/sessions
must exist.
Script[]
function! FindProjectName() let s:name = getcwd() if !isdirectory(".git") let s:name = substitute(finddir(".git", ".;"), "/.git", "", "") end if s:name != "" let s:name = matchstr(s:name, ".*", strridx(s:name, "/") + 1) end return s:name endfunction " Sessions only restored if we start Vim without args. function! RestoreSession(name) if a:name != "" if filereadable($HOME . "/.vim/sessions/" . a:name) execute 'source ' . $HOME . "/.vim/sessions/" . a:name end end endfunction " Sessions only saved if we start Vim without args. function! SaveSession(name) if a:name != "" execute 'mksession! ' . $HOME . '/.vim/sessions/' . a:name end endfunction " Restore and save sessions. if argc() == 0 autocmd VimEnter * call RestoreSession(FindProjectName()) autocmd VimLeave * call SaveSession(FindProjectName()) end