在Vim插件中同时支持python和python3的优雅方式


9

我最近收到一个请求请求,以更改我的vim插件以使其支持python3。但是这些更改破坏了Mac上的vim插件,该插件似乎在听python。

python import sys

python3 import sys

是否有一种优雅的方法可以使插件中的脚本检测应使用的语句?就像是:

if has('python')
   python import ...
elseif if has('python3')
   python3 import ...
else
   finish
endif

谢谢。

Answers:


5

如果要避免重写Python脚本,请将其放在单独的文件中,然后使用:pyfile:py3file代替。

let script_path = expand('<sfile>:p:h') . '/script.py'

if !has('python') and !has('python3')
   finish
endif

execute (has('python3') ? 'py3file' : 'pyfile') script_path

这将加载script.py在同一目录中。


3

我区分python版本的技术是创建一个单独的命令(尽管这在我的.vimrc启动文件中,但是您可以根据需要修改插件代码。)

function! PyImports()
Py << EOF
import sys, os, .....
EOF
endfunction

if has('python')
  command! -nargs=* Py python <args>
  call PyImports()
elseif has('python3')
  command! -nargs=* Py python3 <args>
  call PyImports()
endif

3

这是您的完成方式。

  1. 定义一个确定python3是否可用的函数:

    function! s:UsingPython3()
      if has('python3')
        return 1
      endif
        return 0
    endfunction
  2. 然后获取正确的python命令:

    let s:using_python3 = s:UsingPython3()
    let s:python_until_eof = s:using_python3 ? "python3 << EOF" : "python << EOF"
    let s:python_command = s:using_python3 ? "py3 " : "py "
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.