2012-12-04 24 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 &rtp =~ 'plugin-name' 
    ... 
endif 

これは、それが唯一のvimscriptコードを持っているプラ​​グインで動作するという利点を有する:ちょうど手でプラグインがあなたのruntimepathであれば、あなたも決定する正規表現を使用することの代替として

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

+ 1。 Vundle経由でSyntasticがインストールされているかどうかを確認するサンプル: 'if!empty(glob(expand(" :p:h ")。" /.vim/bundle/syntastic "))'。 ([ここ](http://superuser.com/a/120011/4160)を参照してください)。 –

0

ディレクトリにあり、関数呼び出し時に自動ロードスニペットがロードされてから.vimrcが最初に解析されたときには検出されません。