Una forma elegante de comprobar si una variable de complemento global está configurada en un complemento de vim
plugins global-variables (2)
Solía usar vim durante los últimos años para editar configuraciones y scripts en servidores remotos. Hace un par de semanas decidí dar el siguiente paso y tratar de usar vim (Mac) como mi editor habitual, además de Sublime Text 2. Ahora llegué a un punto en el que me gustaría crear mi primer complemento.
Mi complemento definirá ~ 16 variables globales que podrían ser asignadas por un usuario para ajustar ciertas propiedades del complemento. Me pregunté cuál sería la forma más elegante (podría ser subjetiva) de comprobar si un usuario ya ha asignado su propio valor a una determinada variable. Inspeccioné varios otros complementos y el "patrón" que veo hasta ahora parece ser siempre:
if !exists("g:pluginname_setting")
let g:pluginname_setting="default"
endif
Eso parece ser fácil y directo. Pero siempre repetiría el mismo código una y otra vez. Ya que vi (m) existe desde hace bastante tiempo, estoy bastante seguro de que la gente ha intentado muchas formas de escribir complementos y se ha desarrollado algún tipo de "mejor práctica", que asumo es el "patrón" que mencioné anteriormente. como ejemplo. Sin embargo, ¿no sería más elegante llamar a una función para rellenar un diccionario que contiene todas las configuraciones de complementos y luego iterar sobre el diccionario para verificar las claves para ver si un usuario ya ha definido sus preferencias personales? ¿Sería una buena idea o preferiría simplemente abandonar la idea y ìf !exists()
al ìf !exists()
"?
El if exists(...)
es de hecho el lenguaje de configuración canónica y el camino a seguir. Por supuesto, puede hacer una pequeña meta-programación para reducir la duplicación (algo así como function! s:SetDefault( varname, default )
); algunos plugins hacen eso.
Es bueno que intentes permitir un gran nivel de personalización, por otro lado, a menos que tu complemento se ocupe de un problema muy complejo (¿en un editor de texto ?!), 16 variables de configuración están en el extremo superior. Tienes que considerar el esfuerzo de documentar todos esos y probar las distintas combinaciones; tal vez sea mejor comenzar con un enfoque reducido más simple primero y evolucionar en base a los comentarios de los usuarios.
Hay una manera elegante:
let g:pluginname_setting = get(g:, ''pluginname_setting'', "default")
Me sorprende que esto no se use mucho en la configuración de complementos.