Nachteile der Verwendung von Python zum Entwickeln von neuem Code in einem VIM-Plugin

7

In einem der von mir verwendeten vim-Plugins haben wir darüber nachgedacht, künftig Python vs Vimscript zu verwenden ( https://github.com/python-mode/python-mode/issues/813#issuecomment-344754563 ).

Ich verstehe, dass Sie Python verwenden können, um Plugins für VIM ( https://dzone.com/articles/how-write-vim-plugins-python ) zu schreiben, solange Sie ein +python/ +python3in Ihrer vim-Distribution haben, sollte das Plugin funktionieren.

Ich habe keine Plugins für VIM geschrieben, aber ich denke, das Schreiben eines OpenSource-VIM-Plugins für die Python-Entwicklung in Python ist besser als das Schreiben in VimL. Sie werden feststellen, dass es mehrere Benutzer gibt, die Lösungen vorgeschlagen haben, VimL jedoch nicht kennen und es nicht lernen möchten, da sie Python bereits kennen und in Python arbeiten. Wenn wir also in Zukunft neuen Code in Python schreiben, können wir mehr Benutzer sowie mehr Mitwirkende gewinnen und mehr Wert schaffen.

Frage

Was sind die Nachteile beim Schreiben eines Vim-Plugins mit Python vs VimL? (Nehmen wir an, dass alle Benutzer, die dieses Plugin verwenden, bereits +python/ haben +python3, weil sie es zur Entwicklung von Python verwenden werden.)

alpha_989
quelle
6
Wenn Sie Python wählen, verwenden Sie bitte Python3. vim kann nicht zuverlässig sowohl Python2- als auch Python3-Plugins gleichzeitig verwenden, und zunehmend werden Distributionen nicht mehr mit Python2 und / oder einer mit Python2-Unterstützung kompilierten Version von vim ausgeliefert, was dazu führt, dass einige Plugins nicht mehr funktionieren (selbst für Python-Benutzer).
Messe
@Mass, danke für das Feedback. Ich stimme zu. Die meisten Leute sind wahrscheinlich zu Python3 übergegangen. Ich glaube auch nicht, dass wir genug Ressourcen haben, um sowohl Python3 als auch Python2 zu unterstützen.
Alpha_989

Antworten:

9

TL; DR:

Anforderung +python/ +python3Unterstützung für ein Python-basiertes Entwicklungs-Plugin. Das klingt völlig vernünftig.

Über Vim-Plugins und menschliches Verhalten

Im Allgemeinen möchten Menschen, dass die Dinge einfach erscheinen und "nur funktionieren". Wenn es um Vim-Plugins geht, möchten Vimmer normalerweise Plugins ohne oder mit sehr wenigen Abhängigkeiten. Grundsätzlich sollte es so einfach wie ein git cloneund / oder ein paar Zeilen in ihrer vimrcDatei sein. Je mehr ein Plugin konfiguriert werden muss, um anfänglich zu funktionieren, oder je mehr Abhängigkeit erforderlich ist, desto mehr wird nur eine Eintrittsbarriere hinzugefügt.

Ein gutes Beispiel für dieses Verhalten ist CommandT vs CtrlP :

  • CommandT verwendet Ruby und C, um die Fuzzy-Suche durchzuführen
  • CtrlP hingegen ist reines VimL / Vimscript
  • CommandT ist normalerweise schneller als Vanilla CtrlP

Jetzt würden Sie annehmen, dass CommandT populärer ist, zumal es zuerst herauskam, aber das ist nicht der Fall. CommandT hat ungefähr 2000 Benutzer und CtrlP hat ungefähr 20.000 Benutzer . Meiner Meinung nach verursachen die Anforderungen von CommandT eine Eintrittsbarriere. Sie können git cloneIhre vim-Dotfiles einfach nicht verwenden und mit CommandT auf einem neuen Computer wie mit CtrlP arbeiten.

Kontrapunkt:

Das ist C + Ruby nicht +python/ +python3. Es gibt eine integrierte Unterstützung für Python. Sie sind absolut richtig. Ein Beispiel, das diesen Punkt beweist , wäre Gundo (~ 5.000) unter Verwendung von +pythonvs undotree (~ 1.000), was reines VimL ist. Ich würde meiner persönlichen Meinung nach argumentieren, dass Undotree weniger bekannt ist als Gundo (der zuerst auf den Markt kommt), und die Tatsache, dass viele Undotree verwenden, hat möglicherweise damit zu tun, dass es sich um reines VimL gegen Python handelt.

Gut genug für mich, ich werde Python nur für mein Vim-Plugin verwenden!

Am Ende des Tages muss man einiges über Vim und einige VimL wissen, um das Vim-Plugin in Python zu erstellen. Das vimModul ist viel besser als zuvor, erfordert aber dennoch eine ganze Reihe von VimL-eval-ähnlichen Situationen:

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

Siehe :h python-vim.

Sie benötigen außerdem VimL, ​​um den Python-Teil Ihres Plugins zu "booten". Es gibt also kein Entkommen von VimL, ​​sondern nur eine Reduzierung der Menge.

Schlussfolgerungen

Wenn Sie ein Bedürfnis haben +python/ +python3dann verwenden Sie es auf jeden Fall. Es hört sich so an, als hätten Sie einen wunderbaren Anwendungsfall für die Python-Unterstützung. Meiner Meinung nach werden Sie VimL / Vimscript jedoch nicht vollständig entkommen. Ich würde empfehlen, Vim-Dinge in VimL zu tun und Python für Dinge zu verwenden, die in VimL schwer / knifflig / langsam sind.

Peter Rincker
quelle
Vielen Dank für die ausführliche Beschreibung und die Beispiele. Ich hatte diese Beispiele nicht und es bestätigt irgendwie meine Intuition.
Alpha_989
Ich stimme Ihnen zu, um die Installation so einfach wie möglich zu gestalten, und wir haben dies besprochen. Die Verwendung git submoduleaus Sicht der Entwicklung könnte einige Vorteile mit sich bringen , aber vielleicht müssen wir dies in einem Bash-Skript zusammenfassen, damit die Benutzer nicht zu viele Hürden überwinden müssen, um dieses Plugin installieren zu können. Auf diese Weise können wir auf die Bedenken der Entwickler und Benutzer eingehen.
Alpha_989
Dies könnte einige Zeit dauern, daher wäre eine einfachere Lösung in naher Zukunft, einfach einen alternativen Link zu einer älteren stabilen Version des Python-Modus-Plugins zu haben (hätte im Vergleich zur aktuellen Version einige mehr Fehler), die direkt installiert werden können durch Einfügen einer Zeile in das vimrc oder durch Git-Klon.
Alpha_989
Ich hatte auch das gleiche Gefühl, als ich die Python-Route entlang ging, dass es eine Eintrittsbarriere sein könnte. Der Grund, warum ich dachte, dass es in Ordnung sein könnte, + python3 zu verwenden, ist, dass die meisten Leute wahrscheinlich eine "riesige" Version verwenden, die mit Python installiert ist. Darüber hinaus erfordert der aktuelle Python-Modus standardmäßig bereits + python3 und + python, sodass aktuelle Benutzer die Versionen von vim nicht ändern müssen.
Alpha_989
Danke auch für die Tipps zu Python-Vim, ich werde das nachlesen. Ich habe versucht, die VimL-Nutzung zu minimieren, nicht unbedingt zu beseitigen. Wenn wir das Ziel haben, so viel wie möglich in Python zu schreiben (aber nicht alles), dann war mein Gedanke, dass wir mit der Verbesserung der Python-Implementierung in VIM wahrscheinlich beginnen können, mehr Codebasis in Python zu konvertieren.
Alpha_989
2

Wenn ich für mich selbst spreche, hauptsächlich unter Windows, aber manchmal auch auf anderen Plattformen, war ich mit der Realität der Python-Integration nie zufrieden. Ich schätze, dass es für die Leute da ist, die es brauchen, aber es funktioniert nicht "nur". Sie müssen die genaue Version der Python-DLL erhalten, und es war ein Versuch und Irrtum für mich, als ich es das letzte Mal tat, und letztendlich stellte ich fest, dass die Auszahlung die Mühe nicht wert war.

Heute habe ich einige Funktionen, die ich in Python geschrieben habe und die ich in Vim verwende, und ich löse sie mit einem system('python ...')Aufruf aus, um das Skript auszuführen.

Dash-Tom-Bang
quelle
Vielen Dank, dass Sie uns Ihre Gedanken mitgeteilt haben. Ich habe nicht bemerkt, dass die Python-Integration unter Windows nicht so gut funktioniert. Ich werde dies auch ansprechen.
Alpha_989
Hier ist eine Untersuchung des Problems: stackoverflow.com/questions/32025090/…
dash-tom-bang
... und noch eine: github.com/vim/vim/issues/526
dash-tom-bang
Um meinen Spaziergang durch die Vergangenheit zu
beenden