Powerline: أضف دعمًا لبرنامج NeoVim

تم إنشاؤها على ٢٧ يناير ٢٠١٥  ·  23تعليقات  ·  مصدر: powerline/powerline

أدرك أن هذا قد لا يكون ممكنًا على الفور نظرًا لطبيعة NeoVim التي لا تزال غير مستقرة ، ولكني أود تقديم الطلب على أي حال.

أولاً ، يفشل powerline عندما يحاول الوصول إلى طريقة bindeval التي لا يدعمها NeoVim. حاولت إجراء بعض التصحيح الأولي ، واكتشفت أن Powerline يعتمد على Vim's 7.4 Python API عندما يكتشف إصدارًا أكبر من 703. تشير NeoVim إلى الإصدار 704 في الوقت الحالي ، لكنها لم تضف دعمًا لـ Vim's 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",)

لست متأكدًا مما يحدث هنا أنه لا يمكن العثور على "powerline". يبدو أن تنفيذ :py import sys; print sys.path يشير إلى إمكانية العثور على المسارات الصحيحة ، ويمكنني تنفيذ :py import powerline بدون شكوى.

للتسجيل ، أقوم بتشغيل أحدث إصدار من NeoVim (NVIM 0.0.0-alpha + 201501262108) على نظام التشغيل Mac OS 10.10 ، مع تثبيت Python 2.7 من خلال homebrew ، و powerline 2.0 مثبتًا عبر نقطة.

تريد أن تدعم هذه القضية؟ أضف مكافأة على ذلك! نحن نقبل المنح عبر

cvim enhancement

التعليق الأكثر فائدة

هل يمكنك التوقف عن إرسال رسائل غير مرغوب فيها إلى تقرير الخطأ هذا باستخدام "+1" غير المجدي. ما عليك سوى استخدام ميزة "رد الفعل" على جيثب في المنشور الأول.

ال 23 كومينتر

abstiles powerline الذي لم يتم العثور عليه ليس له علاقة بالوحدة النمطية powerline . إنه مثيل لفئة powerline.vim.VimPowerline المتوقع أن تعيش في الوحدة النمطية __main__ . إذا

python foo = 1

ستضيف المتغير foo إلى شيء _ آخر_ ثم __main__ لن تعمل روابط الوحدة. ولكن على أي حال ، يجب ألا تحاول استخدام روابط Vim القديمة لأن السبب الأساسي الذي تمت إضافة pyeval في المقام الأول هو أن الطرق الأخرى بطيئة جدًا (حسنًا ، فهي ليست بطيئة جدًا بالنسبة إلى خط الطاقة لأنني كتبت لهم لنقل الملفات بضعة KiBs إلى عدد قليل من MiBs في منعطف واحد ولم يكن powerline قريبًا أبدًا من معدل البيانات هذا ، ولكن لا يزال هناك الكثير من النفقات العامة لتفريغ السلاسل). يستخدم 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 ووقت عرضها. في هذه الحالة ، قد يبدو أنني أستطيع الانتظار حتى تتم معالجة الأشياء المحسوبة ، لذلك لن يكون هناك تأخير ، لكنني لست متأكدًا. هناك حاجة إلى إعادة الكتابة في أي حال.

هناك أيضًا بديل حيث تحسب وظيفة خط الحالة الأشياء باستمرار وترسلها إلى powerline وترسل powerline باستمرار تحديثات إلى & statusline عندما تكون جاهزة ، ولكن هذا لا يختلف فيما يتعلق بكيفية إعادة كتابة وظائف المقطع وهذا البديل غير متوافق إلى حد ما مع فيم.

قد يتم استبدال بعض الأشياء الموجودة في القائمة بأحداث 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",)

إذا أضفت اختبارًا مقابل hasattr(vim, 'bindeval') قبل المكالمات إلى bindeval بدون أي اختبار ، فسأحصل على:

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

لذلك ، أنا أتساءل بالضبط ما هي الميزات التي تم كسرها و / أو ما إذا كان <= 703 تعمل حاليًا ، وإذا كان الأمر كذلك ، كيف تجبر Powerline بشكل صحيح على استخدام الروابط القديمة مع NeoVim.

