Você pode enviar comandos para o vim externamente se estiver executando ...
Servidores Vim
Por exemplo, fazendo:
vim --servername vim
fará com que o vim inicie um servidor com o nome "vim". Chame duas vezes e o novo servidor será chamado "vim1", três vezes e "vim2" etc. Você pode querer criar um apelido para esse comando.
Você pode saber em qual servidor uma instância específica é nomeada olhando o título da janela. Quando você vê:
[Sem nome] + - VIM3
o nome do servidor não diferencia maiúsculas de minúsculas "VIM3" ("vim3" se refere à mesma instância.). Observe que se você vir:
[Sem nome] + - VIM
isso não significa necessariamente que ele tenha um servidor chamado "VIM". Você pode garantir que o servidor exista listando os nomes dos servidores com:
vim --serverlist
Ainda assim, a questão surge apenas para o "VIM", especificamente. Se você vir "GVIM" ou algum outro nome com um número anexado, significa que é um servidor.
Como usar o cliente
Agora, na sua pergunta, você pode salvar tudo e sair de uma determinada instância do vim fazendo, por exemplo:
vim --servername vim2 --remote-send $'\e:wqa\n'
Usamos o escape para retornar ao modo normal, caso você esteja no modo de inserção ou comando. Você pode fazer algo diferente :wqa
, mas isso parece o mais apropriado para mim, porque deixará os arquivos de troca de buffers que não puderam ser salvos (porque são novos e não têm um nome de arquivo etc.).
Se você quiser fazer isso para todas as instâncias como no seu caso aqui, basta percorrer a lista de servidores da seguinte maneira:
for instance in $(vim --serverlist); do
vim --servername $instance --remote-send $'\e:wqa\n'
done
Se, por algum motivo, você não gostar --remote-send
, poderá usar a --remote-expr
que tem a vantagem de fazer com que o cliente produza o resultado ou o erro que ele possa ter causado, da seguinte forma:
$ vim --servername vim2 --remote-expr 'execute("wqa")'
E141: No file name for buffer 1
Observe que o uso da funcionalidade do servidor do Vim requer que o Vim tenha sido construído com a +clientserver
opção