Конфигурация 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>
.Если вам не хватает способа повлиять на плагин (но вы считаете, что это обычный и разумный вариант использования), хорошей идеей будет спросить у автора плагина вариант конфигурации.