Как посмотреть, активен ли плагин

15

Как я могу определить, установлен ли плагин типа vim-latexsuiteфайла (например, ) и активирован ли я при открытии соответствующего файла? Другой популярный редактор будет указывать, что соответствующий «второстепенный режим» активен. Что такое VIM-эквивалент?

SabreWolfy
источник

Ответы:

20

Как определить, установлен ли плагин для файлового типа (например, vim-latexsuite)?

Вы можете использовать :scriptnamesсписок всех исходных файлов.

Другой вариант - проверить наличие переменной, показывающей, был ли плагин загружен, как есть recommended practice to allow the user to disable the loading of a given plugin.. Обычно вы можете найти g:loaded_...переменную внутри <plugin_name>/pluginпапки. Для плагина, который вы упомянули, вы можете использовать echo exists("loaded_libList").

и активируется, когда я открываю соответствующий файл?

Если это плагин файлового типа, он должен быть активирован автоматически при установке 'filetype'опции. Вы можете проверить, верна ли опция для текущего буфера:

:set filetype?

Другой популярный редактор будет указывать, что соответствующий «второстепенный режим» активен. Что такое VIM-эквивалент?

Вы можете настроить свою строку состояния, чтобы отображать такую ​​индикацию, либо с помощью плагинов, либо напрямую через опции, как объяснено :help 'statusline'на vi-improved.org и на нем .

mMontu
источник
6

Плагины Vim не имеют каких-либо признаков активации, и при правильной настройке в этом нет необходимости.

Вы можете быстро проверить, активен ли плагин, запросив его побочные эффекты, обычно сопоставления. Так, например, я знаю, что сопоставления NERDCommenter начинаются с <Leader>cзапроса о его активации :nmap <Leader>c. Если сопоставления перечислены, плагин активен. То же самое может быть достигнуто для пользовательских команд и :autocmdв группе плагинов. Большинство плагинов также определяют переменную защиты включения, g:loaded_pluginnameкоторую можно проверить.

То же самое относится к плагинам файловых типов (и тогда все эффекты должны быть ограничены буфером). Наиболее важным фактором при определении активных плагинов является правильное определение типа файла. Вы можете запросить это через :setlocal filetype?, или даже поместить это в свой 'statusline'через %y/ %Yпункт.

Инго Каркат
источник
6

В этом конкретном случае я бы только поиграл :scriptnames. Мы не можем ожидать использования глобальной переменной, чтобы проверить, был ли загружен плагин ft - у LaTeXSuite могут быть плагины, я не помню, что точно так это то, что у него есть много сценариев ftplugin. Многие ftplugins используют b:did_ftplugin(по крайней мере те, которые поставляются с Vim), но этот подход определенно не масштабируется: следовательно, не все ftplugins используют эту бессмысленную переменную, и мы не можем проверить общее имя переменной, чтобы узнать, имеет ли данный ftplugin был загружен - например, для одного только C у меня есть 22 ftplugins, они определенно не используют тот же самый предохранитель от повторного включения.

Так :scriptname. Увы, :scriptnameдает много неупорядоченных результатов, для наших человеческих глаз. К счастью execute()(очень недавняя функция) и filter()прийти на помощь. В этом случае я бы искал связанные с латексом скрипты vim с

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

Также, если вы используете менеджер плагинов, вполне вероятно, что менеджер плагинов использует 'runtimepath'опцию. Вы можете отобразить его значение с помощью :echo &rtp. Вы даже можете отфильтровать его значение с помощью:

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

(Это скажет вам, активировал ли ваш менеджер плагинов ваш плагин, LaTeX-suite в вашем случае. Это не скажет вам, правильно ли были загружены соответствующие ftplugins. Покажет :scriptnameвам эту информацию.)

Люк Эрмитт
источник
3

Если вы активируете подключаемые модули типов файлов с помощью автокоманд, вы можете установить verbose = 9, чтобы Vim отображал автокоманды при их выполнении:

:set verbose=9
Qingchen
источник
3

Одним из способов является поиск по регулярному выражению runtimepath:

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

Если вы используете vim-plug , вот метод общего назначения для проверки:

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

Использование:

if PlugLoaded('MY-PLUGIN')
    " ...
endif
Матин Улхак
источник
Этого не достаточно. Кроме того, он заботится только о плагинах, установленных с помощью менеджеров плагинов. Во всех случаях он не заботится о скриптах ftplugin, поставляемых в плагинах, что было вопросом OP '.
Люк Эрмит
0

Если вы используете vim-plug , он устанавливает переменную под названием, plugsкоторая перечисляет все ваши загруженные плагины и некоторую информацию о них. Я решил ваш вопрос для себя, когда мне нужно было проверить, запущен ли у меня YCM или coc.nvim. Вы можете увидеть, загружается ли плагин has_key(plugs, "name"), например:

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

Примечание: это показывает, только если он в данный момент указан в вашем vimrc, а не, например, если он установлен на ленивую загрузку, поэтому

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

по-прежнему будет печатать его при запуске, даже если он nerdtreeеще не загружен.

Макс Коплан
источник