วิธีที่สง่างามในการรองรับทั้งงูใหญ่และงูหลาม 3 ในปลั๊กอินกลุ่ม


9

ฉันเพิ่งได้รับคำขอดึงเพื่อเปลี่ยนปลั๊กอิน vim ของฉันเพื่อให้รองรับ python3 แต่การเปลี่ยนแปลงเหล่านี้ทำให้ปลั๊กอินสำหรับกลุ่มใน Mac ของฉันซึ่งดูเหมือนว่าจะฟังหลาม

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

เทคนิคของฉันสำหรับความแตกต่างของเวอร์ชันหลามคือการสร้างคำสั่งแยกต่างหาก (แม้ว่านี่จะอยู่ใน.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 "
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.