vim lua encapsulation vim-plugin

¿Cómo encapsular el código del complemento Vim escrito en Lua/Python/Ruby?



encapsulation vim-plugin (1)

No tengo mucha experiencia con lua, pero para python las cosas también son similares, especialmente si usas ''pyfile'' (luafile es probablemente muy similar). El mejor enfoque recomendado, especialmente para Python se vería así:

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

De esta forma, incluso si tiene funciones de nivel superior en el archivo audiobox.py, obtendrán el espacio de nombre de una manera para ''audiobox'' y, por lo tanto, ahora se puede acceder a través de la caja de audio. Estoy seguro de que las expresiones idiomáticas similares deberían estar disponibles para lua también.

Para mi complemento AudioBox , que construí en mi tiempo libre solo para aprender cómo podría interactuar usando Python, llevé eso al siguiente nivel y envolví mi funcionalidad necesaria en una clase y expuse un objeto de la misma a través de una configuración () método. Puede echarle un vistazo al código para obtener una mejor idea.

NOTA: No soy un experto en python de ninguna manera, así que no juzgue mi código, este fue más un proyecto de hobby :).

En Vimscript, el alcance del script s: se puede usar para evitar conflictos de nombres entre los complementos. Estoy escribiendo un plugin de Vim en Lua, y noté que Vim ejecuta todo su código Lua en un alcance común. Esto significa que las funciones de Lua de mi complemento son visibles para cualquier otro complemento que use Lua, y parece un choque de nombres esperando a suceder.

Aunque mi ejemplo involucra a Lua, esta pregunta también se aplica cuando se desarrollan complementos de Vim en Python o Ruby. Podría prefijar todas mis funciones Lua con el nombre del complemento, pero ¿hay alguna manera más confiable / estándar para encapsular el código del complemento Vim al usar estos idiomas?