VimL:检查函数是否存在

gre*_*uan 20 vim vim-plugin

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

在我的状态行中,我使用另一个插件设置的GitBranchInfoString()函数,该插件引入的函数.

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

实现这一目标的最简单方法是什么?

感谢你的帮助!

编辑:

我有以下内容:

if exists('*GitBranchInfoString')
    let &stl.='%{GitBranchInfoString()}'
endif
Run Code Online (Sandbox Code Playgroud)

ZyX*_*ZyX 28

使用

if exists("*GitBranchInfoString")
    " do stuff here
endif
Run Code Online (Sandbox Code Playgroud)

  • @Eduan vimrc是在加载任何插件之前获取的.在`VimEnter`事件中使用这个条件,把状态行的东西放到`〜/ .vim/after/plugin/statusline.vim`(`statusline`可以是任何名字)或者做`runtime plugin/git-branch-info.vim`在检查之前(它将禁止您使用`--noplugin`选项禁用此插件;其他解决方案不会). (5认同)

ber*_*kie 7

作为替代方案,您也可以使用正则表达式来确定手头的插件是否在您的runtimepath

if &rtp =~ 'plugin-name'
    ...
endif
Run Code Online (Sandbox Code Playgroud)

这样做的优点是它适用于autoload目录中只有 vimscript 代码的插件,而在最初解析 .vimrc 时无法检测到,因为自动加载片段是在函数调用时加载的。


use*_*385 6

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

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

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

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

if !empty(glob("path/to/plugin.vim"))
   echo "File exists."
endif
Run Code Online (Sandbox Code Playgroud)