2014-12-15 3 views
4

Мне нужно дать пользователю возможность настроить параметры плагина (например, список типов файлов, которые не будут обрабатываться плагином).Лучший способ позволить пользователю настроить плагин Vim

Простой вариант - установить глобальную переменную в .vimrc и проверить ее в плагине.

Существует ли более элегантный/приемлемый способ или это единственный вариант?

ОБНОВЛЕНИЕ: Я пишу этот плагин: https://github.com/aserebryakov/filestyle. То, что я не хочу заставлять пользователя создавать большое количество файлов в ftplugin, без реальной необходимости настраивать параметры для этих типов файлов. Дело в том, чтобы настроить его только в одном месте.

ответ

3

Трудно определить «лучший», не зная точного контекста. Вы правы, одним из способов является каноническая переменная g:PluginName_ConfigVar. Даже там, у вас есть альтернатива поставки списка, разделенного запятыми ('c,cpp,html,xhtml'), реального списка (['c', 'cpp', 'html', 'xhtml']) или регулярного выражения ('^\(c\|cpp\|x\?html\)$').

Альтернативным модульным подходом было бы отключить плагин, если была установлена ​​локальная переменная буфера b:NoPluginName, например. в ~/.vim/ftplugin/<filetype>.vim. Это имеет смысл, если только несколько типов файлов будут исключены. Самое приятное в том, что хотя связанный с файлом тип, он более гибкий. Например, если вы хотите отключить плагин только для файлов HTML в проекте A, вы можете определить :autocmd или добавить условие к ftplugin, чтобы проверить путь к файлу, а затем установить на нем флаг. С одной глобальной переменной такой вид будет гораздо менее изящным.

+0

См. Обновление. – Alex

+0

Спасибо, что предоставили больше фона. У меня есть аналогичный плагин, [плагин IndentConsistencyCop] (http://www.vim.org/scripts/script.php?script_id=1690) и решил извлечь часть запуска в отдельный плагин [IndentConsistencyCopAutoCmds] (http: //www.vim.org/scripts/script.php?script_id=1691). Я бы не рекомендовал это в целом, но для этой конкретной функции это имеет смысл. –

+0

Где переопределить 'g: indentconsistencycop_filetypes' в случае, если пользователь хочет изменить настройки по умолчанию? – Alex