لا يدعم NeoVim _not_ واجهة برمجة تطبيقات Python الكاملة حتى من الإصدار 7.0. هناك تصحيح لـ powerline اعتدت على تشغيله للحصول على بعض قياسات الأداء وهو أكثر من مجرد إضافة عدد قليل من if s. أي انظر neovim / python-client # 85 ، neovim / python-client # 84 ، neovim / python-client # 87.

أوه صحيح ، قبيح. شكرا على الروابط.

لم ألاحظ أي نشاط جديد بشأن هذه المسألة أو قضايا Neovim ذات الصلة. هل هناك ببساطة اختلافات لا يمكن التوفيق بينها بين Neovim و Powerline بحيث لا توجد خطط لـ Powerline لدعم Neovim؟

أود أن أعرف ما إذا كنت ترى أي أمل في حل المشكلات هنا ، أو إذا كان عليّ التخلي عن أملي في استخدام Powerline في Neovim.

هل يمكنني إضافة تصويتي لهذه الميزة أيضًا؟

هل هناك بديل جيد لـ powerline يعمل مع neovim؟

لطيف! انه يعمل انها تعمل! شكرا @ aarobc!

من الصعب جدا الاختيار بين neovim و powerline ...
+ ∞

تقدم @ code- الجوع

@ kierun شكرًا ، يبدو أنه يقوم بنفس المهمة تمامًا.

الجانب السلبي الوحيد مع شركة الطيران هو أنه يجب عليك تكوينه بصرف النظر عن powerline وإذا كنت تستخدم بالفعل powerline في 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" غير المجدي. ما عليك سوى استخدام ميزة "رد الفعل" على جيثب في المنشور الأول.

وبالمثل ، يمكنك الرجوع وحذف تعليقات "+1" لتسهيل متابعة هذه المشكلة.

إذن نحن 2019 (تقريبًا 2020) الآن ، وما زلت أتلقى هذا الخطأ. هل هناك حل بديل لتشغيل Powerline في nvim ، أم أنه حصري؟

vegerot لقد استسلمت منذ vim-flight الذي يعمل خارج الصندوق ويمكن تثبيته مع dein أو مديري الإضافات الأخرى ...

5 سنوات ونصف وما زلت لا تعمل على الإطلاق؟ هل هناك تحديث لحالة هذا ، أو احتمال أن يعمل هذا في وقت ما في المستقبل؟

5 سنوات ونصف وما زلت لا تعمل على الإطلاق؟ هل هناك تحديث لحالة هذا ، أو احتمال أن يعمل هذا في وقت ما في المستقبل؟

للأسف ، لا يوجد تقدم نحو دعم NeoVim والنظر إلى التعليقات الأصلية @ ZyX-I حول هذه المسألة ، لست متفائلًا جدًا فيما يتعلق بالمستقبل. ربما غيرت NeoVim شيئًا فيما يتعلق بدعم الثعبان في هذه الأثناء (وهو ما لا أعرفه) لذلك سيكون من المنطقي النظر إلى هذا مرة أخرى ؛ إذا لم يفعلوا ذلك وإذا لم يفعلوا ذلك ، فأنا لست متفائلًا جدًا بشأن إضافة دعم NeoVim (على الأقل بواسطتي) في المستقبل القريب ، آسف.

غير ذي صلة: لقد أزلت للتو عددًا كبيرًا من تعليقات "+1" لجعل هذه المشكلة أكثر قابلية للقراءة إلى حد ما.

هل هناك طريقة لإخفاء هذا الخطأ على الأقل؟ في حالتي ، أريد الحصول على كل من neovim و vim مع powerline.

هل هناك طريقة لإخفاء هذا الخطأ على الأقل؟ في حالتي ، أريد الحصول على كل من neovim و vim مع powerline.

يمكنك تجربة ما يلي: في .vimrc ، ضع كل الأكواد المتعلقة بـ powerline في كتلة if !has('nvim') ... endif .

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات