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.vim
(statusline
可以是任何名称)或在检查之前执行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:检查函数是不是存在的主要内容,如果未能解决你的问题,请参考以下文章