Jak sprawdzić, czy wtyczka jest aktywna

15

Jak mogę ustalić, czy wtyczka typu pliku (np. vim-latexsuite) Została zainstalowana i aktywowana po otwarciu odpowiedniego pliku? Inny popularny edytor wskazywałby, że odpowiedni „tryb pomocniczy” jest aktywny. Jaki jest odpowiednik vima?

SabreWolfy
źródło

Odpowiedzi:

20

Jak mogę ustalić, czy wtyczka typu pliku (taka jak vim-latexsuite) została zainstalowana

Przydałaby się :scriptnameslista wszystkich plików źródłowych.

Inną opcją jest sprawdzenie, czy zmienna wskazuje, czy wtyczka została załadowana recommended practice to allow the user to disable the loading of a given plugin.. Zazwyczaj można znaleźć g:loaded_...zmienną w <plugin_name>/pluginfolderze. Do wspomnianej wtyczki możesz użyć echo exists("loaded_libList").

i aktywowane po otwarciu odpowiedniego pliku?

Jeśli jest to wtyczka typu pliku, powinna zostać aktywowana automatycznie po ustawieniu tej 'filetype'opcji. Możesz sprawdzić, czy opcja jest poprawna dla bieżącego bufora:

:set filetype?

Inny popularny edytor wskazywałby, że odpowiedni „tryb pomocniczy” jest aktywny. Jaki jest odpowiednik vima?

Możesz dostosować swoją linię statusu, aby wyświetlała takie wskazanie, używając wtyczek lub bezpośrednio przez opcje, jak wyjaśniono w :help 'statusline'i na vi-improved.org .

mMontu
źródło
6

Wtyczki Vima nie zawierają żadnych informacji o aktywacji, a przy odpowiedniej konfiguracji nie jest to konieczne.

Możesz szybko sprawdzić, czy wtyczka jest aktywna, sprawdzając jej skutki uboczne, zwykle mapowania. Na przykład wiem, że mapowania NERDCommenter zaczynają się od <Leader>c, więc zapytanie o jego aktywację byłoby :nmap <Leader>c. Jeśli mapowania są wymienione, wtyczka jest aktywna. To samo można osiągnąć dla niestandardowych poleceń i :autocmdw grupie wtyczek. Większość wtyczek definiuje również zmienną ochronną włączenia, g:loaded_pluginnamektórą można sprawdzić.

To samo dotyczy wtyczek typu pliku (a efekty powinny wtedy mieć zasięg buforowy). Najważniejszym czynnikiem przy określaniu aktywnych wtyczek jest prawidłowe wykrywanie typu pliku. Możesz zapytać o to za pomocą :setlocal filetype?, a nawet umieścić to w swoim 'statusline'za pomocą elementu %y/ %Y.

Ingo Karkat
źródło
6

W tym konkretnym przypadku bym tylko grał :scriptnames. Nie możemy oczekiwać, że użyjemy zmiennej globalnej do sprawdzenia, czy wtyczka ft została załadowana - LaTeXSuite może mieć wtyczki, nie pamiętam, pewne jest to, że ma wiele skryptów ftplugin. Używa wielu ftpluginów b:did_ftplugin(przynajmniej tych dostarczonych z Vimem), ale to podejście zdecydowanie się nie skaluje: w konsekwencji nie wszystkie ftpluginy używają tej bezcelowej zmiennej i nie możemy sprawdzić nazwy zmiennej ogólnej, aby wiedzieć, czy dana ftplugin ma zostały załadowane - na przykład dla samego C mam 22 ftplugins, definitywnie nie używają tego samego strażnika przeciw reintegracji.

Tak :scriptname. Niestety :scriptname, dla naszych ludzkich oczu jest wiele nieuporządkowanych rezultatów. Na szczęście execute()(bardzo nowa funkcja) i filter()przyjdź na ratunek. W takim przypadku szukałbym skryptów vim związanych z lateksem

:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"') 
" or even "latex" instead of "tex"

Również jeśli używasz menedżera wtyczek, prawdopodobnie menedżer wtyczek korzysta z 'runtimepath'opcji. Możesz wyświetlić jego wartość za pomocą :echo &rtp. Możesz nawet filtrować jego wartość za pomocą:

:echo filter(split(&rtp), ','), 'v:val =~? "tex")

(Dzięki temu dowiesz się, czy menedżer wtyczek aktywował wtyczkę, w twoim przypadku pakiet LaTeX. Nie powie ci to, czy powiązane wtyczki ftpl zostały poprawnie załadowane. :scriptnamePoda te informacje).

Luc Hermitte
źródło
3

Jeśli aktywujesz wtyczki typu pliku przez komendy automatyczne, możesz ustawić verbose = 9, aby Vim powtarzał komendy automatyczne podczas ich wykonywania:

:set verbose=9
qingchen
źródło
3

Jednym ze sposobów jest wykonanie wyrażenia regularnego na runtimepath:

if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif

Jeśli używasz wtyczki vim , oto ogólna metoda sprawdzania:

function! PlugLoaded(name)
    return (
        \ has_key(g:plugs, a:name) &&
        \ isdirectory(g:plugs[a:name].dir) &&
        \ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction

Stosowanie:

if PlugLoaded('MY-PLUGIN')
    " ...
endif
Mateen Ulhaq
źródło
To nie wystarcza. Zajmuje się także tylko wtyczkami zainstalowanymi z menedżerami wtyczek. We wszystkich przypadkach nie zajmuje się skryptami ftplugin dostarczanymi w ramach wtyczek, co było pytaniem OP.
Luc Hermitte,
0

Jeśli używasz vim-plug , ustawia on zmienną o nazwie, plugsktóra wyświetla listę wszystkich załadowanych wtyczek i niektóre informacje na ich temat. Sam rozwiązałem twoje pytanie, kiedy musiałem sprawdzić, czy korzystam z YCM czy coc.nvim. Możesz sprawdzić, czy wtyczka jest ładowana przez uruchomienie has_key(plugs, "name"), na przykład:

if has_key(plugs, 'YouCompleteMe')
        call YCM()
endif
if has_key(plugs, "coc.nvim")
        call CocStart()
endif

Uwaga: pokazuje to tylko, jeśli jest aktualnie na liście vimrc, a nie, na przykład, jeśli masz ustawione leniwe ładowanie, więc

    Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
    ...
if has_key(plugs, 'nerdtree')
        echo "HAS NERDTREE"
endif

nadal wydrukuje to podczas uruchamiania, nawet jeśli nerdtreenie zostało jeszcze załadowane.

Max Coplan
źródło