Powerline: Ajout de la prise en charge de NeoVim

Créé le 27 janv. 2015  ·  23Commentaires  ·  Source: powerline/powerline

Je comprends que cela peut ne pas être immédiatement faisable en raison de la nature encore instable de NeoVim, mais j'aimerais quand même faire la demande.

Premièrement, powerline échoue lorsqu'il essaie d'accéder à la méthode bindeval que NeoVim ne prend pas en charge. J'ai essayé de faire un débogage initial et j'ai découvert que Powerline s'appuie sur l'API Python 7.4 de Vim lorsqu'il détecte une version supérieure à 703. NeoVim rapporte actuellement la version 704, mais n'a pas ajouté la prise en charge de l'API Python 7.4 de Vim (voir la discussion sur neovim /neovim#1898), qui inclut apparemment la méthode bindeval. Après avoir tenté de contourner ce problème en modifiant la vérification de version de Powerline, je rencontre toujours le problème suivant :

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

Je ne suis pas sûr de ce qui se passe ici, car il ne peut pas trouver "Powerline". L'exécution de :py import sys; print sys.path semble indiquer que les bons chemins peuvent être trouvés, et je peux exécuter :py import powerline sans me plaindre.

Pour mémoire, j'exécute le dernier NeoVim (NVIM 0.0.0-alpha+201501262108) sur Mac OS 10.10, avec Python 2.7 installé via homebrew et powerline 2.0 installé via pip.

Voulez-vous soutenir ce problème ? Publiez une prime dessus ! Nous acceptons les primes via Bountysource .

cvim enhancement

Commentaire le plus utile

Pourriez-vous simplement arrêter de spammer ce rapport de bogue avec un "+1" inutile. Utilisez simplement la fonctionnalité github "reaction" sur le premier message.

Tous les 23 commentaires

@abstiles powerline qui n'est pas trouvé n'a rien à voir avec le module powerline . C'est une instance de la classe powerline.vim.VimPowerline qui devrait vivre dans le module __main__ . Si

python foo = 1

ajoutera la variable foo à quelque chose _autre_ alors les liaisons de module __main__ ne fonctionneront pas. Mais dans tous les cas, vous ne devriez pas essayer d'utiliser des liaisons pour l'ancien Vim parce que la raison même pour laquelle pyeval été ajouté en premier lieu est que d'autres moyens sont lents (enfin, ils ne sont pas si lents pour Powerline parce que j'ai écrit eux pour transmettre des fichiers de quelques KiB à quelques Mio en un seul tour et le courant porteur n'a jamais été proche de ce débit de données, mais il y a encore beaucoup de surcharge pour le vidage des chaînes). NeoVim utilise msgpack sur des sockets et cela va être beaucoup plus lent. Je n'allais pas ajouter le support NeoVim de sitôt car cela nécessite une réécriture majeure des liaisons Vim depuis

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

c'est bien, mais

&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

