如何判断vim脚本何时被采购

时间:2014-02-01 06:29:07

标签: vim

如何在启动时或启动后判断我的脚本是否来源?

例如,我想编写一个响应ttymouse设置的函数,比如CheckMouseSetting()。但是,在启动脚本加载后,这个设置奇怪地加载了 - 我不知道为什么。我可以使用VimEnter自动命令,但如果用户只是在启动后获取此文件,则不会激活。我可以同时拥有,即:

call CheckMouseSetting()
au * VimEnter call CheckMouseSetting()

但这并不理想,因为它可能产生不需要的错误信息 - 因此,我的问题。

2 个答案:

答案 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更容易,因为它避免了路径问题。