这是我的情况。我有很多个vim进程正在打开。不想一个个地保存并退出(:x!),我想发送一个信号(比如USR1)给所有进程,让它们不创建恢复.swp文件,而是将文件保存并正常退出。
有可能吗?
并不像简单地向每个vim进程发送信号那么容易,但是您可以利用vim的客户端/服务器特性来实现您想要的结果:
:help remote.txt
(您需要使用已编译了+clientserver选项的vim版本。)
以下是来自vim帮助文档的示例:
vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'
这会向运行为远程服务器 "BLA" 的vim实例发送命令,告诉它保存所有文件并退出。
由于您运行多个vim实例,您可能希望使用--serverlist选项获取所有注册的服务器实例列表,然后可以迭代每个实例发送保存和退出命令。
:map <C-Insert> :tabnew<C-M>
:map <C-Delete> :tabclose<C-M>
:map <C-PgUp> :tabprev<C-M>
:map <C-PgDown> :tabnext<C-M>
: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>
我只想补充一下,你可以通过使用以下方法使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的别名。