2012-12-04 9 views
17

gerade bereinige ich meine .vimrc Datei, um sicherzustellen, dass es auf den meisten Systemen kompatibel ist.VimL: Überprüfen, ob Funktion existiert

In meiner Statuszeile verwende ich eine Funktion, die ein anderes Plugin einstellt, die GitBranchInfoString() Funktion, die von this plugin eingeführt wird.

Was ich tun möchte, ist zu überprüfen, ob diese Funktion eingestellt ist, und nur dann fügen Sie es der Statuszeile hinzu. Es wäre in seiner eigenen Linie, also muss ich nur nachsehen.

Was wäre der einfachste Weg, dies zu erreichen?

Vielen Dank für Ihre Hilfe!

EDIT:

Ich habe folgendes:

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

Antwort

25

Verwenden

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

Es überprüft es, aber aus irgendeinem Grund gilt es nicht für die Statuszeile. Ich habe die Frage mit dem, was ich habe, aktualisiert. – greduan

+5

@Eduan vimrc wird bezogen, bevor Plugins geladen werden. Verwenden Sie diese Bedingung für das 'VimEnter' Event, setzen Sie statusline stuff in' ~/.vim/after/plugin/statusline.vim' ('statusline' kann ein beliebiger Name sein) oder' Runtime plugin/git-branch-info.vim' vor der Überprüfung (es wird Ihnen verbieten, dieses Plugin mit der Option '--noplugin' zu deaktivieren; andere Lösungen nicht). – ZyX

+0

Ich sehe, ich werde das später versuchen und Ihnen ein Feedback geben. :) – greduan

6

Die aktuell gewählte Antwort für mich nicht funktioniert (mit Vim 7.4/Ubuntu). Ich glaube, das ist, weil:

.vimrc bezogen wird, bevor Plugins

geladen werden als @ZyX dies in einem Kommentar zur Kenntnis genommen.

Meine bevorzugte Methode ist nur überprüfen Sie für das Vorhandensein der Plugin-Datei. Ich finde diesen Reiniger als eine separate Funktion in einer externen Datei schreiben.

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

+ 1. Beispiel für die Überprüfung, ob Syntastic über Vundle installiert wird: 'if! Empty (glob (expand (" : p: h ")." /.vim/bundle/syntastic "))'. (Siehe [hier] (http://superuser.com/a/120011/4160).) –

0

Gerade als Alternative können Sie auch eine regexp verwenden, um zu entscheiden, ob die Plug-in der Hand in Ihrem runtimepath:

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

Dies hat den Vorteil, dass es mit Plugins funktioniert, die nur vimscript Code haben im Verzeichnis autoload, das wiederum nicht erkannt werden kann, wenn .vimrc anfänglich geparst wird, da die Autoload-Snippets zum Zeitpunkt eines Funktionsaufrufs geladen werden.