vim Yapabileceğim vim --servername foo
ve 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?
vim Yapabileceğim vim --servername foo
ve 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:
Bildiğim kadarıyla GUI vim (gvim) grafik X sunucusunu kullandığı için vim bu özelliğe sahiptir. GUI olmayan Vim'in --servername
argümanı da kullanabileceğini biliyorum, ancak sadece X11 çalışırken ve buna erişerek . Öte yandan neovim'in grafik desteği yoktur; bu nedenle, --servername
X11 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).
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.
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 --servername
Neovim'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:servername
yol 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ü --serverstart
zaten 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-remove
Kabuk 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 rpc
Neovim en RPC API üzerinde tüm detaylar için.
NB :help remote.txt
ve 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ı.
:terminal
. Bu bilgi göz önüne alındığında oldukça kolaydı.
:help x11-clientserver
bunu 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 "...