2012-12-04 14 views
17

adesso sto pulendo il mio file .vimrc per assicurarsi che sia compatibile con la maggior parte dei sistemi.VimL: Verificando funzione esiste

Nella mia status, utilizzo una funzione impostata da un altro plug-in, la funzione GitBranchInfoString() introdotta da this plugin.

Quello che voglio fare è controllare se questa funzione è impostata, e solo allora aggiungerlo al statusline. Sarebbe nella sua stessa linea quindi ho solo bisogno di controllarlo.

quale sarebbe il modo più semplice per ottenere questo risultato?

Grazie per tutto il vostro aiuto!

EDIT:

Ho il seguente:

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

risposta

25

Usa

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

lo fa controllare per essa, ma per qualche motivo non si applica al statusline. Ho aggiornato la domanda con quello che ho. – greduan

+5

@Eduan vimrc viene estratto prima che vengano caricati tutti i plugin. Utilizzare questa condizione nell'evento 'VimEnter', inserire lo stato della riga in' ~/.vim/after/plugin/statusline.vim' ('statusline' può essere qualsiasi nome) o fare' plugin di runtime/git-branch-info.vim' prima del controllo (vieterà di disabilitare questo plugin con l'opzione '--noplugin', altre soluzioni no). – ZyX

+0

Vedo, ci proverò più tardi, e ti darò un feedback. :) – greduan

6

La risposta attualmente selezionato non funziona per me (usando Vim 7.4/Ubuntu). Credo che sia perché:

Vimrc proviene prima che i plugin sono caricati

Come @ZyX notato questo in un commento.

Il mio metodo preferito è solo per verificare l'esistenza del file di plug-in. Trovo che questo pulitore sia una scrittura di una funzione separata in un file esterno.

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

+ 1. Esempio per verificare se Syntastic è installato tramite Vundle: 'se vuota (glob (espandere (": p: h".) "/.vim/bundle/syntastic"))'. (Vedi [qui] (http://superuser.com/a/120011/4160).) –

0

Proprio in alternativa si può anche usare un'espressione regolare per decidere se il plugin a portata di mano è nel vostro runtimepath:

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

Questo ha il vantaggio che funziona con i plugin che hanno solo il codice vimscript nella directory autoload, che a sua volta non può essere rilevata quando .vimrc viene inizialmente analizzato poiché i snippet di caricamento automatico vengono caricati al momento della chiamata di una funzione.

Problemi correlati