В vim я могу делать vim --servername foo
и vim --servername foo --remote-silent bar.txt
открывать файлы в одном экземпляре vim из нескольких окон терминала (через tmux или что-то еще). Как то же самое достигается в NeoVim?
источник
В vim я могу делать vim --servername foo
и vim --servername foo --remote-silent bar.txt
открывать файлы в одном экземпляре vim из нескольких окон терминала (через tmux или что-то еще). Как то же самое достигается в NeoVim?
Насколько я знаю, vim имеет эту функцию, потому что графический интерфейс vim (gvim) использует графический X-сервер. Я знаю, что не GUI Vim также может использовать --servername
аргумент, но только когда X11 работает, а также путем доступа к нему . С другой стороны, у neovim нет графической поддержки; по этой причине я не думаю, что эта --servername
опция может работать (если только эта опция не была бы полностью переписана другим способом), поскольку мне было бы странно иметь консольную программу, обращающуюся к серверу X11 только для этой цели.
:help x11-clientserver
похоже, это подтверждает: «Связь между клиентом и сервером происходит через X-сервер. [..] Vim без графического интерфейса пользователя с доступом к дисплею X11 (| xterm-clipboard | enabled) также может выступать в качестве командного сервера, если имя сервера явно задано "...Neovim remote - это скрипт на python для управления процессами neovim. У него есть параметры vim в стиле --servername и --remote. Это то, что я сейчас использую для своей рабочей среды с несколькими терминалами.
источник
Как уже упоминалось, все функции клиент-сервера были удалены в Neovim. Это потому, что они используют общую память X11, а Neovim убрал поддержку X11.
Однако, если я использую
:help --servername
в Neovim, я в конечном итоге в документации дляserverstart()
функции:Это сделает сокет в
/tmp/
; смотрите:echo v:servername
на путь. Вероятно, более полезно использовать более детерминированный адрес (напримерserverstart('/tmp/nvim-remote')
, хотя вы, вероятно, захотите обернуть его в функцию, поскольку он не будет добавлять число, как это--serverstart
делает Vim, если он уже существует).Вы можете отправлять команды с помощью RPC API. Насколько я могу найти, нет никакого способа послать команды этому только с Neovim (meh). Вам нужно будет установить один из клиентов API . Например, со ссылочным клиентом Python API (который также используется в удаленном Neovim):
Вероятно, вы можете отправить те же байты с помощью
echo ... >> /tmp/nvim-remove
команды оболочки, но API RPC использует несколько нетривиальный нетекстовый протокол («MessagePack RPC»), и выяснить, какие именно байты для отправки, было слишком много усилий для этого сообщения; -)Смотрите
:help rpc
полную информацию о RPC API Neovim.NB,
:help remote.txt
как и многие другие элементы справки (такие какhelp server2client()
и многие другие), все еще существует в Neovim, но ничего из этого не работает. Похоже, тот, кто удалил эту функцию, сделал довольно небрежную работу.источник
:terminal
. Учитывая эту информацию, это было удивительно легко.