Session 从stdin读取时防止vim加载会话

Session 从stdin读取时防止vim加载会话,session,vim,stdin,Session,Vim,Stdin,我最近一直在定制我的.vimrc,我喜欢:mksession给我的功能和便利。我当前在我的.vimrc中有以下自动加载会话: function! LoadSession() if argc() == 0 && ! &diff

我最近一直在定制我的
.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(帮助)
)并没有给我带来任何帮助,所以我希望这里的一些善良的灵魂能给我一些启示。

我一直在处理vim启动时的加载会话,最终决定这不是一个好主意,主要是因为它不能很好地与插件一起工作

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

map <leader>ss :call CustomSessionSave()<CR>
map <leader>sl :call CustomSessionRestore()<CR>
map <leader>sd :call CustomSessionDelete()<CR>
映射ss:调用CustomSessionSave() 映射sl:调用CustomSessionRestore() 映射sd:调用CustomSessionDelete() 也许这有助于

我正在使用的服务器提供了扩展会话处理。除其他外,它询问是否应在Vim启动时恢复先前保存的会话


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

我发现works的功能是

autocmd StdinReadPre * let g:my_is_stdin = 1

.vimrc
中,然后在会话保存/加载功能中测试
是否存在(“g:my_is_stdin”)
。请注意,这些程序也必须通过事件上的
autocmd
来运行
VimLeave
/
VimEnter
,才能使此方案起作用。

我正在试用session.vim,现在还不能使自动加载按我想要的方式工作,但这看起来很有希望,谢谢。谢谢,但我正在寻找一个自动加载解决方案。顺便问一下:您正在调用的
CustomSessionXXX()
函数是什么?没什么特别的,我只是在调用
mksession
(保存时)然后在还原时打开它之前关闭NERDTree。