如何在启动时或启动后判断我的脚本是否来源?
例如,我想编写一个响应ttymouse设置的函数,比如CheckMouseSetting()。但是,在启动脚本加载后,这个设置奇怪地加载了 - 我不知道为什么。我可以使用VimEnter自动命令,但如果用户只是在启动后获取此文件,则不会激活。我可以同时拥有,即:
call CheckMouseSetting()
au * VimEnter call CheckMouseSetting()
但这并不理想,因为它可能产生不需要的错误信息 - 因此,我的问题。
答案 0 :(得分:0)
澄清:您希望函数知道它是在启动时还是以后来源,对吧?
我认为你有一点盲点:最简单的解决方案是告诉功能:
:call CheckMouseSetting('myscript')
:au * VimEnter call CheckMouseSetting('VimEnter')
回复你的评论:如果你想知道文件的来源(在启动期间或交互式),那么你可以添加一个脚本本地变量:
:let s:source_count = exists('s:source_count') ? s:source_count + 1 : 1
:call CheckMouseSetting('myscript', s:source_count)
如果你真的想要一种更“自动”的方式来表达,那么@ romainl的评论就是目标。 (我想曾经有一段时间我是Bram以外唯一一个曾经读过这段帮助的人。)
答案 1 :(得分:0)
我会用一个保护变量解决这个问题,比如插件文件开头的多包含保护。
function! myplugin#CheckMouseSetting()
if exists('s:hasBeenChecked')
return
endif
let s:hasBeenChecked = 1
...
如果您在 autoload 脚本中定义此功能,则可以从VimEnter
事件调用此功能,也可以指示希望手动将其设置为call
的用户函数,比:source
/ :runtime
更容易,因为它避免了路径问题。