如何封装用Lua/Python/Ruby编写的Vim插件代码?

Nic*_*lle 6 vim lua encapsulation vim-plugin

在Vimscript中,脚本范围s:可用于避免插件之间的名称冲突.我正在Lua中编写一个Vim插件,我注意到Vim在一个通用范围内运行它的所有Lua代码.这意味着我的插件的Lua函数对于使用Lua的任何其他插件都是可见的,并且看起来像是等待发生的名称冲突.

虽然我的例子涉及Lua,但在使用Python或Ruby开发Vim插件时,这个问题也适用.我可以使用插件名称为我的所有Lua函数添加前缀,但是在使用这些语言时是否有更可靠/标准的方法来封装Vim插件代码?

Dhr*_*gar 1

我对 lua 没有太多经验,但对于 python 来说,事情也很相似,特别是如果你使用“pyfile”(luafile 可能非常相似)。更好的推荐方法,尤其是对于 python 来说,看起来像这样:

if !exists('g:audiobox_py_loaded')
  python import sys, vim
  python if vim.eval('expand("<sfile>:p:h")') not in sys.path:
        \  sys.path.append(vim.eval('expand("<sfile>:p:h")'))
  python import audiobox
endif
Run Code Online (Sandbox Code Playgroud)

这样,即使您在文件 audiobox.py 中有顶级函数,它们也会以“audiobox”的方式获得命名空间,因此现在可以通过audiobox进行访问。我确信 lua 也应该有类似的习惯用法。

对于我的插件AudioBox,我在业余时间构建它只是为了学习如何使用 python 进行交互,我将其提升到了一个新的水平,并将我需要的功能包装到一个类中,并通过设置公开了一个相同的对象() 方法。您可以查看代码以获得更好的想法。

注意:我无论如何都不是Python专家,所以不要评判我的代码,这更多的是一个业余爱好项目:)。