w vimie mogę robić vim --servername foo
i vim --servername foo --remote-silent bar.txt
otwierać pliki w jednym wystąpieniu vima z kilku okien terminala (przez tmux lub cokolwiek innego). Jak to samo osiąga się w NeoVim?
w vimie mogę robić vim --servername foo
i vim --servername foo --remote-silent bar.txt
otwierać pliki w jednym wystąpieniu vima z kilku okien terminala (przez tmux lub cokolwiek innego). Jak to samo osiąga się w NeoVim?
Odpowiedzi:
O ile wiem, vim ma tę funkcję, ponieważ GUI vim (gvim) korzysta z graficznego serwera X. Wiem, że Vim inny niż GUI może również używać --servername
argumentu, ale tylko wtedy, gdy X11 jest uruchomiony, a także uzyskując do niego dostęp . Z drugiej strony neovim nie ma wsparcia graficznego; z tego powodu nie sądzę, że --servername
opcja może działać (chyba że opcja zostałaby w pełni przepisana w inny sposób), ponieważ dziwne byłoby, że program konsoli uzyskiwałby dostęp do serwera X11 tylko w tym celu.
Neovim remote to skrypt w języku Python do kontrolowania procesów neovim. Ma styl vim --servername i --remote opcje. Tego właśnie używam w moim środowisku pracy z wieloma terminalami.
Jak wspomniano, wszystkie funkcje serwera klienta zostały usunięte w Neovim. Wynika to z faktu, że używają pamięci współdzielonej X11, a Neovim usunął obsługę X11.
Jeśli jednak :help --servername
użyję w Neovimie, skończę w dokumentacji serverstart()
funkcji:
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')"
Spowoduje to utworzenie gniazda /tmp/
; sprawdź :echo v:servername
ścieżkę. Prawdopodobnie bardziej użyteczne jest użycie bardziej deterministycznego adresu (np. serverstart('/tmp/nvim-remote')
Chociaż prawdopodobnie będziesz chciał zawinąć to w funkcję, ponieważ nie doda ona liczby takiej jak Vim, --serverstart
jeśli już istnieje).
Możesz wysyłać polecenia za pomocą interfejsu RPC API. O ile mi wiadomo, nie ma sposobu, aby wysyłać do tego polecenia tylko za pomocą Neovim (meh). Musisz zainstalować jednego z klientów interfejsu API . Na przykład z referencyjnym klientem API Python (który jest również tym, którego używa zdalny Neovim):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
Prawdopodobnie możesz wysłać te same bajty za pomocą echo ... >> /tmp/nvim-remove
polecenia powłoki, ale interfejs API RPC używa nieco nietrywialnego protokołu nietekstowego („MessagePack RPC”) i ustalenie, które bajty do wysłania było zbyt dużym wysiłkiem dla tego postu; -)
Zobacz :help rpc
pełne informacje na temat interfejsu RPC API Neovim.
NB, :help remote.txt
jak również wiele innych przedmiotów pomocy (takich jak help server2client()
i wiele innych) wciąż istnieje w Neovim, ale żaden z nich nie działa. Wygląda na to, że ktokolwiek usunął tę funkcję, wykonał dość niechlujną robotę.
:terminal
. Biorąc pod uwagę te informacje, było to cudownie łatwe.
:help x11-clientserver
wydaje się to potwierdzać: „Komunikacja między klientem a serwerem odbywa się przez serwer X. […] Vim bez GUI z dostępem do wyświetlacza X11 (| włączono schowek | xterm) może również działać jako serwer poleceń, jeśli nazwa serwera jest wyraźnie podana „...