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?
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?
Odpowiedzi:
Jak mogę ustalić, czy wtyczka typu pliku (taka jak vim-latexsuite) została zainstalowana
Przydałaby się :scriptnames
lista 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>/plugin
folderze. 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 .
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 :autocmd
w grupie wtyczek. Większość wtyczek definiuje również zmienną ochronną włączenia, g:loaded_pluginname
któ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
.
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. :scriptname
Poda te informacje).
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
Jeśli używasz vim-plug , ustawia on zmienną o nazwie, plugs
któ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 nerdtree
nie zostało jeszcze załadowane.