2012-12-04 121 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時無法檢測到。