Elegancki sposób obsługi zarówno Pythona, jak i Pythona we wtyczce vim


9

Niedawno otrzymałem żądanie ściągnięcia, aby zmienić wtyczkę vima, aby obsługiwała Python3. Ale te zmiany psują wtyczkę vima na moim Macu, który wydaje się słuchać Pythona.

python import sys

przeciw

python3 import sys

Czy istnieje elegancka metoda, dzięki której skrypt w mojej wtyczce wykrywa, której instrukcji powinien użyć? Coś jak:

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

Dzięki.

Odpowiedzi:


5

Jeśli chcesz uniknąć przepisywania skryptu Python, umieść go w osobnym pliku i użyj :pyfilelub :py3filezamiast niego.

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

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

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

Spowoduje to załadowanie script.pytego pliku do tego samego katalogu.


3

Moja technika rozróżniania wersji Pythona polega na utworzeniu osobnego polecenia (chociaż jest to w moich .vimrcplikach startowych, możesz zmodyfikować w razie potrzeby kod wtyczki).

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

Oto, jak to zrobisz .

  1. Zdefiniuj funkcję określającą, czy python3 jest dostępny:

    function! s:UsingPython3()
      if has('python3')
        return 1
      endif
        return 0
    endfunction
    
  2. następnie uzyskaj właściwą komendę 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 "
    
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.