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

6

Quando o processo do Vim é terminado abruptamente (por exemplo, travamento do sistema), ele deixa um arquivo SWP. Abrir o arquivo original no Vim depois dá 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 eu quero deletar o arquivo .swp agora!

Como posso obter o Vim para excluir o arquivo SWP automaticamente nesse caso?

Parece não haver nenhuma configuração incorporada para isso, então estou procurando um evento autocommand apropriado.

Uma maneira que encontrei é :e # após a mensagem, o que faz com que as opções swap-exists apareçam novamente, então eu posso "Delete It". Mas eu não deveria ter que fazer essas etapas extras a cada vez.

    
por Evgeni Sergeev 21.04.2015 / 05:20

1 resposta

4

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

Eu costumava fazer o mesmo que você, execute :e para reabrir o mesmo arquivo para obter 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 remanescentes do Vim executando vim -r nos arquivos de permuta e deixando a recuperação continuar.

Quando os arquivos não são alterados

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

Quando os arquivos foram alterados

Se os arquivos foram alterados, eu corro o comando DiffOrig 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 comando :x . Caso contrário, descartarei as alterações recuperadas, fechando 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.

DiffOrig helper

Eu adicionei o comando DiffOrig ao meu .vimrc para que esteja sempre disponível.

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

Script da shell

Eu corro o seguinte script no meu shell para encontrar todos os arquivos de troca na árvore de diretórios atual. Cada arquivo de swap é então usado para abrir o Vim em “modo de recuperação” e é então deletado após o fechamento do Vim.

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

A opção rm -i requer confirmação ( y ) para excluir o arquivo. Se você está mais confiante e quer acelerar o processo, isso pode ser omitido.

    
por 21.04.2015 / 16:56

Tags