Vim eklentisinde hem python hem de python3'ü desteklemenin zarif yolu


9

Geçenlerde python3'ü desteklemek için vim eklentimi değiştirmek için bir çekme isteği aldım. Ancak bu değişiklikler Mac'imdeki python'u dinleyen vim için eklentiyi bozuyor.

python import sys

karşı

python3 import sys

Eklentimdeki komut dosyasının hangi ifadeyi kullanması gerektiğini algılaması için zarif bir yöntem var mı? Gibi bir şey:

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

Teşekkürler.

Yanıtlar:


5

Python betiğini yeniden yazmaktan kaçınmak istiyorsanız, ayrı bir dosyaya koyun ve :pyfileveya :py3filekullanın.

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

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

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

Bu script.py, aynı dizinde olan yüklenir .


3

Python sürümlerini ayırt etme tekniğim ayrı bir komut oluşturmaktır (bu, .vimrcbaşlangıç ​​dosyalarımda olmasına rağmen , eklenti kodu için gerektiği gibi değiştirebilirsiniz.)

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

İşte böyle tamamlıyorsunuz .

  1. Python3'ün kullanılabilir olup olmadığını belirlemek için bir işlev tanımlayın:

    function! s:UsingPython3()
      if has('python3')
        return 1
      endif
        return 0
    endfunction
    
  2. sonra doğru python komutunu alın:

    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 "
    
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.