Як я можу використовувати --servername та --remote в неовимі?


15

in vim Я можу зробити vim --servername fooі vim --servername foo --remote-silent bar.txtвідкрити файли в одному екземплярі vim з декількох вікон терміналів (через tmux або інше). Як те ж саме досягається в NeoVim?

Відповіді:


8

Наскільки мені відомо, vim має цю особливість, оскільки GUI vim (gvim) використовує графічний X-сервер. Мені відомо, що не GUI Vim також може використовувати --servernameаргумент, але лише тоді, коли працює X11, а також отримуючи доступ до нього . З іншого боку, neovim не має графічної підтримки; з цієї причини, я не думаю, що --servernameопція може працювати (якщо тільки опція не була б повністю переписана іншим способом), оскільки мені було б дивно мати консольну програму для доступу до сервера X11 лише для цієї мети.


Спочатку я вважав, що ця відповідь була невірною, оскільки IPC без X не просто можливий, але й дуже поширений (наприклад, розетки). Але, :help x11-clientserverсхоже, це підтверджує: "Зв'язок між клієнтом і сервером проходить через сервер X. [..] Не GUI Vim з доступом до дисплея X11 (| xterm-clipboard | включений), також може виступати як сервер команд, якщо ім'я сервера прямо вказано "...
Martin Tournoij

8

Neovim remote - це сценарій python для управління процесами neovim. Він має стиль vim - параметрservername та --remote. Це те, що я зараз використовую для свого багатокористувацького робочого середовища.


1
Варто зазначити, що цей плагін не працює для платформи Windows.
jdhao

5

Як уже згадувалося, всі функції сервера клієнтів були видалені в 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'); хоча ви, ймовірно, захочете зафіксувати це у функції, оскільки вона не додасть число, як Vim, --serverstartякщо таке вже існує).

Ви можете надсилати команди за допомогою API RPC. Наскільки я можу знайти, немає ніякого способу надсилати команди для цього просто Neovim (meh). Вам потрібно буде встановити одного з клієнтів API . Наприклад, з посилальним клієнтом API Python API (який також використовує віддалений Neovim):

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

Можливо, ви можете надіслати ті самі байти за допомогою echo ... >> /tmp/nvim-removeкоманди оболонки, але API RPC використовує дещо нетривіальний нетекстовий протокол ("MessagePack RPC") і з'ясовувати, які саме байти відправити було трохи занадто багато зусиль для цієї публікації; -)

Див :help rpc. Повні відомості про RPC API Neovim.


NB, :help remote.txtяк і багато інших довідкових статей (таких як help server2client()та багато інших), все ще існує в Neovim, але жодне з цього не працює. Схоже, хто хто видалив цю функцію, зробив досить неохайну роботу.


Це відмінна відповідь. Це дозволило мені написати власну, просту, сумісну з Windowsми версію neovim-remote для запуску в :terminal. Враховуючи цю інформацію, це було надзвичайно просто.
Девід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.