On 5/30/19 1:06 PM, Paul Jolly wrote:
Hi all,
As a follow up to a recent thread ("Plugins exposing events to other
plugins":
https://groups.google.com/d/msg/vim_dev/uiw6gHft-0g/i8qdfT8YBQAJ)
I'd like to ask whether there is an existing pattern of configuration
functions that plugin developers follow?
Some background.
I'm not really a fan of global config variables in .vimrc files, e.g.:
let g:govim_quickfix_auto_diagnotics_disable=1
especially when it comes to channel-based plugins, because they (the
channel-based plugins) end up having to make a roundtrip call to check
a global variable value; if this is on a "hot" path it becomes
expensive. But also because it's too easy to mis-type/set an invalid
value.
So I'd like to explore a pattern by which the end user calls a config
function from their .vimrc or whenever they want to change a config
value. This will have the benefit of pushing the config value to the
channel-based plugin, but also allowing tighter validation at the time
of the value being set.
The main problem (aside from my complete lack of real understanding of
the .vimrc load sequence) is that plugins have not loaded at the time
.vimrc is processed, and hence it's not possible to call a
plugin-defined config function directly... so we'd need to handle this
somehow.
Does anyone have any thoughts on/experience of the above?
Thanks in advance,
Paul
I don't really see the difference between configuring via global
variable or by calling a function in your vimrc. Your plugin doesn't
need to check vim's global variable every time you use a feature, just
check it once during plugin initialization and set some internal
variable (supposing your plugin is written in go/python/etc). There is
no expectation to the user that modifying `g:govim_whatever` will take
immediate effect after the plugin has already started (if you want you
can provide a :GovimReload or similar). You can also do validation just
once when you are saving the values.
Another option is to use a separate .json or .ini file for configuration
so you don't have to worry about vimrc/plugin sourcing order. But this
is less idiomatic than putting settings in a single g: dictionary.
To address the direct question, a standard is to use autoloaded
functions, `call myplugin#configure()`. This merely requires the plugin
to be in the runtimepath which is handled by :Plug or packadd! A
seperate standard is to use User autocmd which requests the user call
some myplugin#configure() function- if the autocmd is fired the plugin
is definitely loaded and ready to get options set.
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups "vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/8d4c7fc7-49b4-c5e5-b3db-35aebab7dcf9%40gmail.com.
For more options, visit https://groups.google.com/d/optout.