vim definir o padrão para salvar o buffer quando o sinal TERM recebido

1

Eu uso várias instâncias do vim. Atualmente eu uso uma função bash

kv(){ a=($(pgrep vim)); kill ${a[@]}; }  

para finalizar todas as instâncias em execução do vim. Isso tem a desvantagem de deixar arquivos .swp instáveis onde quer que um vim tenha sido morto com alterações não salvas. Existe uma maneira de definir o vim para salvar seus buffers se ele receber um sinal de kill?

    
por user985675 26.05.2013 / 20:51

2 respostas

2

Você não pode capturar especificamente o sinal TERM, mas pode "capturar" praticamente qualquer sinal que dê ao Vim a chance de sair. Veja o exemplo em:

:help v:dying

Você pode modificar o comando :echo no exemplo para algo como :wqall (consulte " :help :wqall ").

Eu não recomendo isso, no entanto. Você poderia facilmente ter um arquivo (over) escrito quando você não queria que isso acontecesse.

    
por 27.05.2013 / 06:27
0

Acho que não é possível salvar buffers em VimLeave . Eu tentei o código abaixo

autocmd VimLeave * :!touch ~/logs/vim-leave
autocmd VimLeave * :wall

Este código obteve sucesso em touch do arquivo, mas não salvou os buffers. Eu encontrei este tópico em uma lista de discussão do vim

Vim calls deathtrap() function, which closes all buffers, and then calls getout(), in which all autocommands are processed (BufWinLeave, BufUnLoad, VimLeavePre and finally VimLeave). But by that time, you can't safe any buffers anymore.

By the time, Vim handles the deadly signal, it won't call unsafe functions anymore (e.g. allocate memory) so I doubt it will be possible to achieve what you want.

    
por 30.12.2016 / 14:55

Tags