Hạn chế của việc sử dụng Python để phát triển mã mới trong plugin VIM


7

Trong một trong những plugin vim tôi sử dụng, chúng tôi đã suy nghĩ về việc sử dụng python vs vimscript trong tương lai ( https://github.com/python-mode/python-mode/issues/813#issuecomment-344754563 ).

Tôi hiểu rằng bạn có thể sử dụng Python để viết plugin cho VIM ( https://dzone.com/articles/how-write-vim-plugins-python ) miễn là bạn có +python/ +python3trong bản phân phối vim của mình, plugin sẽ hoạt động.

Tôi chưa viết bất kỳ plugin nào cho VIM, nhưng tôi nghĩ viết plugin VIM mã nguồn mở để phát triển Python trong Python tốt hơn so với viết nó trong VimL. Bạn sẽ nhận thấy rằng có nhiều người dùng đã đề xuất giải pháp, nhưng không biết VimL và không muốn tìm hiểu về nó, vì họ đã biết Python và đang làm việc với Python. Do đó, viết mã mới bằng Python trong tương lai sẽ cho phép chúng tôi có được nhiều người dùng hơn cũng như có được nhiều người đóng góp hơn và tạo ra nhiều giá trị hơn.

Câu hỏi

Hạn chế của việc viết plugin Vim bằng Python vs VimL là gì? (Giả sử rằng tất cả người dùng sử dụng plugin này đã có +python/ +python3, vì họ sẽ sử dụng nó để phát triển Python)


6
Nếu bạn chọn python, vui lòng sử dụng python3. vim không thể sử dụng đồng thời cả hai plugin python2 và python3 một cách đáng tin cậy và các bản phân phối ngày càng không còn xuất hiện với python2 và / hoặc một phiên bản của vim được biên dịch với hỗ trợ python2, khiến một vài plugin bị hỏng (ngay cả đối với người dùng python).
Thánh lễ

@Mass, cảm ơn vì đã phản hồi .. Tôi đồng ý .. hầu hết mọi người có lẽ đã chuyển sang python3. Ngoài ra tôi không nghĩ rằng chúng tôi có đủ tài nguyên để hỗ trợ cả python3 và python2 ..
alpha_989

Câu trả lời:


9

TL; DR:

Yêu cầu +python/ +python3hỗ trợ cho một plugin phát triển dựa trên python. Điều đó nghe có vẻ hoàn toàn hợp lý.

Về plugin Vim và hành vi của con người

Nói chung, con người nói muốn mọi thứ có vẻ đơn giản và "chỉ hoạt động". Khi nói đến các plugin Vim, Vimmer thường muốn các plugin không có hoặc có rất ít phụ thuộc. Về cơ bản nó phải đơn giản như một git clonevà / hoặc một vài dòng trong vimrctệp của họ . Càng nhiều plugin yêu cầu phải được cấu hình để hoạt động ban đầu hoặc yêu cầu một số phụ thuộc chỉ là thêm một rào cản để nhập.

Một ví dụ tuyệt vời về hành vi này là CommandT vs CtrlP :

  • CommandT sử dụng Ruby và C để thực hiện tìm kiếm mờ
  • Mặt khác, CtrlP là VimL / Vimscript thuần túy
  • CommandT thường nhanh hơn vanilla CtrlP

Bây giờ bạn sẽ cho rằng CommandT trở nên phổ biến hơn, đặc biệt là khi nó xuất hiện đầu tiên, nhưng đó không phải là trường hợp. CommandT có khoảng 2000 người dùng và CtrlP có khoảng 20.000 người dùng . Theo tôi, yêu cầu của CommandT gây ra rào cản gia nhập. Bạn chỉ đơn giản là không thể git clonedotfiles vim của bạn và có thể chạy và chạy trên một máy mới với CommandT như bạn có thể với CtrlP.

Điểm truy cập:

Đó là C + Ruby không +python/ +python3. Có hỗ trợ cho Python. Bạn hoàn toàn chính xác. Một ví dụ chứng minh điểm này sẽ là Gundo (~ 5.000) sử dụng +pythonso với undotree (~ 1.000) là VimL thuần túy. Tôi sẽ lập luận, theo ý kiến ​​cá nhân của tôi, rằng unotree ít được biết đến hơn so với Gundo (lần đầu tiên đưa ra thị trường) và thực tế là nhiều người đang sử dụng undotree rất có thể phải làm với nó là VimL vs python thuần túy.

Đủ tốt cho tôi, tôi sẽ chỉ sử dụng Python cho plugin Vim của mình!

Vào cuối ngày, bạn phải biết khá nhiều về Vim và một số VimL để làm plugin Vim trong Python. Các vimmô-đun là tốt hơn nhiều so với trước, nhưng vẫn đòi hỏi một số tiền hợp lý của VimL eval giống như tình huống:

vim.command("set tw=72")
vim.command("%s/aaa/bbb/g")
text_width = vim.eval("&tw")

Xem :h python-vim.

Bạn cũng sẽ cần VimL để "bootstrap" phần python của plugin. Vì vậy, không có VimL thoát, chỉ cần giảm số lượng.

Kết luận

Nếu bạn có nhu cầu +python/ +python3thì chắc chắn sử dụng nó. Có vẻ như bạn có một trường hợp sử dụng tuyệt vời để hỗ trợ python. Tuy nhiên theo tôi, bạn sẽ không hoàn toàn thoát khỏi VimL / Vimscript. Tôi khuyên bạn nên thực hiện những điều Vim trong VimL và sử dụng python cho những việc khó / khó / chậm trong VimL.


Cảm ơn đã viết chi tiết và hiển thị các ví dụ. Tôi đã không có những ví dụ này, và nó xác minh trực giác của tôi.
alpha_989

Theo quan điểm của bạn về việc làm cho việc cài đặt đơn giản nhất có thể, tôi đồng ý với bạn và chúng tôi đã thảo luận về điều này. Có thể có một số lợi ích từ việc sử dụng git submoduletừ thời điểm phát triển, nhưng có lẽ chúng ta phải gói gọn trong một tập lệnh bash, vì vậy mọi người không phải trải qua quá nhiều trở ngại để có thể cài đặt plugin này. Bằng cách đó chúng tôi có thể giải quyết mối quan tâm của các nhà phát triển và người dùng.
alpha_989

Điều này có thể mất một chút thời gian, vì vậy trong tương lai gần, một giải pháp đơn giản hơn là chỉ cần có một liên kết thay thế cho phiên bản ổn định cũ hơn của plugin chế độ python (sẽ có thêm một số lỗi so với phiên bản hiện tại) có thể được cài đặt trực tiếp bằng cách bao gồm một dòng trong vimrc hoặc bằng git clone.
alpha_989

Tôi cũng có cảm giác tương tự về việc đi xuống tuyến đường trăn, rằng nó có thể là một rào cản để vào. Lý do tôi nghĩ có thể sử dụng + python3 là ổn, bởi vì hầu hết mọi người có thể sử dụng phiên bản rất lớn của Cameron được cài đặt với python. Hơn nữa, chế độ python hiện tại theo mặc định đã yêu cầu + python3 và + python theo mặc định, vì vậy người dùng hiện tại sẽ không phải thay đổi phiên bản của vim.
alpha_989

Ngoài ra, cảm ơn những lời khuyên về python-vim, tôi sẽ đọc về điều đó. Tôi đã cố gắng giảm thiểu việc sử dụng VimL, ​​không nhất thiết phải loại bỏ nó. Nếu chúng ta có mục tiêu viết càng nhiều càng tốt bằng python (nhưng không phải tất cả mọi thứ), thì khi việc triển khai python trong VIM được cải thiện, tôi nghĩ rằng có lẽ chúng ta có thể bắt đầu chuyển đổi nhiều codebase thành python.
alpha_989

2

Nói về bản thân tôi, chủ yếu là trong Windows nhưng đôi khi là các nền tảng khác, tôi chưa bao giờ hài lòng với thực tế của việc tích hợp Python. Tôi đánh giá cao rằng nó dành cho những người cần nó nhưng nó không "chỉ hoạt động;" bạn đã có được phiên bản chính xác của Python DLL và nó đã được dùng thử và lỗi đối với tôi khi tôi thực hiện lần cuối và cuối cùng tôi thấy rằng việc chi trả không đáng để bỏ công sức.

Hôm nay, tôi có một số chức năng mà tôi đã viết bằng Python mà tôi sử dụng bên trong Vim và tôi kích hoạt nó bằng một system('python ...')cuộc gọi để thực thi tập lệnh.


Cảm ơn bạn đã chia sẻ suy nghĩ của bạn .. Không nhận ra rằng tích hợp python không hoạt động tốt trên Windows .. Tôi cũng sẽ đưa nó lên.
alpha_989

Đây là một khám phá về vấn đề: stackoverflow.com/questions/32025090/ từ
dash-tom-bang

... Và một cái khác: github.com/vim/vim/issues/526
dash-tom-bang

Để kết thúc làn đường bộ nhớ của tôi: stackoverflow.com/questions/4718122/ trộm
dash-tom-bang
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.