4

我最近一直在定制我的很多东西,并且喜欢它给我.vimrc的力量和便利。:mksession我目前在我.vimrc的自动加载会话中有以下内容:

function! LoadSession()                                                              
  if argc() == 0 && ! &diff                                                                                                                                                                                                                
    let g:sessiondir = $HOME . "/.vim/sessions" . getcwd()                           
    let g:sessionfile = g:sessiondir . "/session.vim"                                
    if (filereadable(g:sessionfile))                                                 
      exe 'source ' g:sessionfile                                                    
    else                                                                             
      echo "No session loaded." + argc() + argv()                                    
    endif                                                                            
  else                                                                               
    let g:sessionfile = ""                                                           
    let g:sessiondir = ""                                                            
    call ResCur()                                                                    
  endif                                                                              
endfunction

然后我用au VimEnter * nested :call LoadSession(). 这适用于大多数情况,除非 vim 从stdin. 在这种情况下,会话仍在加载,但是我想防止这种情况发生。我原以为argc() == 0条件就足够了,但似乎-正在调用该 vim 来读取stdin原因argc()而不返回 0。大便!;]

我已经尝试了各种各样的事情argv(0)(在这种情况下它是空的 - 为什么?),试图找到识别 vim 正在读取的方法stdin(它显示了它正在这样做的消息,但我无法弄清楚如何利用它)等,但到目前为止还没有运气。

我确定我在这里遗漏了一些非常明显的东西,但是谷歌和 vim:help并没有让我到任何地方,所以我希望这里的某个善良的灵魂可以为我阐明这一点。

4

3 回答 3

3

我发现的作品有

autocmd StdinReadPre * let g:my_is_stdin = 1

在你的.vimrc,然后exists("g:my_is_stdin")在你的会话保存/加载功能中测试。请注意,这些也必须通过autocmd事件运行VimLeave/VimEnter才能使该方案起作用。

于 2014-10-31T11:12:14.217 回答
1

我使用的session.vim 插件提供了扩展的会话处理。其中,它询问是否应该在 Vim 启动时恢复以前保存的会话。

但是,除非您需要插件的其他功能,否则您使用映射触发还原的解决方法也可能很好。

于 2012-12-18T02:07:19.820 回答
0

在 Vim 启动时我一直在摆弄加载会话,最终认为这不是一个好主意,主要是因为它不适用于插件。

我最终添加了一些用于保存和恢复会话的映射。这样做的好处是,当您进行快速编辑时,您不必在会话中搞乱。

map <leader>ss :call CustomSessionSave()<CR>
map <leader>sl :call CustomSessionRestore()<CR>
map <leader>sd :call CustomSessionDelete()<CR>

也许这有帮助

于 2012-12-17T14:25:43.583 回答