NeoVimの性質がまだ不安定なため、これはすぐには実行できない可能性があることを理解していますが、とにかくリクエストを行いたいと思います。
まず、NeoVimがサポートしていないbindevalメソッドにアクセスしようとすると、電力線が失敗します。 初期デバッグを試みたところ、Powerlineが703より大きいバージョンを検出したときにVimの7.4 Python APIに依存していることがわかりました。NeoVimは現在バージョン704として報告していますが、Vimの7.4 Python APIのサポートは追加されていません(neovimに関する説明を参照)。 / neovim#1898)、これには明らかにbindevalメソッドが含まれています。 電力線のバージョンチェックを変更してこれを回避しようとした後も、次の問題が発生します。
Error detected while processing function PowerlinePyeval..provider#python#Call:
line 1:
NameError("name 'powerline' is not defined",)
ここで何が起こっているのかわからないので、「電力線」が見つかりません。 :py import sys; print sys.path
を実行すると、正しいパスが見つかることを示しているようで、文句なしに:py import powerline
を実行できます。
ちなみに、私は最新のNeoVim(NVIM 0.0.0-alpha + 201501262108)をMac OS 10.10で実行しており、Python 2.7はhomebrewでインストールされ、powerline2.0はpipでインストールされています。
この問題を支持したいですか? それに賞金を投稿してください! Bountysourceを介して
見つからない@abstiles powerline
は、 powerline
モジュールとは何の関係もありません。 これは、 __main__
モジュールに存在すると予想されるpowerline.vim.VimPowerline
クラスのインスタンスです。 もしも
python foo = 1
変数foo
を何か_other_に追加すると、 __main__
モジュールバインディングは機能しなくなります。 しかし、いずれにせよ、最初にpyeval
が追加された理由は、他の方法が非常に遅いためです(私が書いたので、電力線ではそれほど遅くありません)。 1ターンに数KiBから数MiBにファイルを送信するためのものであり、電力線はそのデータレートに近づくことはありませんでしたが、文字列をダンプするためのオーバーヘッドは依然として多くあります。 NeoVimはソケット上でmsgpackを使用しており、これははるかに遅くなります。 NeoVimのサポートをすぐに追加する予定はありませんでした。これは、Vimバインディングを大幅に書き直す必要があるためです。
&statusline
\/
pyeval
\/
…
\/
segment function
\/
vim.eval
\/
result
\/
displayed statusline
大丈夫ですが
&statusline
\/
:python --------msgpack-rpc------> … > segment function
\/
vim_eval <-------msgpack-rpc------- vim.eval
\/
eval result (C) --------msgpack-rpc------> result (Python)
\/
displayed stl <-------msgpack-rpc------- segment function result
(すべての場合:Vimとのインターフェイスを使用するのが面倒なセグメント関数ごとに繰り返されます)はそうではなく、これが機能しないことを示すテストは必要ありません。
私が見ることができる唯一の代替アプローチは
startup notification -------msgpack-rpc-------> powerline
\/
…
\/
segment.startup
\/
&statusline function <------msgpack-rpc-------- list of things needed from NeoVim
\/
computed list of things ----------msgpack-rpc-----------------------------+
|
&statusline |
\/ |
:python (+computed list of things) -------msgpack-rpc-------> renderer | -----> … > segment function
\/ \/ \/
displayed statusline <------msgpack-rpc-------- cached result result
|
&statusline +---------------------+
\/ |
:python (+computed list of things) -------msgpack-rpc-------> renderer | -----> … > segment function
\/ \/ \/
displayed statusline <------msgpack-rpc-------- cached result result
|
…
、しかし、ご覧のとおり、NeoVimから必要なものが計算されてから、表示されるまでに遅れが生じます。 この場合、計算されたものが処理されるまで待つ余裕があるように見えるかもしれませんので、ラグはありませんが、よくわかりません。 いずれにせよ、書き直しが必要です。
ステータスライン関数が常に物事を計算して電力線に送信し、電力線が準備ができたら常に更新を&statuslineに送り返すという選択肢もありますが、これはセグメント関数を書き直す必要がある方法に関しては違いはなく、このバリアントはかなり互換性がありませんVimで。
リスト内のいくつかのものは、少し速いNeoVimイベントに置き換えられる可能性があります。
たとえそれが最適に機能しなくても、少なくともこれを機能させる方法はありませんか? バージョン条件を703
から704
に上げてみましたが、それは次のことだけでした。
Error detected while processing function provider#python#Call:
line 1:
NameError("name 'powerline' is not defined",)
それ以外の:
Error detected while processing function provider#python#Call:
line 1:
AttributeError("'Nvim' object has no attribute 'bindeval'",)
NameError("name 'powerline_setup' is not defined",)
NameError("name 'powerline_setup' is not defined",)
bindeval
を呼び出す前に、 hasattr(vim, 'bindeval')
テストを追加すると、次のようになります。
Error detected while processing function provider#python#Call:
line 1:
NvimError('Key not found',)
だから、私は正確にどの機能が壊れているのか、そして/または<= 703が現在機能しているかどうか、そしてもしそうなら、PowerlineにNeoVimで古いバインディングを使用するように適切に強制する方法を疑問に思っています。
NeoVimは、バージョン7.0以降でも完全なPythonAPIをサポートしていません。 いくつかのパフォーマンス測定を行うために動作させるために使用した電力線用のパッチがあり、それはほんの数if
追加するだけです。 つまり、neovim / python-client#85、neovim / python-client#84、neovim / python-client#87を参照してください。
そうそう、醜い。 リンクをありがとう。
この問題または関連するNeovimの問題に関する新しいアクティビティはありません。 PowerlineがNeovimをサポートする計画がないように、NeovimとPowerlineの間に単に和解できない違いがありますか?
ここで問題を解決する希望があるかどうか、またはNeovimでPowerlineを使用するという希望をあきらめる必要があるかどうかを知りたいです。
この機能への投票も追加できますか?
neovimで動作する電力線の良い代替手段はありますか?
@phicheチェックアウトhttps://github.com/bling/vim-airline
良い! それはうまくいきます! ありがとう@aarobc!
neovimとpowerlineのどちらかを選択するのは非常に難しい...
+∞
@ code-hunger vim-airlineは、電力線と同様の機能を提供し、neovimで正常に動作します。
@kierunありがとう、それはまったく同じ仕事をしているようです。
航空会社の唯一の欠点は、電力線とは別に構成する必要があることです。すでにbash、weechat / irssi、tmuxなどで電力線を使用している場合は、それを行うのは少し面倒です。
@Goddardこれらを見てください:
https://github.com/edkolev/promptline.vim
https://github.com/edkolev/tmuxline.vim
上記のプロジェクトは、bash、zsh、fish、tmuxのスクリプトを生成し、生成されたスクリプトは、Pythonなどの外部プログラムを呼び出さないネイティブコードです。
私はnvimに切り替えていますが、Powerlineがそれをサポートすることを望んでいます。
このバグレポートを役に立たない「+1」でスパムするのをやめていただけませんか。 最初の投稿で「リアクション」github機能を使用するだけです。
同様に、戻って「+1」コメントを削除すると、この問題を簡単に追跡できます。
そのため、現在は2019年(ほぼ2020年)ですが、まだこのエラーが発生しています。 Powerlineをnvimで動作させるための回避策はありますか、それともvim専用ですか?
@vegerot私はvim-airlineを使い始めました…
5年半、それでもまったく機能しませんか? これのステータスに関する更新はありますか、またはこれが将来のある時点で機能する可能性はありますか?
5年半、それでもまったく機能しませんか? これのステータスに関する更新はありますか、またはこれが将来のある時点で機能する可能性はありますか?
残念ながら、NeoVimのサポートと@ZyXの確認に向けた進展はありません。私はこの問題について独自のコメントをしていますが、将来についてはあまり楽観的ではありません。 おそらく、NeoVimはその間にPythonサポートに関して何かを変更したので(私にはわかりません)、これをもう一度見るのは理にかなっています。 そうでない場合、およびそうしない場合、NeoVimのサポートが近い将来(少なくとも私によって)追加されることを私はあまり楽観視していません。申し訳ありません。
無関係:この問題を読みやすくするために、大量の「+1」コメントを削除しました。
少なくともこのエラーを隠す方法はありますか? 私の場合、両方のneovimと電力線付きのvimが必要です。
少なくともこのエラーを隠す方法はありますか? 私の場合、両方のneovimと電力線付きのvimが必要です。
次のことを試すことができます。 .vimrc
、電力線関連のすべてのコードをif !has('nvim') ... endif
ブロックに配置します。
最も参考になるコメント
このバグレポートを役に立たない「+1」でスパムするのをやめていただけませんか。 最初の投稿で「リアクション」github機能を使用するだけです。