36

在过去的几年里,我曾经使用 vim 来编辑远程服务器上的配置和脚本。几周前,我决定采取下一步行动,尝试使用 (Mac)vim 作为除了 Sublime Text 2 之外的常规编辑器。现在我想创建我的第一个插件。

我的插件将定义约 16 个全局变量,用户可以分配这些变量来调整插件的某些属性。我问自己检查用户是否已经将自己的值分配给某个变量的最优雅的方式(可能是主观的)是什么。我检查了各种其他插件,到目前为止我看到的“模式”似乎总是:

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

这似乎很容易和直接。但我总是会一遍又一遍地重复同一段代码。由于 vi(m) 存在了很长时间,我很确定人们已经尝试了很多方法来编写插件,并且已经开发了某种“最佳实践”,我认为这是我上面给出的“模式”举个例子。然而,调用一个函数来填充包含所有插件设置的字典,然后遍历字典以检查键以查看用户是否已经定义了他的个人偏好,这不是更优雅吗?这是一个好主意还是我应该放弃这个想法并坚持这种ìf !exists()方法?

4

2 回答 2

56

有一个优雅的方法:

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

我很惊讶这在插件设置中没有广泛使用。

于 2015-11-18T08:34:32.383 回答
27

if exists(...)确实是规范的配置习语和要走的路。当然,你可以做一些元编程来减少重复(类似function! s:SetDefault( varname, default ));一些插件可以做到这一点。

另一方面,您打算允许大量自定义是好的,除非您的插件处理非常复杂的问题(在文本编辑器中?!),16 个配置变量确实处于高端。您必须考虑记录所有这些并测试各种组合的工作;也许最好先从更简单的简化方法开始,然后根据用户反馈进行改进。

于 2013-04-07T15:43:40.427 回答