vimプラグインでpythonとpython3の両方をサポートするエレガントな方法


9

私は最近、自分のvimプラグインを変更してpython3をサポートするようにするプルリクエストを受け取りました。しかし、これらの変更により、Pythonをリッスンしているように見える私のMac上のvimのプラグインが壊れます。

python import sys

python3 import sys

プラグインのスクリプトに、使用するステートメントを検出させるエレガントな方法はありますか?何かのようなもの:

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

ありがとう。

回答:


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

youcompletemeの方法は次のとおりです。

  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 "
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.