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

9

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 é o mesmo que o arquivo salvo, porque eu tenho o hábito de salvar frequentemente. 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 uma configuração interna para fazer isso, então estou procurando um evento de comando automático apropriado.

Uma maneira que eu encontrei é :e #depois da mensagem, que faz com que as opções de troca existam para aparecer novamente, então eu posso "Excluir". Mas eu realmente não deveria ter que fazer essas etapas extras a cada vez.

Evgeni Sergeev
fonte
Obrigado! Achei que seu :e #truque não é o ideal, mas ainda é mais útil do que a resposta atual abaixo. :-)
RayLuo

Respostas:

5

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

Eu costumava fazer o mesmo que você, corro :epara reabrir o mesmo arquivo e 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 restantes do Vim executando vim -rnos arquivos de troca e permitindo que a recuperação continue.

Quando os arquivos não foram alterados

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, eu executo o DiffOrigcomando para comparar as diferenças entre as versões original e 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 fechando com :q!. Se o arquivo de recuperação não estiver associado a um arquivo salvo, por exemplo, .swpgeralmente eu uso o :w filenamepara salvar o buffer recuperado em um arquivo com um nome de arquivo.

Auxiliar DiffOrig

Eu adicionei o comando DiffOrig ao meu .vimrcpara que ele 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 no 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 no "modo de recuperação" e é excluído depois que o Vim é 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ê está mais confiante e deseja acelerar o processo, isso pode ser omitido.

Anthony Geoghegan
fonte