Pythonを使用してVIMプラグインで新しいコードを開発することの欠点


7

私が使用するvimプラグインの1つで、今後はpythonとvimscriptの使用を検討しています(https://github.com/python-mode/python-mode/issues/813#issuecomment-344754563)。

Pythonを使用してVIMのプラグイン(https://dzone.com/articles/how-write-vim-plugins-python)を記述できることを理解しています。vimディストリビューションに+python/ +python3があれば、プラグインは機能するはずです。

私はVIMのプラグインをまだ作成していませんが、PythonでのPython開発用のオープンソースVIMプラグインの作成は、VimLで作成するよりも優れていると思います。ソリューションを提案したが、VimLを知らず、それを学びたくないというユーザーが複数いることに気づくでしょう。彼らはすでにPythonを知っており、Pythonで作業しているからです。したがって、今後Pythonで新しいコードを書くことで、より多くのユーザーを獲得し、より多くの貢献者を獲得して、より多くの価値を生み出すことができます。

質問

PythonとVimLを使用してVimプラグインを作成する欠点は何ですか?(このプラグインを使用するすべてのユーザーがPythonを開発するために使用する予定であるため、すでに+python/を持っていると仮定しましょう+python3


6
pythonを選択する場合は、python3を使用してください。vimはpython2とpython3の両方のプラグインを確実に同時に使用することができず、Python2やpython2サポートでコンパイルされたバージョンのvimを配布するディストリビューションが増えなくなり、いくつかのプラグインが(Pythonユーザーでも)機能しなくなります。
Mass

@Mass、フィードバックに感謝..同意する..ほとんどの人はおそらくpython3に移行したでしょう。また、私は...私たちはのpython3とpython2の両方をサポートするのに十分なリソースを持っていると思ういけない
alpha_989

回答:


9

TL; DR:

Pythonベースの開発プラグインが必要+python/ +python3サポート。それは完全に合理的に聞こえます。

Vimプラグインと人間の行動について

一般的に言えば、人間は物事が単純で「ただ働く」ように見えることを望んでいます。Vimプラグインに関して言えば、Vimmerは通常、依存関係のないプラグインまたはほとんど依存しないプラグインを求めています。基本的にはgit clonevimrcファイル内の数行または数行、あるいはその両方と同じくらい単純でなければなりません。プラグインを最初に機能させるために構成する必要があるか、依存関係が必要になるほど、エントリへの障壁が追加されます。

この動作の良い例は、CommandTCtrlPです。

  • CommandTはRubyとCを使用してあいまい検索を実行します
  • 一方、CtrlPは純粋なVimL / Vimscriptです。
  • CommandTは通常、バニラCtrlPよりも高速です。

CommandTが最初にリリースされたときから特に人気があると仮定しますが、そうではありません。CommandTには約2000人のユーザーがいて、CtrlPには約20,000人のユーザーがいます。私の意見では、CommandTの要件は参入障壁を引き起こします。git cloneCtrlPの場合と同様に、vimドットファイルを使用できず、CommandTを使用して新しいマシンで稼働することはできません。

対位法:

それは+python/ ではなくC + Ruby +python3です。Pythonのサポートが組み込まれています。あなたは絶対的に正しいです。この証明例のポイントは次のようになりGundo使用(〜5000)+pythonundotree純粋VIMLです(〜1000)。私の個人的な意見では、undotreeはGundo(最初に市場に出たもの)よりもあまり知られていないと私は主張します。

VimプラグインにPythonを使用するだけで十分です。

結局のところ、PythonでVimプラグインを実行するには、VimといくつかのVimLについてかなり知っている必要があります。vimモジュールは、それが以前よりもはるかに優れているが、依然として状況はeval-ようVIMLの公正な量を必要とします。

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

を参照してください:h python-vim

プラグインのpython部分を「ブートストラップ」するためにVimLも必要です。したがって、VimLからの脱出はなく、量を減らすだけです。

結論

+python/ が必要な場合は、+python3必ずそれを使用してください。Pythonサポートの素晴らしいユースケースがあるようです。ただし、私の意見では、VimL / Vimscriptを完全に回避することはできません。私はVimLでVimを実行することをお勧めします。VimLで実行するのが難しい/トリッキー/遅いものにはpythonを使用します。


詳細な説明と例を示してくれてありがとう。私はこれらの例を持っていなかった、そしてそれは一種の私の直感を検証する。
alpha_989

インストールをできるだけ簡単にすることについては、あなたの意見に同意します。git submodule開発の時点から使用することでいくつかの利点があるかもしれませんが、おそらくそれをbashスクリプトにカプセル化する必要があるため、このプラグインをインストールするために多くのハードルを経験する必要はありません。これにより、開発者とユーザーの懸念に対処できます。
alpha_989

これには時間がかかる可能性があるため、近い将来、より簡単な解決策は、Pythonモードプラグインの古い安定したバージョンへの代替リンクを用意することです(現在のバージョンと比べていくつかのバグが増えるでしょう)。これは直接インストールできます。 vimrcに行を含めるか、git cloneを使用します。
alpha_989

私はまた、Pythonのルートを下りるのと同じ感覚を持っていました。+ python3を使用しても問題ないかもしれないと思った理由は、ほとんどの人がおそらくpythonとともにインストールされる「巨大な」バージョンを使用しているためです。さらに、現在のpython-modeはデフォルトですでに+ python3と+ pythonを必要とするため、現在のユーザーはvimのバージョンを変更する必要はありません。
alpha_989

また、python-vimに関するヒントに感謝します。これについては後で説明します。VimLの使用を最小限に抑えることを試みましたが、必ずしもそれを排除することはしませんでした。私たちが可能な限りpython(すべてではない)で書くことを目標としている場合、VIMでのpythonの実装が向上するにつれて、コードベースの多くをpythonに変換し始めることができると私は考えました。
alpha_989

2

私自身、主にWindowsで、場合によっては他のプラットフォームで言えば、Python統合の現実に満足したことはありません。それを必要とする人々のために存在していることを感謝していますが、それは「ただ働く」だけではありません。Python DLLの正確なバージョンを入手する必要があり、私が最後に行ったのは試行錯誤でしたが、最終的に見返りを払うだけの価値はないことに気付きました。

今日は、Vimの内部で使用するPythonで記述したいくつかの機能がありsystem('python ...')、スクリプトを実行する呼び出しでトリガーします。


ご意見をお寄せいただきありがとうございます。Pythonの統合がWindowsではうまく機能しないことを理解していませんでした。これについても取り上げます。
alpha_989

ここでは、問題の1つの探査です:stackoverflow.com/questions/32025090/...
ダッシュ-タム-bangが

...そしてもう1つ:github.com/vim/vim/issues/526
dash-tom-bang

メモリ車線ダウン私の散歩をラップするには、次のstackoverflow.com/questions/4718122/...
ダッシュ-トム・バン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.