Python,VIM:a<&书信电报;在这里

Python,VIM:a<&书信电报;在这里,python,vim,Python,Vim,如果我有两个功能: function! foo() python3 << HERE import mylib pass HERE function! bar() python3 << HERE import mylib pass HERE 那么,python解释器是嵌入在vim中的吗?此外,还提供了python的单独扩展(vim API的包装函数) mylib编译成字节码并加载了多少次?每个vimscript函数都有自己的mylib吗?我可以实例化一些东西并期

如果我有两个功能:

function! foo()
python3 << HERE
 import mylib
 pass
HERE

function! bar()
python3 << HERE
 import mylib
 pass
HERE
那么,python解释器是嵌入在vim中的吗?此外,还提供了python的单独扩展(vim API的包装函数)

mylib编译成字节码并加载了多少次?每个vimscript函数都有自己的mylib吗?我可以实例化一些东西并期望它在另一个函数中可见吗?我有一组leader函数,它们共享相似的代码,并在同一个缓冲区上运行,因此我想知道是否可以重用该数据结构。 解释器加载到内存中的次数:显然在vim运行时加载一次

  • Python解释器实际上只加载一次
  • Python解释器在
    sys.modules
    中缓存导入的模块,因此每个Vim实例加载一次mylib
  • Python解释器将编译的字节码缓存在文件系统上的
    *.pyc
    文件中,因此mylib在每次更新时都会编译一次(假设Python能够检测到此更新;通常情况下它不会有问题)


  • 在任何情况下,都不要使用
    python,我相信解释器只加载一次,而且所有python块都使用同一个解释器,不管它们被调用在哪里?如果我想发布我的Vim插件,是否可以将其放在
    ~/.Vim
    下,以便它像往常一样包含在Vimball中?@IngoKarkat
    &runtimepath
    中的任意位置。不过,您需要相对较新版本的Vim(AFAIR 7.4之后有一些修复),否则您将不得不修改
    sys.path
    或创建相同的导入挂钩(出于测试目的,我有一个仅用于挂钩的Python版本的代码,但不确定我是否实际将其发布到任何地方)。更多详情请访问
    :h pythonx目录
    。但我不记得这是不是最近的一次。
     1. Python interpreter main program
     3. Implementation of the Vim module for Python
    
    python << EOF
    from y import foo, bar
    
    def my_function1():
        foo()
    
    def my_function2(i):
        bar(i)
    
    for i in range(2):
        my_function1()
        my_function2(i)
    EOF
    
    # pythonx/mymodule.py
    from y import foo, bar
    
    def my_function1():
        foo()
    
    def my_function2(i):
        bar(i)
    
    def start():
        for i in range(2):
            my_function1()
            my_function2(i)
    
    " plugin/myscript.vim
    python import mymodule; mymodule.start()