VimL:检查函数是不是存在

Posted

技术标签:

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

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

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

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

最简单的方法是什么?

感谢您的帮助!

编辑:

我有以下几点:

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

【问题讨论】:

【参考方案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。)

以上是关于VimL:检查函数是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查列上是不是存在函数

如何在编译时检查是不是存在可以使用特定参数集调用的函数?

C语言 检查文件是不是存在

R - 内部函数检查对象是不是存在

如何检查 SQL 数据库中是不是存在函数?

创建一个函数来检查表中是不是同时存在两个项目