Cách thanh lịch để hỗ trợ cả python và python3 trong vim plugin


9

Gần đây tôi đã nhận được một yêu cầu kéo để thay đổi plugin vim của mình để làm cho nó hỗ trợ python3. Nhưng những thay đổi này phá vỡ plugin cho vim trên máy Mac của tôi dường như nghe python.

python import sys

đấu với

python3 import sys

Có một phương pháp tao nhã để làm cho tập lệnh trong plugin của tôi phát hiện ra câu lệnh nào nên sử dụng không? Cái gì đó như:

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

Cảm ơn.

Câu trả lời:


5

Nếu bạn muốn tránh viết lại tập lệnh Python, hãy đặt nó vào một tệp riêng và sử dụng :pyfilehoặc :py3filethay vào đó.

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

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

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

Điều này sẽ tải script.pyđó trong cùng một thư mục.


3

Kỹ thuật của tôi để phân biệt các phiên bản python là tạo một lệnh riêng (mặc dù đây là trong .vimrccác tệp khởi động của tôi , bạn có thể sửa đổi khi cần cho mã plugin.)

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

Đây là cách youcompleteme làm.

  1. Xác định hàm để xác định xem python3 có khả dụng hay không:

    function! s:UsingPython3()
      if has('python3')
        return 1
      endif
        return 0
    endfunction
    
  2. sau đó nhận lệnh python đúng:

    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 "
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.