Які практичні можливості використання клієнт-серверного режиму?


23

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

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

Тому моє запитання просте: Яке використання режиму клієнтського сервера Vim?

(Я ще раз зазначу, що моє запитання не в тому, як змусити його працювати або як він працює, а чому його використовувати.)



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екземпляра в терміналі GUI (хоча, мабуть, це могло б бути, якщо ви правильно використовуєте параметр).

У будь-якому випадку, ви можете відкрити будь-який файл з будь-якого місця в цьому екземплярі gvim за допомогою gvim --remote [file path](без --servernameвказаного). Я фанат цього, тому що я не пересуваюсь файловою системою безпосередньо безпосередньо з vim; натомість я використовую ортодоксальний файловий браузер (опівночі командир), а точніше - палі з них відкриваються в різних місцях, оскільки mcвони легкі і дозволяють різним шкурам кольорової схеми спростити розмежування між ними (тому я, як правило, відкриваю два або три окремо вкладки принаймні в одному терміналі GUI). Однак, я думаю, той самий принцип застосовуватиметься до будь-якого файлового браузера, який дозволяє отримати певну форму спеціальної гарячої клавіші, з якою ви можете пов’язати 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,;)
goldilocks

1
Так, це сам по собі робочий процес, а не обхід, моє формулювання не було ідеальним, але я зрозумів ідею вашої відповіді ;-)
statox

1
Працюючи з Visual Studio, більшу частину редагування я займаюсь у Vim. Я використовую цю функцію для відкриття поточного файлу (з курсором у тому самому місці) під час натискання клавіші. Див. Vim як зовнішній інструментальний розділ на сторінці Інтеграція gvim з Visual Studio Vim Tips для того, як це налаштувати.
Багатий

5

Вбудована розробка. Багато разів у вбудованій розробці у вас є розетка IP, але обмежений місцевий жорсткий диск, або відсутність енергонезалежної пам'яті, або будь-яка кількість інших речей. Ви можете запустити сервер на вбудованій дошці, а потім клієнтувати його на своєму розробниковому комп’ютері та налаштувати всі налаштування та теги локально.


1

Я написав магістерську роботу, використовуючи Vim, LaTeX та BibTeX. Для управління своїми посиланнями на BibTeX я використовував програму під назвою JabRef . У JabRef є акуратна маленька функція, де ви можете підключити її до екземпляра сервера Vim, і тоді ви можете "натиснути" посилання BibTeX з JabRef на документ LaTeX, який ви редагуєте у Vim.


1

Мій робочий процес схожий на те, що сказав золотарник у своїй відповіді. Я використовую :terminalфункцію vim8 у поєднанні з --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 і рідко використовую мишу.

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