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

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

возможно?

Ответы [ 3 ]

13 голосов
/ 04 мая 2010

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

:help remote.txt

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

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

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

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

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

3 голосов
/ 04 мая 2010

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

Я просто хотел добавить, что вы можете заставить 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...