Як дізнатися, чи активний плагін


15

Як я можу визначити, чи vim-latexsuiteвстановлений та активований плагін типу файлу (наприклад ), коли я відкриваю відповідний файл? Інший популярний редактор зазначив, що відповідний "другорядний режим" активний. Що таке еквівалент vim?

Відповіді:


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 .


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

Якщо ви активуєте плагіни файлів для автокоманд, ви можете встановити багатослівний = 9, щоб Vim повторював автокоманди під час їх виконання:

:set verbose=9

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, що постачаються в плагінах, що було питанням ОП.
Люк Ермітт

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ще не завантажений.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.