如何配置vim,以便在我向进程发送USR1信号时保存并退出(与创建.swp恢复文件相反)

时间:2010-05-03 17:45:36

标签: unix vim

这是我的情况。我打开了一堆vim进程。而不是一个接一个地保存/相当(:x!)我想向所有进程发送一个信号 - 比如USR1 - 而不是让它创建一个恢复.swp文件,我希望它保存文件并正常退出。

可能的?

3 个答案:

答案 0 :(得分:13)

这并不像发送每个vim进程信号那么简单,但是你可以使用vim的客户端/服务器功能非常接近你想要的东西:

:help remote.txt

(你需要一个用+ clientserver选项编译的vim版本。)

以下是vim帮助中的一个示例:

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

将命令发送到作为远程服务器“BLA”运行的vim实例,告诉它保存所有文件并退出。

由于您正在运行多个vim实例,因此您可能希望使用--serverlist选项获取所有已注册服务器实例的列表,然后您可以迭代以将save-and-exit命令发送到每一个。

答案 1 :(得分:3)

我从未试图在vim中处理信号。我不知道是否可以做到。这是一个可能的选择:

选项:只使用一个vim进程

也许不是打开大量的vim进程,你可以在gvim(或vim)中打开一堆标签。这样,当你想要退出时,你可以:wqa(写和退出所有)。

如果在vimrc文件中执行以下操作,则在vim中打开选项卡会更容易:

: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>

答案 2 :(得分:0)

我只想补充一点,您可以使用以下

异步获取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..

我实际上已经将该设置作为我的bashrc中的vim的别名。