created January 31, 2005 · complexity basic · author Ivan Tishchenko · version 6.0
I often use vimsession-files to save set of options, buffers, etc, that are specific for each job (see :help :mksession). To save some additional settings, which are not saved in vimsession (like commands, autocommands, functions), I use vimsession-extra file. When I want to modify that extra-file, I had to type something like :new <c-r>=v:this_session<CR>, then edit commandline to get proper extra-file name and edit it. It was tiring. So I wrote this plugin:
command! -bar SessSave call SessSave()
function! SessSave()
if v:this_session==""
call confirm("There is no loaded session","&Ok",1)
return
endif
if 2==confirm('Save session '.v:this_session.'?',"&No\n&Yes",1)
exe 'mksession! '.v:this_session
call confirm('Session '.v:this_session.' saved.','&Ok',1)
endif
endfunction
function! SessExtraFname()
if v:this_session==""
call confirm("There is no loaded session","&Ok",1)
return ''
endif
return substitute(v:this_session,'\.[^.]*$','x.vim','')
endfunction
command! -bar SessExtraOpen exe 'new '.SessExtraFname()
command! -bar SessExtraReread exe 'source '.SessExtraFname()
I also put following mapping there:
nmap <c-z>l :SessSave<CR>
Of course, you can change lhs to whatever you want, or add some extra mappings, for example for SessExtraOpen or SessExtraReread.
Comments[]
See also VimTip238.
Taking in account that wonderful VimTip879 we may change definition of SessExtraOpen so that it sets up autocommand which will reload our extra-file each time we modify it:
command! -bar SessExtraOpen call SessExtraOpen()
function! SessExtraOpen()
exe 'new '.SessExtraFname()
augroup SessAuGroup
autocmd!
let fn=SessExtraFname()
if has("win32")
let fn=substitute(fn,'\\\ze\S','/','g')
endif
execute "autocmd BufLeave ".fn." source ".fn
augroup END
endfunction