python - 通用 :python command in vim?

标签 python python-3.x vim vim-plugin

在 vim 脚本中可以嵌入一些 python 代码,只要 vim 是用 +python 特性构建的。

function! IcecreamInitialize()
python << EOF
class StrawberryIcecream:
    def __call__(self):
        print('EAT ME')
EOF
endfunction

然而,有些人用 +python3 构建了 vim。这会带来一些 vim 插件的兼容性问题。是否有通用命令调用计算机上安装的 python 版本?

最佳答案

此代码段可以确定我们正在使用哪个 Python 版本并切换到它(Python 代表已安装的版本)。

if has('python')
    command! -nargs=1 Python python <args>
elseif has('python3')
    command! -nargs=1 Python python3 <args>
else
    echo "Error: Requires Vim compiled with +python or +python3"
    finish
endif

要加载 python 代码,我们首先找出它的位置(这里与 Vim 脚本在同一目录下):

execute "Python import sys"
execute "Python sys.path.append(r'" . expand("<sfile>:p:h") . "')"

然后检查python模块是否可用。如果没有,请重新加载它:

Python << EOF
if 'yourModuleName' not in sys.modules:
    import yourModuleName
else:
    import imp
    # Reload python module to avoid errors when updating plugin
    yourModuleName = imp.reload(yourModuleName)
EOF

两种调用方式:
1.

" call the whole module
execute "Python yourModuleName"

" call a function from that module
execute "Python yourModuleName.aMethod()"

2.

" Call a method using map 
vnoremap <leader> c :Python yourModuleName.aMethod()<cr> 

" Call a module or method using Vim function
vnoremap <leader> c :<c-u> <SID>yourFunctionName(visualmode())<cr>
function! s:YourFunctionName(someName)
    Python YourFunctionName.aMethod(a:someName)
    Python YourFunctionName
endfunction

关于python - 通用 :python command in vim?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944325/

相关文章:

python : Convert 2 ints to float

python - 澄清行为 : collections. defaultdict 与 dict.setdefault

python - 多次捕获相同的异常

vim - 为什么 vim 粘贴的行为取决于 yanking 方法

vim - 将 vim 变量插入文本以获取注释快捷方式

java - Vim - 自动完成 Java

python - 函数迭代的问题

python - 如何动态地从包中的模块导入类?

python - 如何在 Linux 中用 C 语言执行 Python 程序

python pyinstaller 将 GUI 中的图像捆绑到 onefile EXE 中?