【问题标题】:VimL: Checking if function existsVimL:检查函数是否存在
【发布时间】:2012-11-22 12:27:44
【问题描述】:

现在我正在清理我的 .vimrc 文件,以确保它在大多数系统上都兼容。

在我的状态栏中,我使用了另一个插件设置的函数,this plugin 引入的 GitBranchInfoString() 函数。

我想做的是检查是否设置了此功能,然后才将其添加到状态行。它会在它自己的行中,所以我只需要检查它。

最简单的方法是什么?

感谢您的帮助!

编辑:

我有以下几点:

if exists('*GitBranchInfoString')
    let &stl.='%{GitBranchInfoString()}'
endif

【问题讨论】:

    标签: vim vim-plugin


    【解决方案1】:

    使用

    if exists("*GitBranchInfoString")
        " do stuff here
    endif
    

    【讨论】:

    • 它会检查它,但由于某种原因它不会将它应用于状态行。我用我所拥有的更新了问题。
    • @Eduan vimrc 是在加载任何插件之前获取的。在VimEnter 事件上使用此条件,将状态行内容放入~/.vim/after/plugin/statusline.vimstatusline 可以是任何名称)或在检查之前执行runtime plugin/git-branch-info.vim(虽然它会禁止您使用--noplugin 选项禁用此插件;其他解决方案不会)。
    • 我明白了,我稍后会尝试,并给你任何反馈。 :)
    • 如需更完整的答案:superuser.com/questions/552323/…
    【解决方案2】:

    您也可以使用正则表达式来确定手头的插件是否在您的runtimepath 中:

    if &rtp =~ 'plugin-name'
        ...
    endif
    

    这样做的好处是它可以与在autoload 目录中只有 vimscript 代码的插件一起使用,而在最初解析 .vimrc 时无法检测到这些插件,因为自动加载 sn-ps 是在函数调用。

    【讨论】:

      【解决方案3】:

      当前选择的答案对我不起作用(使用 Vim 7.4 / Ubuntu)。 我相信那是因为:

      .vimrc 是在任何插件加载之前获取的

      正如@ZyX 在评论中指出的那样。

      我的首选方法是检查插件文件是否存在。 我发现这比在外部文件中编写单独的函数更干净。

      if !empty(glob("path/to/plugin.vim"))
         echo "File exists."
      endif
      

      【讨论】:

      • +1。检查 Syntastic 是否通过 Vundle 安装的示例:if !empty(glob(expand("<sfile>:p:h") . "/.vim/bundle/syntastic"))。 (见here。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2011-10-23
      • 2010-11-10
      • 2014-02-18
      • 2015-07-24
      • 1970-01-01
      相关资源
      最近更新 更多