in vim Я можу зробити vim --servername foo
і vim --servername foo --remote-silent bar.txt
відкрити файли в одному екземплярі vim з декількох вікон терміналів (через tmux або інше). Як те ж саме досягається в NeoVim?
in vim Я можу зробити vim --servername foo
і vim --servername foo --remote-silent bar.txt
відкрити файли в одному екземплярі vim з декількох вікон терміналів (через tmux або інше). Як те ж саме досягається в NeoVim?
Відповіді:
Наскільки мені відомо, vim має цю особливість, оскільки GUI vim (gvim) використовує графічний X-сервер. Мені відомо, що не GUI Vim також може використовувати --servername
аргумент, але лише тоді, коли працює X11, а також отримуючи доступ до нього . З іншого боку, neovim не має графічної підтримки; з цієї причини, я не думаю, що --servername
опція може працювати (якщо тільки опція не була б повністю переписана іншим способом), оскільки мені було б дивно мати консольну програму для доступу до сервера X11 лише для цієї мети.
Neovim remote - це сценарій python для управління процесами neovim. Він має стиль vim - параметрservername та --remote. Це те, що я зараз використовую для свого багатокористувацького робочого середовища.
Як уже згадувалося, всі функції сервера клієнтів були видалені в Neovim. Це тому, що вони використовують загальну пам'ять X11 і Neovim видалив підтримку X11.
Однак якщо я використовую :help --servername
Neovim, я закінчую документацію щодо 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, але жодне з цього не працює. Схоже, хто хто видалив цю функцію, зробив досить неохайну роботу.
:terminal
. Враховуючи цю інформацію, це було надзвичайно просто.
:help x11-clientserver
схоже, це підтверджує: "Зв'язок між клієнтом і сервером проходить через сервер X. [..] Не GUI Vim з доступом до дисплея X11 (| xterm-clipboard | включений), також може виступати як сервер команд, якщо ім'я сервера прямо вказано "...