W mojej .vimrc
usiłuję użyć ftplugin
i oczywiście użyć niektórych poleceń związanych z tym przy założeniu, że został pomyślnie załadowany. Jednak spotkałem się teraz z kilkoma starymi komputerami, które nie mają zainstalowanej wtyczki. Czy mogę w jakiś sposób uzależnić ładowanie tej wtyczki i dodać filetype on
i podobne dyrektywy do tego samego bloku warunkowego?
Widziałem, że istnieją warunki dla schematów kolorów i wersji Vima, ale nie widziałem przykładu, który sprawdziłby wtyczkę (lub jej nie rozpoznał).
NB: Bądź łagodny, jestem początkującym w VimScript.
~/.vimrc
, więc nie będziesz w stanie przetestować efektów wtyczki w swoim wnętrzu,~/.vimrc
chyba że przetestujesz na obecność pliku wtyczek lub odroczysz test, dopóki wtyczki nie zostaną załadowane za pomocą komendy automatycznej, takiej jak VimEnter.Odpowiedzi:
Możesz zawinąć ten blok w warunek, który używa
exists()
funkcji do sprawdzenia, czy zmienna, polecenie lub funkcja zdefiniowana przez wtyczkę jest znana z vim.Oto kilka bitów, które mam w plikach w ~ / .vim:
Zauważ, że powyższe bity znajdują się w plikach, które są oceniane po normalnych wtyczkach, tutaj ftplugin i plik w
after/plugin
katalogu.Inną opcją byłoby użycie bloków try / catch, chociaż wymaga to co najmniej vim 7.0:
Gdy coś w
try
sekcji tego bloku zawiedzie, przejdzie docatch
sekcji. Ponieważcatch
sekcja jest pusta, będzie kontynuowana z pozostałą częścią pliku inicjalizacyjnego poendtry
instrukcji.Ponieważ jest to ręczne ładowanie kodu zamiast poleganie na już załadowanej wtyczce, można to zrobić w samym pliku .vimrc.
źródło
Moją preferowaną metodą jest po prostu sprawdzenie istnienia pliku wtyczki. Uważam to za prostsze.
źródło
~/.vim
)?if filereadable($HOME."/.vim/plugins.vim") source ${HOME}/.vim/plugins.vim endif
Chciałem to osiągnąć, utrzymując moją konfigurację Vima razem
.vimrc
, zamiast w kilkuafter/
katalogach. Oto rozwiązanie, które wymyśliłem:Sprawdź istnienie każdej wtyczki, sprawdzając dostępne dla niej pojedyncze polecenie
exists()
i ustaw jej opcje, jeśli istnieje. (Jest tak jak w zaakceptowanej odpowiedzi.)Umieść wszystkie opcje ustawione w powyższy sposób w funkcji (wywołanej
SetPluginOptionsNow()
w moim kodzie).Wywołanie tej funkcji na
VimEnter
wydarzenie, które jest wyzwalane podczas wprowadzania nowej sesji Vima - ale co najważniejsze, po wtyczek wszystkie zostały załadowane. Z tego powodu naszeexists()
kontrole mogą bez problemu sprawdzać funkcje wtyczek.Oto próbka z tej części mojej
.vimrc
.źródło
airline_theme
wydaje się powodować wiele błędów ... Nie jestem pewien, dlaczego.Jest jeszcze jedna alternatywa
:silent! {cmd}
, która eliminuje błąd, gdy{cmd}
nie istnieje. Główną zaletą jest to, że jest to krótkie pojedyncze polecenie. Działa to nawet w Vimie 6 i doskonale nadaje się do opcjonalnych rzeczy.Na przykład jest używany przez wtyczki, które używają powtórzenia Tima Pope'a, aby mapowanie było powtarzalne.
źródło
:silent!
, nie!silent
, i to odnosi się do wszystkich poleceń zawartych, z wyjątkiem, gdy:unsilent
jest używany gdzieś w środku. (Ale to rzadkie.)Początkowo opublikowane w innym pytaniu: /programming//a/48178537/2843583
Alternatywnie możesz również użyć wyrażenia regularnego, aby zdecydować, czy dostępna wtyczka znajduje się w
runtimepath
:Ma to tę zaletę, że działa z wtyczkami, które mają tylko katalog vimscript w
autoload
katalogu, którego z kolei nie można wykryć, gdy .vimrc jest wstępnie analizowany, ponieważ fragmenty autoload są ładowane w czasie wywołania funkcji.źródło