Як умовно завантажувати плагіни


14

Я шукав відповідь на це, але ще нічого не знайшов, тому якщо я пропустив щось очевидне, прошу вибачення. Я думав, що це буде швидкий пошук у Google, тому, можливо, це складніше, ніж я думав.

Мені хотілося б умовно завантажувати плагіни залежно від типу файлу, який я редагую. Наприклад, редагуючи python, я не хочу vim-sexpвстановити зв'язки клавіш , але, працюючи над clojure, я хочу, щоб цей плагін був завантажений.

Наразі я використовую neovim та патоген, але якщо є інший менеджер плагінів, який робить це для мене, я б відкритий для переключення. Крім того, якщо це існує, чи :set syntax whateverперемикає плагіни? Бо це було б супер :)

Заздалегідь дякую за будь-яку допомогу / напрямок!


1
Ви ставите запитання, але ви фактично описуєте інше: якщо плагін встановлює глобальні прив'язки клавіш, відключіть їх (прочитайте документи плагіна про те, як це зробити) та знову ввімкніть їх локально (наприклад, використовуючи autocmds) лише для файлів, які ви хочу. Якщо плагін добре написаний, ви не заробляєте занадто багато, затримуючи його ініціалізацію. Але якщо ви не відключите небажані глобальні прив’язки клавіш, активовані плагіном, вони все одно впливатимуть на вас після завантаження плагіна.
VanLaser

Відповіді:


18

Це можна зробити за допомогою Vim-Plug. Дивіться ЧИТАТИ :

" On-demand loading
Plug 'scrooloose/nerdtree', { 'on':  'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }

Я думаю, вам доведеться використовувати :set filetype whateverзамість того, set syntax whateverщоб увімкнути плагін.

(Деякі інші менеджери плагінів можуть дозволити вам це зробити, див. У чому різниця між менеджерами плагінів vim? )


8

Замість того, execute pathogen#infect()щоб закликати завантажувати всі плагіни, телефонуйте pathogen#interposeдля кожного плагіна, тобто:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

API збудника не задокументовано за межами джерела , але він досить простий (навіть незважаючи на те, що назви функцій є неясними та не описовими). Ви також можете використовувати pathogen#surround()для абсолютних шляхів.

Ви можете завантажувати плагіни умовно за допомогою базових autocmd:

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

Якщо ви виявите, що у вас багато таких випадків, ви навіть можете розділити їх на різні шляхи:

  • ~/.vim/bundle/always для плагінів, які ви завжди хочете
  • ~/.vim/bundle/<filetype> для плагінів для певного типу файлів
  • А потім завантажте його так:

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

Таким чином, вам не потрібно додавати цілу купу autocmds для кожного типу файлів / плагінів.

якщо це існує, чи :set syntax whateverперемикає плагіни? Бо це було б супер :)

  • Після завантаження плагіна він завантажується. А «плагін» це просто колекція function, commandі mapdefinitons. Я не знаю жодного прямого способу "розвантажити" це.

  • Це робить завантаження Plug-in для типів файлів тоді і тільки тоді ви використовуєте :set filetype; Загалом, ви завжди хочете використовувати :set filetypeі НЕ :set syntax як syntaxтільки встановити підсвічування синтаксису, а не відступи та інші параметри (наприклад iskeyword, formatexprі т.д.).

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