2012-12-04 81 views
17

现在我正在清理我的.vimrc文件,以确保它在大多数系统上兼容。VimL:检查功能是否存在

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

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

完成此操作最简单的方法是什么?

感谢您的帮助!

编辑:

我有以下几点:

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

回答

25

使用

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

它会检查它,但由于某种原因它不适用于状态行。我更新了我所拥有的问题。 – greduan

+5

@Eduan vimrc在加载任何插件之前都会被提供。在'VimEnter'事件中使用这个条件,把statusline的东西放到'〜/ .vim/after/plugin/statusline.vim'('statusline'可以是任何名字)或者'runtime plugin/git-branch-info.vim'在检查之前(它会禁止你用'--noplugin'选项禁用这个插件;其他解决方案则不会)。 – ZyX

+0

我明白了,我会稍后再尝试,并给你任何反馈。 :) – greduan

6

当前选择的答案不适合我(访问Vim 7.4/Ubuntu的)工作。 我相信这是因为:任何插件加载

以前那样@ZyX指出这在评论

的.vimrc其来源。

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

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

+ 1。检查Syntastic是否通过Vundle安装的示例:'if!empty(glob(expand(“:p:h”)。“/.vim/bundle/syntastic”))'。 (请参阅[这里](http://superuser.com/a/120011/4160)。) –

0

只是作为一种替代您还可以使用正则表达式来决定,如果手头的插件是在你的runtimepath

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

这具有可与插件,只有vim脚本代码的好处在autoload目录中,而该目录在进行函数调用时加载自动加载代码片段之后最初分析.vimrc时无法检测到。