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

时间:2014-03-28 00:43:48

标签: vim lua encapsulation vim-plugin

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

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

1 个答案:

答案 0 :(得分: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

这样,即使你在文件audiobox.py中有顶级函数,它们也会以“audiobox”的方式命名,因此现在可以通过audiobox访问。我确信同样适用于lua的习语。

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

注意:我不是任何方式的python专家所以不要判断我的代码,这更像是一个爱好项目:)。