(dans tous les cas : répété pour chaque fonction de segment qui dérange d'utiliser une certaine interface avec Vim) ne l'est pas et je n'ai pas besoin de tests pour dire que cela ne fonctionnerait pas.

La seule approche alternative que je vois est

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

, mais comme vous le voyez, il y aura un décalage entre le moment où les éléments nécessaires à NeoVim seront calculés et le moment où ils seront affichés. Dans ce cas, il peut cependant sembler que je puisse me permettre d'attendre que les choses calculées soient traitées, donc il n'y aura pas de décalage, mais je n'en suis pas sûr. Une réécriture est nécessaire dans tous les cas.

Il existe également une alternative où la fonction statusline calcule constamment les choses et les envoie à powerline et powerline renvoie constamment une mise à jour à &statusline lorsqu'elles sont prêtes, mais ce n'est pas différent de la façon dont les fonctions de segment doivent être réécrites et cette variante n'est plutôt pas compatible avec Vim.

Certaines choses dans une liste peuvent être remplacées par des événements NeoVim, ce qui est un peu plus rapide.

N'y a-t-il pas un moyen de faire au moins fonctionner cela, même s'il ne fonctionne pas de manière optimale ? J'ai essayé de faire passer les conditions de version de 703 à 704 , mais tout ce que j'ai obtenu était :

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

À la place de:

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

Si j'ajoute un test pour hasattr(vim, 'bindeval') avant les appels à bindeval qui n'en ont pas, j'obtiens juste :

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

Donc, je me demande exactement quelles fonctionnalités sont cassées et/ou si <=703 fonctionnent actuellement, et si oui, comment forcer correctement Powerline à utiliser les anciennes liaisons avec NeoVim.

NeoVim ne prend _pas_ en charge l'API Python complète même à partir de la version 7.0. Il y a un patch pour powerline que j'ai utilisé pour le faire fonctionner pour avoir des mesures de performance et c'est plus que d'ajouter quelques if s. C'est-à-dire voir neovim/python-client#85, neovim/python-client#84, neovim/python-client#87.

Ah d'accord, moche. Merci pour les liens.

Je n'ai remarqué aucune nouvelle activité sur ce problème ou sur les problèmes liés à Neovim. Existe-t-il simplement des différences irréconciliables entre Neovim et Powerline, de sorte qu'il n'est pas prévu que Powerline prenne en charge Neovim ?

J'aimerais savoir si vous voyez un espoir de résoudre les problèmes ici, ou si je devrais abandonner mon espoir d'utiliser Powerline dans Neovim.

Puis-je également ajouter mon vote pour cette fonctionnalité ?

Existe-t-il une bonne alternative au powerline qui fonctionne avec neovim ?

Agréable! Ça marche! Merci @aarobc !

Très difficile de choisir entre neovim et powerline...
+∞

@code-hunger vim-airline offre des fonctionnalités similaires à Powerline et fonctionne très bien avec neovim.

@kierun merci, il semble faire à peu près le même travail.

Le seul inconvénient avec la compagnie aérienne est que vous devez le configurer en dehors de powerline et si vous utilisez déjà powerline dans bash, weechat/irssi, tmux, etc... c'est juste un peu ennuyeux de le faire.

@Goddard Jetez un oeil à ceux-ci:

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

Les projets ci-dessus génèrent des scripts pour bash, zsh, fish et tmux et le script généré est un code natif qui n'appelle aucun programme externe comme python.

Je suis en train de passer à nvim et j'aimerais voir le support Powerline pour cela.

Pourriez-vous simplement arrêter de spammer ce rapport de bogue avec un "+1" inutile. Utilisez simplement la fonctionnalité github "reaction" sur le premier message.

De même, vous pouvez revenir en arrière et supprimer vos commentaires "+1" pour rendre ce problème plus facile à suivre.

Nous sommes donc en 2019 (presque 2020) maintenant, et j'obtiens toujours cette erreur. Existe-t-il une solution de contournement pour que Powerline fonctionne dans nvim, ou est-ce une exclusivité vim ?

@vegerot J'ai abandonné il y a longtemps et j'ai commencé à utiliser vim-airline qui fonctionne immédiatement et peut être installé avec dein ou d'autres gestionnaires de plugins…

5 ans 1/2, et ne fonctionne toujours pas du tout ? Y a-t-il une mise à jour sur l'état de cela, ou la probabilité que cela fonctionne à un moment donné dans le futur ?

5 ans 1/2, et ne fonctionne toujours pas du tout ? Y a-t-il une mise à jour sur l'état de cela, ou la probabilité que cela fonctionne à un moment donné dans le futur ?

Malheureusement, il n'y a aucun progrès dans la prise en charge de NeoVim et en regardant les commentaires originaux de @ZyX-I sur ce problème, je ne suis pas très optimiste quant à l'avenir. Peut-être que NeoVim a changé quelque chose concernant sa prise en charge de python entre-temps (ce que je ne sais pas), il serait donc logique de revoir cela; sinon et s'ils ne le font pas, je ne suis pas très optimiste que le support NeoVim sera ajouté (au moins par moi) dans un proche avenir, désolé.

Sans rapport : je viens de supprimer la pléthore de commentaires « +1 » pour rendre ce problème un peu plus lisible.

Existe-t-il au moins un moyen de masquer cette erreur ? Dans mon cas, je veux avoir à la fois neovim et vim avec powerline.

Existe-t-il au moins un moyen de masquer cette erreur ? Dans mon cas, je veux avoir à la fois neovim et vim avec powerline.

Vous pouvez essayer ce qui suit : Dans votre .vimrc , placez tout le code lié au courant porteur dans un bloc if !has('nvim') ... endif .

Cette page vous a été utile?
0 / 5 - 0 notes