2014-03-28 78 views
6

在Vimscript中,可以使用腳本範圍s:來避免插件之間的名稱衝突。我在Lua寫了一個Vim插件,我注意到Vim在一個共同的範圍內運行了所有的Lua代碼。這意味着我的插件的Lua函數對於使用Lua的其他插件是可見的,並且看起來像名稱衝突等待發生。如何封裝用Lua/Python/Ruby編寫的Vim插件代碼?

儘管我的示例涉及到Lua,但在Python或Ruby中開發Vim插件時,此問題也適用。我可以將所有的Lua函數加上前綴名,但是在使用這些語言時,是否有更可靠/標準的封裝Vim插件代碼的方法?

+0

我不知道任何有關振動,但如果你的插件是單獨的lua塊,那麼你可以使用本地函數/變量或使用單獨的環境。 – moteus

+0

至少,這是比插入名稱前綴更好的解決方案。 –

回答

1

我對lua沒有太多經驗,但對於python來說,事情也很相似,特別是如果使用'pyfile'(luafile可能非常相似)。好了,推薦的方法,特別是對於蟒蛇會是這個樣子:

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專家,所以不要評判我的代碼,這是一個愛好項目:)。