我知道由于 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接受赏金。
未找到的@abstiles powerline
与powerline
模块无关。 它是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 事件。
有没有办法至少让这个工作,即使它没有达到最佳效果? 我尝试将版本条件从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 的旧绑定。
即使从 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 的良好替代品?
@phiche查看https://github.com/bling/vim-airline
好的! 这样可行! 谢谢@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
块中。
最有用的评论
你能不能停止用无用的“+1”发送这个错误报告。 只需在第一篇文章中使用“反应”github 功能即可。