Powerline: 添加对 NeoVim 的支持

创建于 2015-01-27  ·  23评论  ·  资料来源: powerline/powerline

我知道由于 NeoVim 仍然不稳定的性质,这可能不是立即可行的,但我还是想提出这个要求。

首先,powerline 在尝试访问 NeoVim 不支持的 bindeval 方法时失败。 我尝试进行一些初始调试,发现 Powerline 在检测到高于 703 的版本时依赖 Vim 的 7.4 Python API。NeoVim 现在报告版本为 704,但尚未添加对 Vim 7.4 Python API 的支持(请参阅有关 neovim 的讨论/neovim#1898),其中显然包含 bindeval 方法。 在尝试通过修改 powerline 的版本检查来解决此问题后,我仍然看到以下问题:

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

作为记录,我在 Mac OS 10.10 上运行最新的 NeoVim (NVIM 0.0.0-alpha+201501262108),通过自制软件安装 Python 2.7,通过 pip 安装电力线 2.0。

想要支持这个问题吗? 悬赏吧! 我们通过Bountysource接受赏金。

cvim enhancement

最有用的评论

你能不能停止用无用的“+1”发送这个错误报告。 只需在第一篇文章中使用“反应”github 功能即可。

所有23条评论

未找到的@abstiles powerlinepowerline模块无关。 它是powerline.vim.VimPowerline类的一个实例,预计存在于__main__模块中。 如果

python foo = 1

将变量foo到某物 _other_ 然后__main__模块绑定将不起作用。 但是在任何情况下,您都不应该尝试对旧 Vim 使用绑定,因为首先添加pyeval原因是其他方法太慢了(好吧,它们对于 powerline 并没有那么慢,因为我写了它们一次将文件传输几 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 事件。

有没有办法至少让这个工作,即使它没有达到最佳效果? 我尝试将版本条件从703704 ,但我得到的只是:

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 的旧绑定。

即使从 7.0 版开始,NeoVim 也_不_支持完整的 Python API。 有一个 powerline 补丁,我用来让它工作以进行一些性能测量,而不仅仅是添加几个if s。 即见neovim/python-client#85、neovim/python-client#84、neovim/python-client#87。

哦对了,丑。 感谢您的链接。

我注意到没有关于此问题或相关 Neovim 问题的新活动。 Neovim 和 Powerline 之间是否存在不可调和的差异,以至于 Powerline 没有计划支持 Neovim?

我想知道您是否看到解决这里问题的任何希望,或者我是否应该放弃在 Neovim 中使用 Powerline 的希望。

我也可以为此功能投票吗?

是否有与 Neovim 一起使用的 powerline 的良好替代品?

好的! 这样可行! 谢谢@aarobc!

在 Neovim 和 powerline 之间很难选择...
+∞

@code-hunger vim-airline提供与 powerline 类似的功能,并且可以与 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,并希望看到电力线对它的支持。

你能不能停止用无用的“+1”发送这个错误报告。 只需在第一篇文章中使用“反应”github 功能即可。

同样,您可以返回并删除您的“+1”评论,以便更轻松地关注此问题。

所以现在是 2019 年(几乎是 2020 年),我仍然收到此错误。 有没有让电力线在 nvim 中工作的解决方法,还是 vim 独有的?

@vegerot我很久以前就放弃了,开始使用vim-airline ,它开箱即用,可以与 dein 或其他插件管理器一起安装......

5 1/2 年,但仍然完全不起作用? 是否有关于此状态的更新,或者这是否有可能在未来某个时候起作用?

5 1/2 年,但仍然完全不起作用? 是否有关于此状态的更新,或者这是否有可能在未来某个时候起作用?

可悲的是,在支持 NeoVim 和查看 @ZyX-I 对此问题的原始评论方面没有任何进展,我对未来不太乐观。 也许 NeoVim 在此期间改变了一些关于它的 Python 支持(我不知道),所以再次看这个是有意义的; 如果没有,如果他们不这样做,我对在不久的将来(至少由我)添加 NeoVim 支持不太乐观,抱歉。

无关:我刚刚删除了过多的“+1”评论,以使这个问题更具可读性。

有没有办法至少隐藏这个错误? 在我的情况下,我希望将 neovim 和带有电力线的 vim 结合起来。

有没有办法至少隐藏这个错误? 在我的情况下,我希望将 neovim 和带有电力线的 vim 结合起来。

您可以尝试以下操作: 在您的.vimrc ,将所有与电力线相关的代码放在if !has('nvim') ... endif块中。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

damienstanton picture damienstanton  ·  5评论

kataev picture kataev  ·  6评论

guyzmo picture guyzmo  ·  5评论

paul-tcell picture paul-tcell  ·  5评论

iamjboyd picture iamjboyd  ·  6评论