(Created page with "video|right|300px right|300px Daily I need to switch between different [http://git-scm.com/ git] projects. This script automatically...") |
JohnBeckett (talk | contribs) (Fix.) |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
+ | {{TipProposed |
||
− | [[File:Placeholder|video|right|300px]] [[File:Placeholder|right|300px]] |
||
+ | |id=0 |
||
⚫ | |||
+ | |previous=0 |
||
+ | |next=0 |
||
+ | |created=February 5, 2013 |
||
+ | |complexity=basic |
||
+ | |author= |
||
+ | |version=7.0 |
||
+ | |subpage=/2013 |
||
+ | |category1= |
||
+ | |category2= |
||
+ | }} |
||
⚫ | |||
− | == |
+ | ==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. |
⚫ | |||
− | == |
+ | ==Script== |
⚫ | |||
− | |||
− | == Script == |
||
<pre> |
<pre> |
||
function! FindProjectName() |
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) |
|
⚫ | |||
− | let s:name = matchstr(s:name, ".*", strridx(s:name, "/") + 1) |
||
⚫ | |||
⚫ | |||
− | |||
⚫ | |||
endfunction |
endfunction |
||
− | " Sessions only restored if we start |
+ | " Sessions only restored if we start Vim without args. |
function! RestoreSession(name) |
function! RestoreSession(name) |
||
− | + | if a:name != "" |
|
− | + | if filereadable($HOME . "/.vim/sessions/" . a:name) |
|
− | + | execute 'source ' . $HOME . "/.vim/sessions/" . a:name |
|
⚫ | |||
end |
end |
||
⚫ | |||
endfunction |
endfunction |
||
− | " Sessions only saved if we start |
+ | " Sessions only saved if we start Vim without args. |
function! SaveSession(name) |
function! SaveSession(name) |
||
− | + | if a:name != "" |
|
− | + | execute 'mksession! ' . $HOME . '/.vim/sessions/' . a:name |
|
− | + | end |
|
endfunction |
endfunction |
||
− | " |
||
" Restore and save sessions. |
" Restore and save sessions. |
||
− | " |
||
if argc() == 0 |
if argc() == 0 |
||
− | + | autocmd VimEnter * call RestoreSession(FindProjectName()) |
|
− | + | autocmd VimLeave * call SaveSession(FindProjectName()) |
|
end |
end |
||
</pre> |
</pre> |
||
+ | |||
+ | ==Comments== |
Latest revision as of 03:38, 1 February 2014
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