Я знаю, что Vim допускает режим клиент-сервер ( :h clientserver
): его можно превратить в сервер, который будет получать некоторые команды и выполнять их, а также как клиент, который будет отправлять команды на сервер.
Я понимаю, как это работает, но я не могу представить себе практическое использование этой функции: в каких случаях она полезна и какой рабочий процесс можно создать с помощью этой функции?
Итак, мой вопрос прост: зачем использовать режим клиент-сервер Vim?
(Я еще раз подчеркиваю, что мой вопрос не о том, как заставить это работать или как это работает, а о том, зачем его использовать.)
clientserver
statox
источник
источник
Ответы:
До недавнего появления функции канала / задания в Vim 7.4 функция клиент-сервер была единственным способом сделать достойную фоновую компиляцию - без какой-либо зависимости от Python. Мы начинаем компиляцию как фоновое задание, и когда оно заканчивается, оно уведомляет vim, благодаря каналу клиент-сервер, что оно завершено.
Он также косвенно используется «плагинами», такими как pyclewn, для интеграции отладчика в vim. На самом деле pyclewn использует функцию + netbeans (которая построена поверх + clientserver). Другие известные проекты используют этот интерфейс netbeans для интеграции vim с IDE - смотрите
:h netbeans-intro
.Он также используется некоторыми плагинами тестов, такими как vimrunner, для запуска тестов в Vim из командной строки. Я использую его для тестирования моих плагинов на travis.
Я также помню, как синхронизировал мои клики в интерфейсе xdvi с моим исходным кодом LaTeX благодаря + clientserver.
источник
Я использую это немного более упрощенно (и, возможно, обычно), чем Люк Эрмитт.
Если вы запускаете экземпляр 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
, вы можете отправить файлы в этот экземпляр вместо:Что-то, что может или не может пригодиться в зависимости от того, что вы делаете, и т. Д.
источник
less
, который является мгновенным и ключ для выхода) и, возможно, отправка их в приложения, отличные от vim, которые также имеют удаленный режим, подобный этому (сейчас многие вещи делают, в том числе другие «редакторы», которые я иногда использую, чтобы оставлять вкладки заголовков для просмотра, а также веб-браузеры) , Другими словами, я бы сказал, что навигация по fs с помощью vim выглядит какmc
--remote
Встроенная разработка. Много раз во встроенной разработке у вас есть IP-сокет, но ограниченное пространство на локальном жестком диске, или нет энергонезависимой памяти, или любое другое количество вещей. Вы можете запустить сервер на встроенной плате, а затем подключить его к клиенту на своем компьютере для разработки и настроить все свои настройки и теги локально.
источник
Я написал магистерскую диссертацию, используя Vim, LaTeX и BibTeX. Для управления ссылками на BibTeX я использовал программу под названием JabRef . В JabRef есть небольшая удобная функция, с помощью которой вы можете подключить его к экземпляру сервера Vim, а затем вы можете «передать» ссылку BibTeX из JabRef в документ LaTeX, который вы редактируете в Vim.
источник
Мой рабочий процесс похож на то, что сказал златовласка в своем ответе. Я использую функцию vim8
:terminal
в сочетании с--remote
опцией. Я поддерживаю 2 окна в VIM. Код в левом окне и терминал справа. Я использую правое окно (терминал) для запуска компиляций, навигации по файловой системе и открытия файлов в текущем экземпляре vim (из терминала). Этот поток позволяет мне работать с меньшим участием мыши.Я использую gvim и icewm (любой оконный менеджер должен это делать)
Запустите экземпляр gvim
Внутри gvim, открытый терминал в вертикальном разрезе
В окне терминала разделены
Вы можете создавать псевдонимы для этих длинных команд в вашем .zshrc / .bashrc и сокращать их по своему вкусу.
Благодаря этому рабочему процессу я редко покидаю свой экземпляр gvim и редко использую мышь.
источник