Елегантний спосіб підтримати і python, і python3 у плагін vim


9

Нещодавно я отримав запит на тягнення змінити свій плагін vim, щоб він підтримував python3. Але ці зміни порушують плагін для vim на моєму Mac, який, здається, слухає python.

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

Ось як ви завершите роботу .

  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 "
    
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.