Каковы практические применения режима клиент-сервер?

23

Я знаю, что Vim допускает режим клиент-сервер ( :h clientserver): его можно превратить в сервер, который будет получать некоторые команды и выполнять их, а также как клиент, который будет отправлять команды на сервер.

Я понимаю, как это работает, но я не могу представить себе практическое использование этой функции: в каких случаях она полезна и какой рабочий процесс можно создать с помощью этой функции?

Итак, мой вопрос прост: зачем использовать режим клиент-сервер Vim?

(Я еще раз подчеркиваю, что мой вопрос не о том, как заставить это работать или как это работает, а о том, зачем его использовать.)

statox
источник
2
Я склонен закрыть это как слишком широкое.
Муру
3
Я бы понял, что закрытие слишком широкое. SE, возможно, не самая адаптированная платформа для этого вопроса, но я чувствую, что что-то упускаю из-за этой функции, поэтому я подумал, что другие могут получить пользу от этих ответов.
statox

Ответы:

21
  • До недавнего появления функции канала / задания в Vim 7.4 функция клиент-сервер была единственным способом сделать достойную фоновую компиляцию - без какой-либо зависимости от Python. Мы начинаем компиляцию как фоновое задание, и когда оно заканчивается, оно уведомляет vim, благодаря каналу клиент-сервер, что оно завершено.

  • Он также косвенно используется «плагинами», такими как pyclewn, для интеграции отладчика в vim. На самом деле pyclewn использует функцию + netbeans (которая построена поверх + clientserver). Другие известные проекты используют этот интерфейс netbeans для интеграции vim с IDE - смотрите :h netbeans-intro.

  • Он также используется некоторыми плагинами тестов, такими как vimrunner, для запуска тестов в Vim из командной строки. Я использую его для тестирования моих плагинов на travis.

  • Я также помню, как синхронизировал мои клики в интерфейсе xdvi с моим исходным кодом LaTeX благодаря + clientserver.

Люк Эрмитт
источник
1
Так что это полезно не для непосредственного использования пользователем, а сторонним приложением. Спасибо за ваш ответ, который довольно интересен.
statox
4
@statox Да. Вот основные варианты использования, которые я вижу: простая интеграция с внешними инструментами. Все просто, потому что мы можем передавать команды и функции vim через командную строку.
Люк Эрмитт
1
Eclim еще один пример этого.
Златовласка
13

Я использую это немного более упрощенно (и, возможно, обычно), чем Люк Эрмитт.

Если вы запускаете экземпляр gvim с этим скомпилированным файлом (и он уже давно работает, например, на основных дистрибутивах Linux, таких как Fedora и Debian), он запускается в режиме сервера. Я подчеркнул «gvim», потому что то, что я собираюсь описать, похоже, не относится к единственному vimэкземпляру в терминале с графическим интерфейсом (хотя я полагаю, что это может быть, если вы правильно используете параметр).

В любом случае, вы можете открыть любой файл в любом месте этого экземпляра gvim с помощью gvim --remote [file path](без --servernameуказания). Я фанат этого, потому что я не особо ориентируюсь в файловой системе непосредственно с vim; вместо этого я использую ортодоксальный файловый браузер (Midnight Commander) - или, скорее, их груды открываются в разных местах, поскольку они mcлегки и позволяют использовать различные скины цветовой схемы, чтобы упростить различие между ними (поэтому я склонен иметь два или три открытых в отдельности вкладки хотя бы в одном графическом терминале). Тем не менее, я думаю, что тот же принцип будет применяться к любому файловому браузеру, который позволяет вам настраивать горячие клавиши, с которыми вы можете ассоциироваться gvim --remote %f. У mcменя это есть в пользовательском меню, поэтому F2 + e и выделенный / выбранный файл отправляется в экземпляр gvim.

Это становится немного лучше: если вы откроете второй экземпляр gvim, скажем, на мониторе № 2 того же рабочего стола или на отдельном рабочем столе, и, возможно, на другом цветовом рисунке, и на этот раз дадите ему явное --servername foo, вы можете отправить файлы в этот экземпляр вместо:

 gvim --servername foo --remote [file path]

Что-то, что может или не может пригодиться в зависимости от того, что вы делаете, и т. Д.

лютик золотистый
источник
Это вариант использования, который я не предполагал, но, если вы не любите перемещаться по файлам из Vim, это может быть хорошим решением.
statox
Ну, я бы не стал считать это «обходным путем», поскольку другая вещь, которую я делаю, как минимум, с файловым браузером в то же время, это просмотр файлов в тех же местах (для текста через less, который является мгновенным и ключ для выхода) и, возможно, отправка их в приложения, отличные от vim, которые также имеют удаленный режим, подобный этому (сейчас многие вещи делают, в том числе другие «редакторы», которые я иногда использую, чтобы оставлять вкладки заголовков для просмотра, а также веб-браузеры) , Другими словами, я бы сказал, что навигация по fs с помощью vim выглядит как mc--remote
обходной путь
1
Да, это рабочий процесс сам по себе, а не обходной путь, моя формулировка не была идеальной, но я понял идею вашего ответа ;-)
statox
1
При работе с Visual Studio я делаю большую часть своего редактирования в Vim. Я использую эту функцию, чтобы открыть текущий файл (с курсором в том же месте) при нажатии клавиши. Инструкции по настройке см. В разделе «Внешний инструмент Vim» на странице «Советы по интеграции Vim с Visual Studio» .
Богатый
5

Встроенная разработка. Много раз во встроенной разработке у вас есть IP-сокет, но ограниченное пространство на локальном жестком диске, или нет энергонезависимой памяти, или любое другое количество вещей. Вы можете запустить сервер на встроенной плате, а затем подключить его к клиенту на своем компьютере для разработки и настроить все свои настройки и теги локально.

Сэм
источник
1

Я написал магистерскую диссертацию, используя Vim, LaTeX и BibTeX. Для управления ссылками на BibTeX я использовал программу под названием JabRef . В JabRef есть небольшая удобная функция, с помощью которой вы можете подключить его к экземпляру сервера Vim, а затем вы можете «передать» ссылку BibTeX из JabRef в документ LaTeX, который вы редактируете в Vim.

фантом-99W
источник
1

Мой рабочий процесс похож на то, что сказал златовласка в своем ответе. Я использую функцию vim8 :terminalв сочетании с --remoteопцией. Я поддерживаю 2 окна в VIM. Код в левом окне и терминал справа. Я использую правое окно (терминал) для запуска компиляций, навигации по файловой системе и открытия файлов в текущем экземпляре vim (из терминала). Этот поток позволяет мне работать с меньшим участием мыши.

Я использую gvim и icewm (любой оконный менеджер должен это делать)

Запустите экземпляр gvim

gvim somefile

Внутри gvim, открытый терминал в вертикальном разрезе

:botright vertical terminal
(or) short form
:bo vert term 
"botright" splits the window to right

В окне терминала разделены

gvim --remote-send '<C-w><C-w>' --remote anotherfile

"--remote-send" will send Ctrl-W Ctrl-W to remote gvim instance(in our case, current instance) 
to put the cursor in the left window. Otherwise, the terminal split would be replaced by
'anotherfile' buffer.
"--remote" will open 'anotherfile' in left window.

Вы можете создавать псевдонимы для этих длинных команд в вашем .zshrc / .bashrc и сокращать их по своему вкусу.

Благодаря этому рабочему процессу я редко покидаю свой экземпляр gvim и редко использую мышь.

SantoshSrinivas
источник