Вот моя ситуация. У меня есть набор открытых процессов энергии. Вместо того, чтобы проходить один за другим и сохранять/вполне (:x!) я хотел бы отправить все процессы, сигнал - скажем USR1 - и вместо того, чтобы иметь его создает восстановление .swp файл, я хотел бы, чтобы он обычно сохранил файл и выход.
Возможный?
Это не так просто, как просто послать каждому процессу vim сигнал, но вы можете довольно близко подойти к тому, что хотите, используя функции клиент / сервер vim:
:help remote.txt
(Вам понадобится версия vim, скомпилированная с параметр + clientserver.)
Вот пример из справки vim:
vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'
Он отправляет команды экземпляру vim, работающему как удаленный сервер «BLA», сообщая ему сохранить все файлы и выйти.
Поскольку вы запускаете несколько экземпляров vim, вы, вероятно, захотите использовать параметр --serverlist, чтобы получить список всех зарегистрированных экземпляров сервера, который затем можно перебирать, чтобы отправить команду сохранения и выхода на каждый.
Я никогда не пытался обрабатывать сигналы в vim. Не знаю, можно ли это сделать.Вот одна из возможных альтернатив:
Вариант: использовать только один процесс vim
Возможно, вместо того, чтобы открывать тонну процессов vim, вы можете открыть несколько вкладок в gvim (или vim). Таким образом, когда вы захотите выйти, вы сможете выполнить : wqa
(написать и выйти из всех).
В vim легче открывать вкладки, если в файле vimrc сделать следующее:
:map <C-Insert> :tabnew<C-M>
:map <C-Delete> :tabclose<C-M>
:map <C-PgUp> :tabprev<C-M>
:map <C-PgDown> :tabnext<C-M>
Приведенные выше привязки позволят Ctrl-insert и Ctrl-delete открывать и закрывать вкладки, а Ctrl-pgup / pgdown перемещает между вкладками очень похоже на firefox.
Если вы хотите, чтобы эти привязки работали и в режиме вставки, вы можете сделать что-то вроде этого в своем файле vimrc
:imap <C-Insert> <C-o>:tabnew<C-M>
:imap <C-Delete> <C-o>:tabclose<C-M>
:imap <C-PgUp> <C-o>:tabprev<C-M>
:imap <C-PgDown> <C-o>:tabnext<C-M>