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, \'printf("%'.len(len(sessions)-1).'u %s", v:key, v:val)') echo join(sessions, "\n") endfunction let s:_functions['s:PrintSessions']=function('s:PrintSessions') autocmd VimLeavePre * call s:MakeSession() command -nargs=? -bang LoadSession call s:LoadSession(<bang>0, <q-args>) command -bar PrintSessions call s:PrintSessions() let s:_commands+=['LoadSession', 'PrintSessions'] endif "▲2 I am going to evolve this into plugin sometime. Original message: > On Apr 15, 1:43 pm, ZyX <zyx....@gmail.com> wrote: > > Reply to message «syntax coloring», > > sent 11:06:33 15 April 2011, Friday > > > > by rameo: > > > When I start VIM it shows my tabs and reloads my buffers from the last > > > time. > > > > > > I use a session to do this. > > > > > > au VimEnter * exe "so d:\\Session.vim" > > > au VimLeave * exe "'mksession! d:\\Session.vim'" > > > > You have made just the same mistake as me some time ago: all > > filetype-related files are loaded using an autocommand, but by default > > no autocommands are allowed when you are executing an autocommand, so > > you should add `nested' just after the pattern. By the way, why do you > > use `exe'? The following works as well: > > augroup SaveRestoreSessions > > autocmd! > > autocmd VimEnter * nested source D:\session.vim > > autocmd VimLeave * nested mksession! D:\session.vim > > augroup END > > > > See `:h autocmd-nested' for more details. > > > > Original message: > > > When I start VIM it shows my tabs and reloads my buffers from the last > > > time. > > > > > > I use a session to do this. > > > > > > au VimEnter * exe "so d:\\Session.vim" > > > au VimLeave * exe "'mksession! d:\\Session.vim'" > > > > > > My reopened files do not have syntax coloring. > > > I have to do ":e" in every file where I need syntax coloring to view > > > syntax coloring. > > > > > > I know that I can add "localoptions" in sessionoptions but this slows > > > down my vim (I noted that it uses 20-25% more CPU). Without > > > "localoptions" my vim is much faster. > > > > > > How do you resolve this? > > > Don't you use sessions? > > > > signature.asc > > < 1KViewDownload > > Great! It does work. > Thanks a lot! > > Please let me ask you one more question... > How do you close this session and reopens a custom one (happens once > in a while)?
signature.asc
Description: This is a digitally signed message part.