Możesz wysyłać polecenia do vima zewnętrznie, jeśli używasz ...
Serwery Vim
Na przykład robienie:
vim --servername vim
spowoduje, że vim uruchomi serwer o nazwie „vim”. Wywołaj go dwa razy, a nowy serwer zostanie nazwany „vim1”, nazwij go trzykrotnie, a będzie to „vim2” itp. Możesz utworzyć alias dla tego polecenia.
Możesz wiedzieć, jaki serwer nazywa się określona instancja, patrząc na tytuł okna. Kiedy widzisz:
[Bez nazwy] + - VIM3
w nazwie serwera rozróżniana jest wielkość liter „VIM3” („vim3” odnosi się do tej samej instancji). Pamiętaj, że jeśli zobaczysz:
[Bez nazwy] + - VIM
to niekoniecznie oznacza, że ma serwer o nazwie „VIM”. Możesz upewnić się, że serwer istnieje, wymieniając nazwy serwerów z:
vim --serverlist
Jednak pytanie dotyczy tylko „VIM”. Jeśli widzisz „GVIM” lub inną nazwę z dołączonym numerem, oznacza to, że jest to serwer.
Jak korzystać z klienta
Teraz, na swoje pytanie, możesz zapisać wszystko i zamknąć daną instancję vima, wykonując np .:
vim --servername vim2 --remote-send $'\e:wqa\n'
Używamy klawisza Escape, aby powrócić do trybu normalnego na wypadek, gdybyś był w trybie wstawiania lub poleceń. Możesz zrobić coś innego :wqa
, ale wydaje mi się to najbardziej odpowiednie, ponieważ pozostawi pliki wymiany buforów, których nie można zapisać (ponieważ są nowe i nie mają nazwy pliku itp.).
Jeśli chcesz to zrobić dla wszystkich instancji, takich jak w twoim przypadku, możesz po prostu przeglądać listę serwerów w następujący sposób:
for instance in $(vim --serverlist); do
vim --servername $instance --remote-send $'\e:wqa\n'
done
Jeśli z jakiegoś powodu ci się nie podoba --remote-send
, możesz zamiast tego użyć tego, --remote-expr
co ma tę zaletę, że spowoduje wyświetlenie przez klienta wyniku lub błędu, który mógł spowodować, na przykład:
$ vim --servername vim2 --remote-expr 'execute("wqa")'
E141: No file name for buffer 1
Zauważ, że korzystanie z funkcjonalności serwera Vima wymaga, aby Vim został zbudowany z tą +clientserver
opcją.