Подтвердить что ты не робот

Как настроить vim, чтобы при отправке процесса USR1-сигнал он сохраняет и завершает работу (в отличие от создания файла восстановления .swp)

Вот моя ситуация. У меня есть куча процессов vim. Вместо того, чтобы проходить один за другим и сохранять/полностью (: x!), Я бы хотел отправить все процессы на сигнал - скажем, USR1 - и вместо того, чтобы создать файл восстановления .swp, я бы хотел, чтобы он сохранить файл и нормально выйти.

Возможные?

4b9b3361

Ответ 1

Это не так просто, как просто передача каждого процесса vim сигналу, но вы можете приблизиться к тому, что хотите, используя возможности vim client/server:

:help remote.txt

(Вам понадобится версия vim, которая была скомпилирована с опцией + clientserver.)

Вот пример из справки vim:

vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'    

Это отправляет команды экземпляру vim, работающему как удаленный сервер "BLA", сообщая ему сохранить все файлы и выйти.

Поскольку вы используете несколько экземпляров vim, вы, вероятно, захотите использовать опцию --serverlist, чтобы получить список всех зарегистрированных экземпляров сервера, которые затем можно перебрать для отправки команды save-and-exit каждый.

Ответ 2

Я никогда не пытался обрабатывать сигналы в 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>

Ответ 3

Я просто хотел добавить, что вы можете получить make для запуска в фоновом режиме асинхронно, используя следующие

 nnoremap <leader>m : call setqflist([]) \| cclose \| silent execute ":! (make &>~/.vim/cpperr  \|\| vimx --servername DEFAULT --remote-send '\    <C-\\>\<C-N\>:cgetfile ~/.vim/cpperr\<CR\>')&" \| redraw!<CR> 

Для этого вы должны открыть свои файлы, используя

vim --servername DEFAULT --remote-silent FILE..

На самом деле у меня этот набор как псевдоним vim в моем bashrc.