Reply to message «Re: syntax coloring», 
sent 12:13:11 16 April 2011, Saturday
by rameo:

> Thank you..
> Nice to put the session file path in a variable.
> (The only drawback is that it seems not to be enable to expand
> variables as $HOME and $VIM)
Just use string concatenation (:h expr-.): `$HOME.'\vimsessions\main.vim'' 
instead of `'$HOME\vimsessions\main.vim''. And don't use $VIM, if your system 
is 
configured properly then you do not have write access to it at all.

Original message:
> On Apr 15, 10:42 pm, ZyX <[email protected]> wrote:
> > Reply to message «Re: syntax coloring»,
> > sent 00:32:32 16 April 2011, Saturday
> > 
> > by rameo:
> > > Is this the correct one?
> > > 
> > > augroup SaveRestoreSessions
> > > autocmd!
> > > autocmd VimEnter * nested source D:\Session.vim
> > > autocmd VimLeave * call ClearArgs()
> > > autocmd VimLeave * nested mksession! D:\Session.vim
> > > augroup END
> > > 
> > > function! ClearArgs()
> > >   if argc() != 0
> > >    argdel *
> > >   endif
> > > endfunction
> > 
> > Previous variant was also correct (working), but strange. It is better,
> > but why don't you use this instead:
> > 
> >     let sesfile='D:\Session.vim'
> >     augroup SaveRestoreSessions
> >         autocmd!
> >         autocmd VimEnter * nested :source `=sesfile`
> >         autocmd VimLeave * :if argc() | argdel * | endif | mksession!
> > `=sesfile` augroup END
> > 
> > Original message:
> > > On Apr 15, 10:02 pm, ZyX <[email protected]> wrote:
> > > > Reply to message «Re: syntax coloring»,
> > > > sent 23:29:29 15 April 2011, Friday
> > > > 
> > > > by rameo:
> > > > > I found a new way to integrate argdel:
> > > > > 
> > > > > augroup SaveRestoreSessions
> > > > > autocmd!
> > > > > autocmd VimEnter * nested source $VIM\vimfiles\sessions\Session.vim
> > > > > autocmd VimLeave * call MakeSession()
> > > > > autocmd VimLeave * nested mksession! $VIM\vimfiles\sessions
> > > > > \Session.vim
> > > > > augroup END
> > > > > 
> > > > > function! MakeSession()
> > > > >   if argc() != 0
> > > > >     execute 'argdel *'
> > > > >   endif
> > > > > endfunction
> > > > 
> > > > You are doing a strange things again:
> > > > 1. You should either rename `MakeSession' to `ClearArgs' (because
> > > > `MakeSession' will confuse somebody (maybe even you) who will read
> > > > you code as it does not makes any sessions) or, better, move
> > > > `mksession!' call inside a function. 2. Why are you again writing
> > > > `execute'? 3. You don't need `nested' for mksession, you need it
> > > > only for VimEnter. 4. Never write anything user-specific to
> > > > application folder, it may be purged by application update, removed
> > > > by the package manager (if any) or uninstaller, or you may have to
> > > > create more then one user on the machine.
> > > > 
> > > > Original message:
> > > > > On Apr 15, 9:14 pm, ZyX <[email protected]> wrote:
> > > > > > Reply to message «Re: syntax coloring»,
> > > > > > sent 23:02:40 15 April 2011, Friday
> > > > > > 
> > > > > > by rameo:
> > > > > > > Tnx.. this is what I added:
> > > > > > > autocmd VimLeave * if argc() != 0 | 'argdel *' endif
> > > > > > 
> > > > > > Reread help. This is false: you should not use strikes around
> > > > > > `argdel *' and you should have bar before `endif' just like you
> > > > > > have before `argdel'.
> > > > > > 
> > > > > > > I noted that (even after a buffer delete :bd) certain buffers
> > > > > > > do remain in "session.vim"
> > > > > > > I had no troubles anymore after removing "argdel *" and
> > > > > > > troubles again after having changed the script as above.
> > > > > > 
> > > > > > I know this issue. In this case you should have `argdel' before
> > > > > > mksession, I don't get why you have it *after*.
> > > > > > 
> > > > > > Original message:
> > > > > > > On Apr 15, 8:55 pm, ZyX <[email protected]> wrote:
> > > > > > > > Reply to message «Re: syntax coloring»,
> > > > > > > > sent 21:39:21 15 April 2011, Friday
> > > > > > > > 
> > > > > > > > by rameo:
> > > > > > > > > Still have a little problem.
> > > > > > > > > I had also a VimLeave argdel command in my _vimrc.
> > > > > > > > > 
> > > > > > > > > Is this correct?:
> > > > > > > > > 
> > > > > > > > > augroup SaveRestoreSessions
> > > > > > > > > autocmd!
> > > > > > > > > autocmd VimEnter * nested source D:\session.vim
> > > > > > > > > autocmd VimLeave * nested mksession! D:\session.vim
> > > > > > > > > autocmd VimLeave *  if argc() != 0 | exe 'argdel *'
> > > > > > > > > augroup END
> > > > > > > > > 
> > > > > > > > > btw tnx. for your script.
> > > > > > > > 
> > > > > > > > 1. Missing endif.
> > > > > > > > 2. You don't need `exe' here.
> > > > > > > > 3. I don't get why do you need this command at all.
> > > > > > > > 
> > > > > > > > Original message:
> > > > > > > > > On Apr 15, 5:43 pm, ZyX <[email protected]> wrote:
> > > > > > > > > > Reply to message «Re: syntax coloring»,
> > > > > > > > > > sent 19:13:18 15 April 2011, Friday
> > > > > > > > > > 
> > > > > > > > > > by rameo:
> > > > > > > > > > > Please let me ask you one more question...
> > > > > > > > > > > How do you close this session and reopens a custom one
> > > > > > > > > > > (happens once in a while)?
> > > > > > > > > > 
> > > > > > > > > > I don't use one continious vim session and don't load any
> > > > > > > > > > sessions at vim startup (the `just the same error' meant
> > > > > > > > > > that I used an autocommand in a similar way and got the
> > > > > > > > > > same error, not that I used the same code). Instead I
> > > > > > > > > > create a new session file almost each time when vim
> > > > > > > > > > exits and load one of created sessions at vim startup:
> > > > > > > > > > 1. due to virtual desktops I almost never close any of
> > > > > > > > > > my projects' windows, 2. I use vim to quickly edit
> > > > > > > > > > something from command-line, loading any sessions will
> > > > > > > > > > discard the most significant part of vim invocation
> > > > > > > > > > arguments for this use-case.
> > > > > > > > > > Saving session at vim exit is for the case when I have to
> > > > > > > > > > reload vim (mostly plugin or kernel updates).
> > > > > > > > > > Here is my code:
> > > > > > > > > > 
> > > > > > > > > >     "▶2 mksession
> > > > > > > > > >     if has('mksession')
> > > > > > > > > >         function s:InitSes()
> > > > > > > > > >             let sesdir=expand('~/.vimsessions')
> > > > > > > > > >             if !isdirectory(sesdir)
> > > > > > > > > >                 call mkdir(expand(sesdir), "", 0700)
> > > > > > > > > >             endif
> > > > > > > > > >             let sesfile=os#JoinPath(sesdir,
> > > > > > > > > > '.sessions.lst') let sessions=[]
> > > > > > > > > >             if filereadable(sesfile)
> > > > > > > > > >                 let sessions+=readfile(sesfile, 'b')
> > > > > > > > > >                 while !empty(sessions) &&
> > > > > > > > > > empty(sessions[-1]) call remove(sessions, -1)
> > > > > > > > > >                 endwhile
> > > > > > > > > >             endif
> > > > > > > > > >             let sessplitted=map(copy(sessions),
> > > > > > > > > >                         \'split(v:val,
> > > > > > > > > > ''\v%(\\@<!%(\\\\)*)@<=,'')') let
> > > > > > > > > > sesdirs=map(copy(sessplitted),
> > > > > > > > > > '((empty(v:val))?(""):(v:val[0]))') let
> > > > > > > > > > sesfiles=map(copy(sessplitted),
> > > > > > > > > > '((empty(v:val))?([]):(v:val[1:]))') execute "cd
> > > > > > > > > > ".fnameescape(resolve(fnamemodify('.', ':p'))) let
> > > > > > > > > > curdir=escape(fnamemodify('.', ':p'), ',\')
> > > > > > > > > >             return [sesdir, sesfile, sessions, sesdirs,
> > > > > > > > > > sesfiles, curdir] endfunction
> > > > > > > > > >         let
> > > > > > > > > > s:_functions['s:InitSes']=function('s:InitSes') function
> > > > > > > > > > s:MakeSession()
> > > > > > > > > >             let [sesdir, sesfile, sessions, sesdirs,
> > > > > > > > > > sesfiles, curdir]=s:InitSes() let
> > > > > > > > > > files=sort(map(filter(map(filter(range(1, bufnr('$')), \
> > > > > > > > > >     'getbufvar(v:val, "&bt")!=#"help"'), \
> > > > > > > > > > 'bufname(v:val)'), \
> > > > > > > > > > 'filereadable(v:val)'), \
> > > > > > > > > >  'escape(fnamemodify(resolve(fnamemodify(v:val, ":p")),
> > > > > > > > > > ":~:."), ",\\")'))
> > > > > > > > > >             if empty(files)
> > > > > > > > > >                 return
> > > > > > > > > >             endif
> > > > > > > > > >             let sesstr=join([curdir]+files, ',')
> > > > > > > > > >             let sindex=index(sessions, sesstr)
> > > > > > > > > >             if sindex==-1
> > > > > > > > > >                 let sindex=index(sessions, '')
> > > > > > > > > >             endif
> > > > > > > > > >             if sindex==-1
> > > > > > > > > >                 let sesname=os#JoinPath(sesdir,
> > > > > > > > > > len(sesdirs).'.vim') call add(sessions, sesstr)
> > > > > > > > > >             else
> > > > > > > > > >                 let sesname=os#JoinPath(sesdir,
> > > > > > > > > > sindex.'.vim') let sessions[sindex]=sesstr
> > > > > > > > > >             endif
> > > > > > > > > >             execute 'mksession! '.fnameescape(sesname)
> > > > > > > > > >             call writefile(sessions, sesfile, 'b')
> > > > > > > > > >         endfunction
> > > > > > > > > >         let
> > > > > > > > > > s:_functions['s:MakeSession']=function('s:MakeSession')
> > > > > > > > > > function s:LoadSession(bang, ...)
> > > > > > > > > >             let [sesdir, sesfile, sessions, sesdirs,
> > > > > > > > > > sesfiles, curdir]=s:InitSes() if a:0 &&
> > > > > > > > > > string(+a:1)==#a:1 &&
> > > > > > > > > > a:1<len(sessions) && \!empty(sessions[a:1])
> > > > > > > > > >                 let dirsessions=[[+a:1, sesdirs[a:1],
> > > > > > > > > > sessions[a:1]]] else
> > > > > > > > > >                 let dirsessions=filter(map(copy(sesdirs),
> > > > > > > > > >                             \              '[v:key,
> > > > > > > > > > v:val, sessions[v:key]]'), \        
> > > > > > > > > >  'v:val[1]==#curdir'. \                   ((a:0)?(' &&
> > > > > > > > > > v:val[2]=~?a:1'):(''))) endif
> > > > > > > > > >             if len(dirsessions)==1 ||
> > > > > > > > > > (!empty(dirsessions) && a:bang) let
> > > > > > > > > > sesid=dirsessions[0][0]
> > > > > > > > > >                 let sesname=os#JoinPath(sesdir,
> > > > > > > > > > sesid.'.vim') execute 'source '.fnameescape(sesname)
> > > > > > > > > > call delete(sesname)
> > > > > > > > > >                 if sesid==(len(sessions)-1)
> > > > > > > > > >                     call remove(sessions, -1)
> > > > > > > > > >                 else
> > > > > > > > > >                     let sessions[sesid]=""
> > > > > > > > > >                 endif
> > > > > > > > > >                 call writefile(sessions, sesfile, 'b')
> > > > > > > > > >             endif
> > > > > > > > > >         endfunction
> > > > > > > > > >         let
> > > > > > > > > > s:_functions['s:LoadSession']=function('s:LoadSession')
> > > > > > > > > > function s:PrintSessions()
> > > > > > > > > >             let [sesdir, sesfile, sessions, sesdirs,
> > > > > > > > > > sesfiles, curdir]=s:InitSes() call map(sessions,
> > 
> > ...
> > 
> > read more »
> > 
> >  signature.asc
> > < 1KViewDownload
> 
> Thank you..
> Nice to put the session file path in a variable.
> (The only drawback is that it seems not to be enable to expand
> variables as $HOME and $VIM)

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to