Вы можете отправлять команды vim извне, если вы работаете ...
Vim серверы
Например, делать:
vim --servername vim
заставит vim запустить сервер с именем "vim". Назовите его дважды, и новый сервер будет называться «vim1», трижды назовите его, это будет «vim2» и т. Д. Возможно, вы захотите создать псевдоним этой команды.
Вы можете узнать, на каком сервере назван конкретный экземпляр, посмотрев на заголовок окна. Когда ты видишь:
[Без имени] + - VIM3
имя сервера нечувствительно к регистру "VIM3" ("vim3" будет ссылаться на тот же экземпляр). Обратите внимание, что если вы видите:
[Без имени] + - VIM
это не обязательно означает, что у него есть сервер с именем "VIM". Вы можете убедиться, что сервер существует, перечислив имена серверов с помощью:
vim --serverlist
Тем не менее, вопрос возникает только для «ВИМ», в частности. Если вы видите «GVIM» или какое-то другое имя с добавленным к нему номером, это означает, что это сервер.
Как пользоваться клиентом
Теперь, на ваш вопрос, вы можете сохранить все и выйти из данного экземпляра vim, выполнив, например:
vim --servername vim2 --remote-send $'\e:wqa\n'
Мы используем escape для возврата в нормальный режим, если вы находитесь в режиме вставки или командном режиме. Вы можете сделать что-то кроме :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
опцией.