我最近一直在定制.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
并没有把我带到任何地方,所以我希望这里有一些善良的灵魂可以为我揭示这一点
答案 0 :(得分:3)
我发现的作品是
autocmd StdinReadPre * let g:my_is_stdin = 1
在您的.vimrc
中,然后在会话保存/加载功能中测试exists("g:my_is_stdin")
。请注意,必须通过事件autocmd
/ VimLeave
上的VimEnter
运行这些内容才能使此方案正常运行。
答案 1 :(得分:1)
我正在使用的session.vim plugin提供了扩展的会话处理功能。其中,它询问是否应该在Vim启动时恢复以前保存的会话。
但除非您需要插件的其他功能,否则使用映射触发恢复的解决方法也可能很好。
答案 2 :(得分:0)
我在Vim初创公司的加载会话上一直在努力,最终决定这不是一个好主意,主要是因为它不适合插件。
我最终添加了一些用于保存和恢复会话的映射。这样做有一个好处,就是当你进行快速编辑时,你不必乱用你的会话。
map <leader>ss :call CustomSessionSave()<CR>
map <leader>sl :call CustomSessionRestore()<CR>
map <leader>sd :call CustomSessionDelete()<CR>
也许这有帮助