Приоритет каталогов плагинов vim - PullRequest
0 голосов
/ 19 декабря 2018

В подключаемых модулях Debian есть /usr/share/vim/vim80, но также и в домашних пользователях ~/.vimКак обрабатываются конфликты?Допустим, есть /usr/share/vim/vim80/ftplugin/tex.vim и ~/.vim/ftplugin/tex.vim, который загружается?Или как правильно изменить данный плагин (например, tex.vim) - изменить один в /usr/... или скопировать один в /usr/... в ~/.vim/ и изменить его там (я хочу избежать измененийперезаписывается при обновлении пакета).

1 Ответ

0 голосов
/ 20 декабря 2018

Конфигурация Vim имеет определенную структуру (plugin/, syntax/ и т. Д. Подкаталоги), и может быть несколько базовых каталогов, в которых размещены эти деревья конфигурации.Опция 'runtimepath' перечисляет все базовые каталоги, и Vim ищет их последовательно от начала до конца, как описано в :help load-plugins.

Обычно пользовательконкретный базовый каталог (~/.vim/), а также среда выполнения Vim по умолчанию (что для вас /usr/share/vim/vim80), а иногда и другие общесистемные места.Сначала идет конфигурация пользователя, поэтому он получает приоритет.

конфликты плагинов

Итак, что произойдет, если вы установите тот же плагин для вашего пользователя (в ~/.vim/plugin/), который уже существует в другом месте (например,встроенный netrw plugin)?

Оба ~/.vim/plugin/netrwPlugin.vim и /usr/share/vim/vim80/plugin/netrwPlugin.vim выполняются один за другим.(Вы можете проверить с помощью :scriptnames.) Итак, что произойдет?

Обратите внимание, что у большинства плагинов есть защита от множественного включения вверху, всегда впохожая форма:

" Load Once: {{{1
if &cp || exists("g:loaded_netrwPlugin")
    finish
endif
let g:loaded_netrwPlugin = "v156"

Плагин определяет защитную переменную (g:loaded_netrwPlugin) при первом запуске.При следующем запуске эта глобальная переменная уже определена, и выполнение сценария останавливается на :finish.Это означает, что пользовательский плагин «выигрывает» (как это было сначала в 'runtimepath'), и вы можете переопределить общесистемный (например, с более новой загруженной версией).

То же самое относится к пакетным плагинам или каталогам плагинов, добавленным менеджером пакетов .Нечто подобное существует для плагинов синтаксиса (b:current_syntax) и плагинов файлового типа (b:did_ftplugin), с той разницей, что они загружаются не один раз при запуске, а каждый раз, когда файл открывается (поэтому они используют переменную с буферной областью, ипропустите имя плагина там).

Изменение плагина

Чтобы изменить плагин, вы действительно помещаете копию в ~/.vim/.Это лучше, чем прямое изменение исходного кода плагина, который поставляется с Vim (так как он будет перезаписан обновлениями Vim).Даже если вы хотите применить изменение для всей системы (не только для вашего пользователя), лучше добавить другой базовый каталог (например, через глобальный /etc/vimrc файл) в 'runtimepath' и скопировать плагин туда.

Обратите внимание , что (постоянное) изменение плагина редко требуется: для обычных задач (таких как расширение модуля синтаксиса или изменение параметров плагина типа файла), есть встроенный способ через after-directory (что является еще одной манипуляцией с «runtimepath», как описано выше).Плагины обычно настраиваются через (документированные) переменные или :help using-<Plug>.Если вам не хватает способа повлиять на плагин (но вы считаете, что это обычный и разумный вариант использования), хорошей идеей будет спросить у автора плагина вариант конфигурации.

...