Подтвердить что ты не робот

Элегантный способ проверить, установлена ​​ли глобальная переменная плагина в плагине vim

В последние годы я использовал vim для редактирования конфигураций и скриптов на удаленных серверах. Пару недель назад я решил сделать следующий шаг и попытаться использовать (Mac) vim в качестве своего обычного редактора помимо Sublime Text 2. Теперь я достиг точки, где хотел бы создать свой первый плагин.

Мой плагин определит ~ 16 глобальных переменных, которые могут быть назначены пользователем для настройки определенных свойств плагина. Я спросил себя, что было бы самым элегантным способом (возможно, субъективным) проверить, присвоил ли пользователь определенное значение определенной переменной. Я проверил различные другие плагины, и "шаблон", который я вижу до сих пор, кажется, всегда:

if !exists("g:pluginname_setting")
    let g:pluginname_setting="default"
endif

Это кажется легким и прямым. Но я всегда повторяю один и тот же кусок кода снова и снова. Поскольку vi (m) существует довольно долгое время, я уверен, что люди пробовали много способов писать плагины, и была разработана какая-то "лучшая практика", которую я предполагаю, это "шаблон", который я дал выше В качестве примера. Тем не менее, было бы более элегантным назвать функцию для заполнения словаря, который содержит все настройки плагина, а затем перебирает словарь, чтобы проверить ключи, чтобы узнать, уже ли пользователь уже определил свои личные предпочтения? Будет ли это хорошей идеей или я должен просто отказаться от идеи и придерживаться подхода ìf !exists()?

4b9b3361

Ответ 1

if exists(...) - это действительно каноническая идиома конфигурации и путь. Конечно, вы можете сделать небольшое метапрограммирование, чтобы уменьшить дублирование (что-то вроде function! s:SetDefault( varname, default )); некоторые плагины делают это.

Хорошо, что вы намерены разрешить большой уровень настройки, с другой стороны, если ваш плагин не справляется с очень сложной проблемой (в текстовом редакторе?!), 16 конфигурационных переменных действительно находятся на высоком уровне. Вы должны рассмотреть усилия по документированию всех этих и тестированию различных комбинаций; возможно, лучше сначала начать с более простого сокращения подхода и эволюционировать на основе отзывов пользователей.

Ответ 2

Существует элегантный способ:

let g:pluginname_setting = get(g:, 'pluginname_setting', "default")

Я удивлен, что это не широко используется в настройках плагина.