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