Cara elegan untuk mendukung plugin python dan python3 dalam vim

9

Saya baru-baru ini menerima permintaan tarik untuk mengubah plugin vim saya untuk membuatnya mendukung python3. Tetapi perubahan ini memecah plugin untuk vim di Mac saya yang tampaknya mendengarkan python.

python import sys

melawan

python3 import sys

Apakah ada metode yang elegan untuk membuat skrip di plugin saya mendeteksi pernyataan mana yang harus digunakan? Sesuatu seperti:

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

Terima kasih.

mipmip
sumber

Jawaban:

5

Jika Anda ingin menghindari penulisan ulang skrip Python, letakkan di file terpisah dan gunakan :pyfileatau :py3filesebagai gantinya.

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

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

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

Ini akan memuat script.pyyang ada di direktori yang sama.

Tommy A
sumber
3

Teknik saya untuk membedakan versi python adalah membuat perintah terpisah (meskipun ini ada di .vimrcfile startup saya , Anda dapat memodifikasi sesuai kebutuhan untuk kode plugin.)

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
Cometsong
sumber
3

Beginilah cara Anda menyelesaikannya .

  1. Tentukan fungsi untuk menentukan apakah python3 tersedia:

    function! s:UsingPython3()
      if has('python3')
        return 1
      endif
        return 0
    endfunction
  2. lalu dapatkan perintah python yang tepat:

    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 "
artificerpi
sumber