neovim에서 --servername과 --remote를 어떻게 사용할 수 있습니까?


15

정력에 나는 할 수 vim --servername foovim --servername foo --remote-silent bar.txt(TMUX 또는 무엇이든을 통해) 여러 터미널 창에서 정력의 한 인스턴스에 열려있는 파일에. NeoVim에서 어떻게 같은 일이 이루어 집니까?

답변:


8

내가 알고있는 한 GUI vim (gvim)은 그래픽 X 서버를 사용하기 때문에 vim 에이 기능이 있습니다. GUI가 아닌 Vim도 --servername인수를 사용할 수 있지만 X11이 실행 중일 때만 액세스 할 수 있다는 것을 알고 있습니다 . 반면에 neovim은 그래픽을 지원하지 않습니다. 그런 이유로, --servername옵션이 다른 방법으로 완전히 다시 작성되지 않는 한 옵션이 작동 한다고 생각하지 않습니다. 그 이유 는 콘솔 프로그램이 X11 서버에만 액세스하는 것이 이상하기 때문입니다.


처음에는 X가없는 IPC가 가능할뿐만 아니라 매우 일반적인 (예 : 소켓) 때문에이 답변이 잘못되었다고 생각했습니다. 그러나 :help x11-clientserver그것을 확인하는 것 같다 "클라이언트와 서버 간의 통신이 X 서버를 통해 간다 [..] 비 GUI 빔 X11 디스플레이에 접근 할 수있는 (| xterm을-클립 보드 | 사용), 또한 명령 서버 것처럼 행동 할 수 있습니다. 서버 이름이 명시 적으로 제공됩니다 "...
Martin Tournoij

7

Neovim remote 는 neovim 프로세스를 제어하기위한 python 스크립트입니다. vim 스타일 --servername 및 --remote 옵션이 있습니다. 이것이 지금 다중 터미널 작업 환경에 사용하는 것입니다.


이 플러그인은 Windows 플랫폼에서 작동하지 않습니다.
jdhao

4

언급 한 바와 같이 모든 클라이언트 서버 기능은 Neovim에서 제거되었습니다. X11 공유 메모리를 사용하고 Neovim이 X11 지원을 제거했기 때문입니다.

그러나 :help --servernameNeovim에서 사용 하면 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')"

소켓이 만들어집니다 /tmp/; :echo v:servername경로를 참조하십시오 . 보다 결정적인 주소를 사용하는 것이 더 유용 serverstart('/tmp/nvim-remote')할 것입니다 (예 : --serverstart이미 존재하는 경우 Vim과 같이 숫자를 추가하지 않으므로 함수로 래핑하고 싶을 수도 있습니다).

RPC API를 사용하여 명령을 보낼 수 있습니다. 내가 찾을 수있는 한 Neovim (meh)으로 명령을 보낼 수있는 방법이 없습니다. API 클라이언트 중 하나 를 설치해야합니다 . 예를 들어 참조 Python API 클라이언트 (Neovim remote가 사용하는 것) :

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

echo ... >> /tmp/nvim-remove쉘 명령을 사용하여 같은 바이트를 보낼 수 있지만 RPC API는 다소 중요한 비 텍스트 프로토콜 ( "MessagePack RPC")을 사용하여 정확히 어떤 바이트를 보낼지 알아내는 것이이 게시물에 너무 많은 노력을 기울였습니다. -)

:help rpcNeovim의 RPC API에 대한 자세한 내용 을 참조하십시오 .


NB :help remote.txt뿐만 아니라 다른 많은 도움말 항목 (예 : help server2client()기타)도 Neovim에 여전히 존재하지만 그 중 어느 것도 작동하지 않습니다. 이 기능을 제거한 사람은 꽤 거친 작업을 한 것 같습니다.


이것은 훌륭한 답변입니다. 그것은 에서 실행하기위한 내 자신의 간단한 Windows 호환 버전의 neovim-remote를 작성할 수있게했습니다 :terminal. 이 정보가 주어지면 놀라 울 정도로 쉬웠습니다.
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.