Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何配置vim,以便在向进程发送USR1信号时,它保存并退出(与创建.swp恢复文件相反)_Unix_Vim - Fatal编程技术网

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

Unix 如何配置vim,以便在向进程发送USR1信号时,它保存并退出(与创建.swp恢复文件相反),unix,vim,Unix,Vim,这是我的情况。我有一堆vim进程打开。我希望向所有进程发送一个信号(比如USR1),而不是让它创建一个recovery.swp文件,我希望它保存文件并正常退出 可能吗?我从未尝试过在vim中处理信号。我不知道是否能做到。以下是一个可能的替代方案: 选项:仅使用一个vim进程 也许您可以在gvim(或vim)中打开一堆选项卡,而不是打开大量vim进程。这样,当您想退出时,可以执行:wqa(全部写入并退出) 如果在vimrc文件中执行以下操作,则更容易在vim中打开选项卡: :map <C-I

这是我的情况。我有一堆vim进程打开。我希望向所有进程发送一个信号(比如USR1),而不是让它创建一个recovery.swp文件,我希望它保存文件并正常退出


可能吗?

我从未尝试过在vim中处理信号。我不知道是否能做到。以下是一个可能的替代方案:

选项:仅使用一个vim进程

也许您可以在gvim(或vim)中打开一堆选项卡,而不是打开大量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>
:映射:选项卡新建
:map:tabclose
:map:tabprev
:map:tabnext
上面的绑定将允许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>
:imap:tabnew
:imap:tabclose
:imap:tabprev
:imap:tabnext

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

:help remote.txt
(您需要一个使用+clientserver选项编译的vim版本。)

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

vim --servername BLA --remote-send '<C-\><C-N>:wqa<CR>'    
vim--servername BLA--remote send':wqa'
它向作为远程服务器“BLA”运行的vim实例发送命令,告诉它保存所有文件并退出


由于您正在运行多个vim实例,您可能需要使用--serverlist选项来获取所有已注册服务器实例的列表,然后您可以对其进行迭代以向每个实例发送save和exit命令

我只是想补充一点,您可以使用以下命令在后台异步运行
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> 

实际上,我在bashrc中将其设置为vim的别名。

这会起作用,但在我的情况下,我倾向于在同一台服务器上打开4-5个屏幕会话(用于不同的项目)。每个屏幕会话都可能有7个vim会话打开…我试过一次,它似乎需要一个运行的XServer-这是真的还是我错过了什么?
vim --servername DEFAULT --remote-silent FILE..