
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 :e
para 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 -r
nos 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 DiffOrig
comando 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 :x
comando. 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 filename
para salvar o buffer recuperado em um arquivo com um nome de arquivo.
Ajudante DiffOrig
Eu adicionei oDiffOrigcomando para my .vimrc
para 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 -i
opção requer confirmação ( y
) para excluir o arquivo. Se você estiver mais confiante e quiser acelerar o processo, isso pode ser omitido.