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.

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.


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

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 "
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.