Forma elegante de admitir python y python3 en el complemento vim

9

Recientemente recibí una solicitud de extracción para cambiar mi complemento vim para que sea compatible con python3. Pero estos cambios rompen el complemento para el vim en mi Mac que parece escuchar python.

python import sys

versus

python3 import sys

¿Existe un método elegante para hacer que el script en mi complemento detecte qué enunciado debe usar? Algo como:

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

Gracias.

mipmip
fuente

Respuestas:

5

Si desea evitar reescribir el script de Python, colóquelo en un archivo separado y use :pyfileo en su :py3filelugar.

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

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

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

Esto cargará script.pyque está en el mismo directorio.

Tommy A
fuente
3

Mi técnica para distinguir las versiones de Python es crear un comando separado (aunque esto está en mi .vimrc archivos de inicio, puede modificarlo según sea necesario para el código del complemento).

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
fuente
3

Así es como me completas hace .

  1. Defina una función para determinar si python3 está disponible:

    function! s:UsingPython3()
      if has('python3')
        return 1
      endif
        return 0
    endfunction
  2. luego obtenga el comando python correcto:

    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 "
Artererpi
fuente