Aqui está um snippet para adicionar no .vimrc
. Apaga todos os ficheiros swap que estão associados ao buffer de ficheiros actual e reinicia a extensão swap.
function! DeleteFileSwaps()
write
let l:output = ''
redir => l:output
silent exec ':sw'
redir END
let l:current_swap_file = substitute(l:output, '\n', '', '')
let l:base = substitute(l:current_swap_file, '\v\.\w+$', '', '')
let l:swap_files = split(glob(l:base.'\.s*'))
" delete all except the current swap file
for l:swap_file in l:swap_files
if !empty(glob(l:swap_file)) && l:swap_file != l:current_swap_file
call delete(l:swap_file)
echo "swap file removed: ".l:swap_file
endif
endfor
" Reset swap file extension to `.swp`.
set swf! | set swf!
echo "Reset swap file extension for file: ".expand('%')
endfunction
command! DeleteFileSwaps :call DeleteFileSwaps()
Uma vez encontrada a situação, é possível executar :DeleteFileSwaps
Isto é óptimo se combinar com comandos :windo
ou :tabdo
.
:tabdo DeleteFileSwaps
Outros detalhes* : Um ficheiro pode ter mais de 1 ficheiro swap. A razão porque o ficheiro swap, com extensão de .swp
, ainda existe e vim
vai continuar a criar novos por causa dele. Para descobrir se .swp
existe:
- Com o ficheiro alvo aberto em vim, execute
:sw
para obter o ficheiro swap actual.
- Verifique a directoria em que o ficheiro swap actual está contido.
- Depois verifique se a directoria contém um ficheiro swap com o nome do ficheiro aberto e tem uma extensão de
.swp
.
O snippet acima segue o mesmo processo, mas remove todos os ficheiros swap.
Espero que isto ajude.