Powerline: Unterstützung für NeoVim . hinzufügen

Erstellt am 27. Jan. 2015  ·  23Kommentare  ·  Quelle: powerline/powerline

Ich verstehe, dass dies aufgrund der immer noch instabilen Natur von NeoVim möglicherweise nicht sofort machbar ist, aber ich möchte die Anfrage trotzdem stellen.

Erstens schlägt Powerline fehl, wenn es versucht, auf die Bindeval-Methode zuzugreifen, die NeoVim nicht unterstützt. Ich habe versucht, ein erstes Debugging durchzuführen, und habe festgestellt, dass Powerline auf Vims 7.4 Python-API angewiesen ist, wenn es eine Version größer als 703 erkennt. NeoVim meldet derzeit als Version 704, hat jedoch keine Unterstützung für Vims 7.4 Python-API hinzugefügt (siehe Diskussion zu neovim /neovim#1898), die anscheinend die Bindeval-Methode enthält. Nachdem ich versucht habe, dies zu umgehen, indem ich die Versionsprüfung von Powerline geändert habe, sehe ich immer noch das folgende Problem:

Error detected while processing function PowerlinePyeval..provider#python#Call:
line    1:
NameError("name 'powerline' is not defined",)

Ich bin mir nicht sicher, was hier vor sich geht, dass "Powerline" nicht gefunden werden kann. Das Ausführen von :py import sys; print sys.path scheint anzuzeigen, dass die richtigen Pfade gefunden werden können, und ich kann :py import powerline ohne Beschwerden ausführen.

Für die Aufzeichnung führe ich das neueste NeoVim (NVIM 0.0.0-alpha+201501262108) auf Mac OS 10.10 aus, wobei Python 2.7 über Homebrew und Powerline 2.0 über pip installiert sind.

Möchten Sie dieses Problem unterstützen? Setzen Sie ein Kopfgeld darauf! Wir akzeptieren Prämien über Bountysource .

cvim enhancement

Hilfreichster Kommentar

Könnten Sie einfach aufhören, diesen Fehlerbericht mit nutzlosen "+1" zu spammen. Verwenden Sie einfach die Github-Funktion "Reaktion" im ersten Beitrag.

Alle 23 Kommentare

@abstiles powerline , das nicht gefunden wird, hat nichts mit dem Modul powerline zu tun. Es ist eine Instanz der Klasse powerline.vim.VimPowerline , von der erwartet wird, dass sie im Modul __main__ lebt. Wenn

python foo = 1

wird die Variable foo zu etwas _anderem_ hinzufügen, dann werden __main__ Modulbindungen nicht funktionieren. Aber auf jeden Fall sollten Sie nicht versuchen, Bindungen für alte Vim zu verwenden, denn der Grund, warum pyeval an erster Stelle hinzugefügt wurde, ist, dass andere Wege verdammt langsam sind (naja, für Powerline sind sie nicht so langsam, wie ich geschrieben habe sie für die Übertragung von Dateien von einigen KiBs zu einigen MiBs in einer Runde und Powerline war nie in der Nähe dieser Datenrate, aber es gibt immer noch viel Overhead für das Dumping von Strings). NeoVim verwendet msgpack über Sockets und dies wird viel langsamer sein. Ich würde in absehbarer Zeit keine NeoVim-Unterstützung hinzufügen, da dies eine umfassende Neufassung der Vim-Bindungen erfordert

&statusline
   \/
pyeval
   \/
…
   \/
segment function
   \/
vim.eval
   \/
result
   \/
displayed statusline

ist in Ordnung, aber

&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

(in allen Fällen: wiederholt für jede Segmentfunktion, die stört, eine Schnittstelle mit Vim zu verwenden) ist nicht und ich brauche keine Tests, um zu sagen, dass dies nicht funktionieren würde.

Der einzige alternative Ansatz, den ich sehen kann, ist

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
                                                                                                |
…

, aber wie Sie sehen, gibt es eine Verzögerung zwischen der Berechnung der von NeoVim benötigten Dinge und der Anzeige. In diesem Fall kann es jedoch vorkommen, dass ich es mir leisten kann, zu warten, bis die berechneten Dinge verarbeitet sind, damit es keine Verzögerungen gibt, aber ich bin mir nicht sicher. Umschreiben ist in jedem Fall erforderlich.

Es gibt auch eine Alternative, bei der die Statusline-Funktion ständig Dinge berechnet und an Powerline sendet und Powerline ständig Updates an &statusline zurücksendet, wenn sie bereit sind, aber dies ist nicht anders, wie Segmentfunktionen umgeschrieben werden müssen und diese Variante ist eher nicht kompatibel mit Vim.

Einige Dinge in einer Liste können durch NeoVim-Ereignisse ersetzt werden, was etwas schneller ist.

Gibt es nicht eine Möglichkeit, dies zumindest zum Laufen zu bringen, auch wenn es nicht optimal funktioniert? Ich habe versucht, die Versionskonditionen von 703 auf 704 , aber alles, was mich gebracht hat, war:

Error detected while processing function provider#python#Call:
line    1:
NameError("name 'powerline' is not defined",)

Anstatt:

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",)

Wenn ich einen Test für hasattr(vim, 'bindeval') vor den Anrufen von bindeval hinzufüge, die keine haben, erhalte ich nur:

Error detected while processing function provider#python#Call:
line    1:
NvimError('Key not found',)

Ich frage mich also genau, welche Funktionen defekt sind und / oder ob <=703 derzeit funktionieren, und wenn ja, wie man Powerline richtig erzwingen kann, die älteren Bindungen mit NeoVim zu verwenden.

NeoVim unterstützt _nicht_ die vollständige Python-API, selbst ab Version 7.0. Es gibt einen Patch für Powerline, mit dem ich es zum Laufen gebracht habe, um einige Leistungsmessungen durchzuführen, und es ist mehr als nur das Hinzufügen einiger if s. Dh siehe neovim/python-client#85, neovim/python-client#84, neovim/python-client#87.

Ach richtig, hässlich. Danke für die Links.

Ich habe keine neuen Aktivitäten zu diesem Thema oder den damit verbundenen Neovim-Problemen festgestellt. Gibt es einfach unüberbrückbare Unterschiede zwischen Neovim und Powerline, so dass keine Pläne für Powerline bestehen, Neovim zu unterstützen?

Ich würde gerne wissen, ob Sie hier eine Hoffnung auf eine Lösung der Probleme sehen oder ob ich meine Hoffnung aufgeben sollte, Powerline in Neovim zu verwenden.

Darf ich auch für diese Funktion meine Stimme abgeben?

Gibt es eine gute Alternative zu Powerline, die mit neovim funktioniert?

Schön! Das funktioniert! Danke @aarobc!

Es ist sehr schwer, sich zwischen Neovim und Powerline zu entscheiden...
+∞

@code-hunger vim-airline bietet ähnliche Funktionen wie Powerline und funktioniert gut mit neovim.

@kierun danke, es scheint den gleichen Job zu machen.

Der einzige Nachteil bei Airline ist, dass Sie es unabhängig von Powerline konfigurieren müssen und wenn Sie Powerline bereits in bash, weechat/irssi, tmux usw. verwenden, ist dies nur ein wenig nervig.

@ Goddard Schauen Sie sich diese an:

https://github.com/edkolev/promptline.vim
https://github.com/edkolev/tmuxline.vim

Die obigen Projekte generieren Skripte für bash, zsh, fish und tmux und das generierte Skript ist nativer Code, der kein externes Programm wie Python aufruft.

Ich steige auf nvim um und würde gerne Powerline-Unterstützung dafür sehen.

Könnten Sie einfach aufhören, diesen Fehlerbericht mit nutzlosen "+1" zu spammen. Verwenden Sie einfach die Github-Funktion "Reaktion" im ersten Beitrag.

Ebenso können Sie zurückgehen und Ihre "+1"-Kommentare löschen, um dieses Problem leichter nachvollziehen zu können.

Es ist also 2019 (fast 2020) und ich erhalte immer noch diesen Fehler. Gibt es eine Problemumgehung, um Powerline in nvim zum Laufen zu bringen, oder ist es ausschließlich vim?

@vegerot Ich habe vor Ewigkeiten aufgegeben und angefangen, vim-airline zu verwenden, das sofort funktioniert und mit deinem oder anderen Plugin-Managern installiert werden kann…

5 1/2 Jahre und geht immer noch gar nicht? Gibt es ein Update zum Status oder der Wahrscheinlichkeit, dass dies irgendwann in der Zukunft funktioniert?

5 1/2 Jahre und geht immer noch gar nicht? Gibt es ein Update zum Status oder der Wahrscheinlichkeit, dass dies irgendwann in der Zukunft funktioniert?

Leider gibt es keine Fortschritte bei der Unterstützung von NeoVim und wenn ich mir die Originalkommentare von @ZyX-I zu diesem Thema ansehe, bin ich nicht sehr optimistisch in Bezug auf die Zukunft. Vielleicht hat NeoVim in der Zwischenzeit etwas an seiner Python-Unterstützung geändert (was ich nicht weiß), so dass es sinnvoll wäre, sich das noch einmal anzusehen; wenn nicht und wenn nicht, bin ich nicht sehr optimistisch, dass NeoVim-Unterstützung (zumindest von mir) in naher Zukunft hinzugefügt wird, sorry.

Unabhängig davon: Ich habe gerade die Fülle von „+1“-Kommentaren entfernt, um dieses Problem etwas lesbarer zu machen.

Gibt es eine Möglichkeit diesen Fehler zumindest auszublenden? In meinem Fall möchte ich sowohl neovim als auch vim mit Powerline haben.

Gibt es eine Möglichkeit diesen Fehler zumindest auszublenden? In meinem Fall möchte ich sowohl neovim als auch vim mit Powerline haben.

Sie können Folgendes versuchen: Fügen Sie in Ihrem .vimrc den gesamten Powerline-bezogenen Code in einen if !has('nvim') ... endif Block ein.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

paul-tcell picture paul-tcell  ·  5Kommentare

uD4ra picture uD4ra  ·  5Kommentare

kataev picture kataev  ·  6Kommentare

ssbanerje picture ssbanerje  ·  6Kommentare

sachevl picture sachevl  ·  3Kommentare