Neovim'de --servername ve --remote'u nasıl kullanabilirim?


15

vim Yapabileceğim vim --servername foove vim --servername foo --remote-silent bar.txt(tmux ya da her türlü yoluyla) çeşitli terminali pencerelerden vim biri örneğinde açık dosyalara. Aynı şey NeoVim'de nasıl elde edilir?

Yanıtlar:


8

Bildiğim kadarıyla GUI vim (gvim) grafik X sunucusunu kullandığı için vim bu özelliğe sahiptir. GUI olmayan Vim'in --servernameargümanı da kullanabileceğini biliyorum, ancak sadece X11 çalışırken ve buna erişerek . Öte yandan neovim'in grafik desteği yoktur; bu nedenle, --servernameX11 sunucusuna yalnızca bu amaçla erişen bir konsol programına sahip olmak garip olacağından, seçeneğin çalışabileceğini düşünmüyorum (seçenek tamamen başka bir şekilde yeniden yazılmamışsa).


İlk başta bu cevabın yanlış olduğunu düşündüm, çünkü X olmadan IPC sadece mümkün değil, aynı zamanda çok yaygındır (örneğin, soketler). Ancak :help x11-clientserverbunu onaylıyor gibi görünüyor: "İstemci ve sunucu arasındaki iletişim X sunucusu üzerinden geçer. bir sunucu adı açıkça verildi "...
Martin Tournoij

8

Neovim remote , neovim süreçlerini kontrol etmek için bir python betiğidir. Vim tarzı - sunucuadı ve --uzak seçenekleri vardır. Şimdi çok terminalli çalışma ortamım için kullandığım şey bu.


1
Bu eklentinin Windows platformu için çalışmadığını belirtmek gerekir.
jdhao

5

Belirtildiği gibi, Neovim'de tüm istemci sunucusu özellikleri kaldırıldı. Bunun nedeni, X11 paylaşılan belleğini kullanmaları ve Neovim kaldırılmış X11 desteğini kullanmalarıdır.

Ancak, :help --servernameNeovim'de kullanırsam , işlevin belgelerine son veririm serverstart():

serverstart([{address}])                                serverstart()
                Opens a named pipe or TCP socket at {address} for clients to
                connect to and returns {address}. If no address is given, it
                is equivalent to:
                        :call serverstart(tempname())
                $NVIM_LISTEN_ADDRESS is set to {address} if not already set.
                                                        --servername
                The Vim command-line option --servername can be imitated:
                        nvim --cmd "let g:server_addr = serverstart('foo')"

Bu bir soket yapacak /tmp/; :echo v:servernameyol için bakınız . Muhtemelen daha belirleyici bir adres kullanmak daha yararlıdır (örneğin serverstart('/tmp/nvim-remote'); muhtemelen bunu bir işlevde sarmak isteyeceksiniz, çünkü --serverstartzaten varsa Vim'in yaptığı gibi bir sayı eklemeyecektir ).

RPC API ile komutlar gönderebilirsiniz. Bulduğum kadarıyla, sadece Neovim (meh) ile buna komut göndermenin bir yolu yok. API istemcilerinden birini yüklemeniz gerekir . Örneğin referans Python API istemcisi ile (Neovim uzaktan kumandasının da kullandığı):

import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
    nvim.command(':e foo')
finally:
    nvim.quit()

echo ... >> /tmp/nvim-removeKabuk komutuyla aynı baytları gönderebilirsiniz , ancak RPC API biraz önemsiz olmayan bir metin olmayan protokol ("MessagePack RPC") kullanır ve hangi baytların tam olarak gönderileceğini bulmak için bu yazı için biraz fazla çaba harcandı; -)

Bkz :help rpcNeovim en RPC API üzerinde tüm detaylar için.


NB :help remote.txtve diğer birçok yardım öğesi (örneğin help server2client()ve daha fazlası) Neovim'de hala var, ancak bunların hiçbiri işe yaramıyor. Görünüşe göre bu özelliği kimin kaldırdığı oldukça özensiz bir iş çıkardı.


Bu mükemmel bir cevap. Çalışmak için neovim-remote'ın kendi, basit, windows uyumlu versiyonumu yazmamı sağladı :terminal. Bu bilgi göz önüne alındığında oldukça kolaydı.
David
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.