Ви можете надсилати команди vim зовні, якщо ви працюєте ...
Vim-сервери
Наприклад, роблячи:
vim --servername vim
змусить vim запустити сервер з назвою "vim". Викличте його двічі, і новий сервер буде називатися "vim1", назвіть його тричі, і він буде "vim2" і т. Д. Можливо, ви захочете зробити псевдонім цієї команди.
Ви можете знати, на якому сервері названий конкретний екземпляр, переглянувши заголовок вікна. Коли ви бачите:
[Без імені] + - VIM3
ім'я сервера нечутливе до регістру "VIM3" ("vim3" буде посилатися на той самий екземпляр.) Зауважте, що якщо ви бачите:
[Без імені] + - VIM
це не обов'язково означає, що у нього є сервер під назвою "VIM". Ви можете переконатися, що сервер існує, перерахувавши імена серверів за допомогою:
vim --serverlist
Все-таки питання виникає лише для "VIM". Якщо ви бачите "GVIM" або якесь інше ім'я з доданим до нього номером, це означає, що це сервер.
Як користуватися клієнтом
Тепер, на ваше запитання, ви можете зберегти всі та вийти із заданого екземпляра vim, виконавши, наприклад:
vim --servername vim2 --remote-send $'\e:wqa\n'
Ми використовуємо параметр для повернення до звичайного режиму, якщо ви перебуваєте в режимі вставки або команди. Ви можете зробити щось інше :wqa
, але це здається мені найбільш підходящим, оскільки це залишить свопі файли буферів, які не вдалося зберегти (оскільки вони нові і не мають імені файлу тощо).
Якщо ви хочете зробити це для всіх екземплярів, як у вашому випадку тут, ви можете просто переглядати список серверів так:
for instance in $(vim --serverlist); do
vim --servername $instance --remote-send $'\e:wqa\n'
done
Якщо вам це не подобається --remote-send
, ви можете скористатися тим, --remote-expr
що має перевагу в тому, що клієнт виведе результат або помилку, яку він може спричинити, наприклад:
$ vim --servername vim2 --remote-expr 'execute("wqa")'
E141: No file name for buffer 1
Зауважте, що для використання функцій сервера Vim потрібно, щоб Vim був побудований за допомогою цієї +clientserver
опції.