Vim - excluir automaticamente o arquivo SWP após a recuperação não alterar o arquivo original

Vim - excluir automaticamente o arquivo SWP após a recuperação não alterar o arquivo original

Quando o processo do Vim é encerrado abruptamente (por exemplo, falha do sistema), ele deixa um arquivo SWP. Abrir o arquivo original no Vim posteriormente oferece a opção de recuperação. Na maioria das vezes o arquivo recuperado é igual ao arquivo salvo, pois tenho o hábito de salvar com frequência. Então Vim diz:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

Bem, é claro que quero excluir o arquivo .swp agora!

Como posso fazer com que o Vim sempre exclua o arquivo SWP automaticamente neste caso?

Parece não haver nenhuma configuração interna para fazer isso, então estou procurando um evento de comando automático apropriado.

Uma maneira que encontrei foi :e #após a mensagem, que faz com que as opções de troca existente apareçam novamente, então posso "Excluir". Mas eu realmente não deveria ter que executar essas etapas extras todas as vezes.

Responder1

Nota: você não disse qual sistema operacional está usando. O seguinte funciona com um shell Unix, mas se estiver executando o Windows, você pode baixar um Cygwin básico ou algum outro shell.

Eu costumava fazer o mesmo que você, correr :epara reabrir o mesmo arquivo para ter a opção de excluir o arquivo de recuperação. Após uma falha ou reinicialização inesperada do computador, eu limpo todos os arquivos de recuperação do Vim remanescentes executando vim -rnos arquivos de troca e deixando a recuperação prosseguir.

Quando os arquivos têmnãomudado

Se os arquivos não foram alterados, desejo excluir o arquivo de recuperação imediatamente. Seria ótimo se o Vim pudesse fazer isso automaticamente, mas infelizmente isso não acontece.

Quando os arquivos foram alterados

Se os arquivos foram alterados, executo o DiffOrigcomando para comparar as diferenças entre a versão original e a recuperada. Se estiver satisfeito com as alterações do arquivo de recuperação, saio salvando os arquivos com o :xcomando. Caso contrário, descarto as alterações recuperadas encerrando com :q!. Se o arquivo de recuperação não estiver associado a um arquivo salvo, por exemplo, .swp, geralmente uso o :w filenamepara salvar o buffer recuperado em um arquivo com um nome de arquivo.

Ajudante DiffOrig

Eu adicionei oDiffOrigcomando para my .vimrcpara que esteja sempre disponível.

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Script de shell

Eu executo o seguinte script em meu shell para encontrar todos os arquivos de troca na árvore de diretórios atual. Cada arquivo de troca é então usado para abrir o Vim em"modo de recuperação"e é excluído após o Vim ser fechado.

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

A rm -iopção requer confirmação ( y) para excluir o arquivo. Se você estiver mais confiante e quiser acelerar o processo, isso pode ser omitido.

informação relacionada