Powerline: Tambahkan dukungan untuk NeoVim

Dibuat pada 27 Jan 2015  ·  23Komentar  ·  Sumber: powerline/powerline

Saya mengerti bahwa ini mungkin tidak segera dapat dilakukan karena sifat NeoVim yang masih tidak stabil, tetapi saya tetap ingin mengajukan permintaan.

Pertama, powerline gagal ketika mencoba mengakses metode bindeval yang tidak didukung NeoVim. Saya mencoba melakukan beberapa debugging awal, dan menemukan bahwa Powerline bergantung pada Vim's 7.4 Python API ketika mendeteksi versi yang lebih besar dari 703. NeoVim melaporkan sebagai versi 704 sekarang, tetapi belum menambahkan dukungan untuk Vim's 7.4 Python API (lihat diskusi tentang neovim /neovim#1898), yang tampaknya menyertakan metode bindeval. Setelah mencoba mengatasi ini dengan memodifikasi pemeriksaan versi powerline, saya masih melihat masalah berikut:

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

Saya tidak yakin apa yang terjadi di sini sehingga tidak dapat menemukan "powerline". Menjalankan :py import sys; print sys.path tampaknya menunjukkan bahwa jalur yang benar dapat ditemukan, dan saya dapat menjalankan :py import powerline tanpa keluhan.

Sebagai catatan, saya menjalankan NeoVim terbaru (NVIM 0.0.0-alpha+201501262108) di Mac OS 10.10, dengan Python 2.7 diinstal melalui homebrew, dan powerline 2.0 diinstal melalui pip.

Ingin mendukung masalah ini? Posting hadiah di atasnya! Kami menerima bounty melalui

cvim enhancement

Komentar yang paling membantu

Bisakah Anda berhenti mengirim spam ke laporan bug ini dengan "+1" yang tidak berguna. Cukup gunakan fitur "reaksi" github pada posting pertama.

Semua 23 komentar

@abstiles powerline yang tidak ditemukan tidak ada hubungannya dengan modul powerline . Ini adalah turunan dari kelas powerline.vim.VimPowerline yang diharapkan hidup dalam modul __main__ . Jika

python foo = 1

akan menambahkan variabel foo ke sesuatu _other_ maka __main__ pengikatan modul tidak akan berfungsi. Tetapi bagaimanapun juga Anda tidak boleh mencoba menggunakan binding untuk Vim lama karena alasan pyeval ditambahkan di tempat pertama adalah karena cara lain sangat lambat (well, mereka tidak terlalu lambat untuk powerline karena saya menulis mereka untuk mentransmisikan file beberapa KiB ke beberapa MiB dalam satu putaran dan saluran listrik tidak pernah mendekati kecepatan data itu, tetapi masih ada banyak biaya untuk membuang string). NeoVim menggunakan msgpack melalui soket dan ini akan menjadi jauh lebih lambat. Saya tidak akan menambahkan dukungan NeoVim dalam waktu dekat karena ini membutuhkan penulisan ulang utama dari binding Vim sejak

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

baik-baik saja, tapi

&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

(dalam semua kasus: diulang untuk setiap fungsi segmen yang mengganggu untuk menggunakan beberapa antarmuka dengan Vim) tidak dan saya tidak perlu tes untuk mengatakan bahwa ini tidak akan berhasil.

Satu-satunya pendekatan alternatif yang bisa saya lihat adalah

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

, tetapi seperti yang Anda lihat akan ada jeda antara saat hal-hal yang dibutuhkan dari NeoVim dihitung dan saat ditampilkan. Dalam hal ini mungkin tampak bahwa saya mampu menunggu sampai hal-hal yang dihitung diproses, jadi tidak akan ada jeda, tetapi saya tidak yakin. Penulisan ulang diperlukan dalam hal apa pun.

Ada juga alternatif di mana fungsi statusline terus-menerus menghitung sesuatu dan mengirimkannya ke saluran listrik dan saluran listrik terus-menerus mengirim kembali pembaruan ke &statusline ketika mereka siap, tetapi ini tidak berbeda mengenai bagaimana fungsi segmen perlu ditulis ulang dan varian ini agak tidak kompatibel dengan Vim.

Beberapa hal dalam daftar dapat diganti dengan acara NeoVim yang sedikit lebih cepat.

Apakah tidak ada cara untuk setidaknya membuat ini berfungsi, meskipun tidak berfungsi secara optimal? Saya mencoba mengubah persyaratan versi dari 703 menjadi 704 , tetapi yang saya dapatkan hanyalah:

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

Dari pada:

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

Jika saya menambahkan tes untuk hasattr(vim, 'bindeval') sebelum panggilan ke bindeval yang tidak ada, saya hanya mendapatkan:

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

Jadi, saya bertanya-tanya fitur apa yang rusak dan/atau apakah <=703 saat ini berfungsi, dan jika demikian, bagaimana cara memaksa Powerline dengan benar untuk menggunakan binding lama dengan NeoVim.

NeoVim _not_ mendukung API Python penuh bahkan dari versi 7.0. Ada tambalan untuk saluran listrik yang saya gunakan untuk membuatnya berfungsi untuk memiliki beberapa pengukuran kinerja dan lebih dari sekadar menambahkan beberapa if s. Yaitu melihat neovim/python-client#85, neovim/python-client#84, neovim/python-client#87.

Oh benar, jelek. Terima kasih untuk tautannya.

Saya tidak melihat ada aktivitas baru pada masalah ini atau masalah Neovim terkait. Apakah ada perbedaan yang tidak dapat didamaikan antara Neovim dan Powerline sehingga tidak ada rencana Powerline untuk mendukung Neovim?

Saya ingin tahu apakah Anda melihat harapan untuk menyelesaikan masalah di sini, atau apakah saya harus melepaskan harapan saya untuk menggunakan Powerline di Neovim.

Bolehkah saya menambahkan suara saya untuk fitur ini juga?

Apakah ada alternatif yang baik untuk powerline yang bekerja dengan neovim?

Bagus! Itu bekerja! Terima kasih @aarobc!

Sangat sulit untuk memilih antara neovim dan powerline ...
+∞

@code-hunger vim-airline menawarkan fungsionalitas yang mirip dengan powerline dan bekerja dengan baik dengan neovim.

@kierun terima kasih, sepertinya melakukan pekerjaan yang sama.

Satu-satunya downside dengan maskapai adalah Anda harus mengkonfigurasinya selain dari powerline dan jika Anda sudah menggunakan powerline di bash, weechat/irssi, tmux, dll... itu hanya sedikit mengganggu untuk melakukan itu.

@Goddard Lihatlah ini:

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

Proyek di atas menghasilkan skrip untuk bash, zsh, fish dan tmux dan skrip yang dihasilkan adalah kode asli yang tidak memanggil program eksternal seperti python.

Saya beralih ke nvim, dan ingin melihat dukungan Powerline untuk itu.

Bisakah Anda berhenti mengirim spam ke laporan bug ini dengan "+1" yang tidak berguna. Cukup gunakan fitur "reaksi" github pada posting pertama.

Demikian juga, Anda dapat kembali dan menghapus komentar "+1" Anda untuk membuat masalah ini lebih mudah diikuti.

Jadi sekarang 2019 (hampir 2020), dan saya masih mendapatkan kesalahan ini. Apakah ada solusi untuk membuat Powerline bekerja di nvim, atau apakah itu eksklusif vim?

@vegerot Saya sudah lama menyerah dan mulai menggunakan vim-airline yang bekerja di luar kotak dan dapat diinstal dengan dein atau pengelola plugin lainnya…

5 1/2 tahun, dan masih tidak bekerja sama sekali? Apakah ada pembaruan tentang status ini, atau kemungkinan ini akan berfungsi di beberapa titik di masa mendatang?

5 1/2 tahun, dan masih tidak bekerja sama sekali? Apakah ada pembaruan tentang status ini, atau kemungkinan ini akan berfungsi di beberapa titik di masa mendatang?

Sayangnya, tidak ada kemajuan dalam mendukung NeoVim dan melihat komentar asli @ZyX-I tentang masalah ini, saya tidak terlalu optimis tentang masa depan. Mungkin NeoVim mengubah sesuatu mengenai dukungan python untuk sementara (yang saya tidak tahu) jadi masuk akal untuk melihat ini lagi; jika tidak dan jika tidak, saya tidak terlalu optimis bahwa dukungan NeoVim akan ditambahkan (setidaknya oleh saya) dalam waktu dekat, maaf.

Tidak terkait: Saya baru saja menghapus banyak komentar "+1" untuk membuat masalah ini lebih mudah dibaca.

Apakah ada cara untuk menyembunyikan kesalahan ini setidaknya? Dalam kasus saya, saya ingin memiliki neovim dan vim dengan powerline.

Apakah ada cara untuk menyembunyikan kesalahan ini setidaknya? Dalam kasus saya, saya ingin memiliki neovim dan vim dengan powerline.

Anda dapat mencoba yang berikut ini: Di .vimrc , masukkan semua kode yang terkait dengan saluran listrik di blok if !has('nvim') ... endif .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat