2012-12-04 12 views
17

teraz czyścimy mój plik .vimrc, aby upewnić się, że jest on kompatybilny z większością systemów.VimL: Sprawdzanie, czy funkcja istnieje

W mojej linii statusu używam funkcji, którą ustawia inna wtyczka, funkcja GitBranchInfoString() wprowadzona przez this plugin.

Co chcę zrobić, to sprawdzić, czy ta funkcja jest ustawiona, a dopiero potem dodać ją do linii statusu. Byłoby to w jego własnej linii, więc po prostu muszę to sprawdzić.

Jaki byłby najprostszy sposób, aby to osiągnąć?

Dzięki za pomoc!

EDIT:

Mam następujący:

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

Odpowiedz

25

Zastosowanie

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

Sprawdza się, ale z jakiegoś powodu nie stosuje go do linii statusu. Zaktualizowałem pytanie z tym, co mam. – greduan

+5

@Duan vimrc jest pobierany przed załadowaniem jakichkolwiek wtyczek. Użyj tego warunku w zdarzeniu 'VimEnter', umieść statusline stuff w' ~/.vim/after/plugin/statusline.vim' ('statusline' może być dowolną nazwą) lub wykonaj' runtime plugin/git-branch-info.vim' przed sprawdzeniem (zabroni ci wyłączania tej wtyczki za pomocą opcji '--noplugin', ale inne rozwiązania nie będą). – ZyX

+0

Rozumiem, spróbuję to później i udzielę ci wszelkich informacji zwrotnych. :) – greduan

6

Aktualnie wybrana odpowiedź nie działa dla mnie (przy użyciu Vima 7.4/Ubuntu). wierzę, to dlatego, że:

.vimrc pochodzi zanim jakiekolwiek wtyczki są ładowane

Jak zauważył to @ZyX w komentarzu.

Moja preferowana metoda to po prostu sprawdzenie istnienia pliku wtyczki. Uważam, że jest to czystsze niż pisanie oddzielnej funkcji w pliku zewnętrznym.

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

+ 1. Przykład do sprawdzenia, czy Syntastic jest zainstalowany przez Vundle: 'if! Empty (glob (expand (" : p: h ")." /.vim/bundle/syntastic "))'. (Patrz [tutaj] (http://superuser.com/a/120011/4160).) –

0

tylko jako alternatywę można również użyć wyrażenia regularnego, aby zdecydować, czy wtyczki pod ręką jest w swojej runtimepath:

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

Ma to tę zaletę, że działa z wtyczek, które mają tylko kod vimscript w katalogu autoload, który z kolei nie może zostać wykryty, gdy plik .vimrc jest początkowo analizowany, ponieważ fragmenty kodu ładowania są ładowane w momencie wywołania funkcji.

Powiązane problemy