Qual é a maneira mais fácil de excluir os arquivos swap do Vim que eu já recuperei?

66

Às vezes, o Vim trava e me deixa um swapfile. Fantástico. Então eu abro o arquivo que estava editando e o Vim me pergunta se eu quero me recuperar. Eu faço, obrigado. Quando estiver pronto, o Vim me diz,

You may want to delete the .swp file now.

Por que, sim, eu faço. Como faço isso? Eu imaginei que iria apenas começar a usar o velho swapfile como swapfile novamente e limpá-lo quando eu sair, mas isso não é verdade. Ele faz um novo, limpa esse, e quando eu abro o arquivo novamente, ele me pede para recuperar do primeiro.

Certamente estou sentindo falta de algo.

    
por Peeja 27.09.2012 / 16:47

12 respostas

69

Uma maneira um pouco mais simples:

Do emulador de terminal:

vim filename

Em seguida, escolha recuperar , e se você quiser deletar a troca você escreve (salvar) e então faça isso dentro do vim:

:e          // no argument needed. It assumes the current buffer.

... e escolha excluir dessa vez.

Acabei de descobrir isso e acho que vou fazer isso a partir de agora. Então eu não vou acidentalmente substituir um arquivo de trabalho, se a recuperação acabou corrompida (embora eu nunca tentei isso antes).

Também há dicas relevantes sobre essa questão no Stack Overflow (em que encontrei esta dica).

    
por 13.12.2013 / 13:39
29

Para limpar TODOS os arquivos de swap do vim em um diretório:

Se tiver certeza de que não precisa de nenhum arquivo de troca vim em uma árvore de diretórios e deseja se livrar deles, use o seguinte comando no diretório enquanto o vim não estiver não em execução (nem mesmo em outra janela ou em uma sessão de login diferente):

find . -type f -name "*.sw[klmnop]" -delete

Algumas inspirações e pensamentos vieram de Remoção de arquivos .swp indesejados nos Grupos do Google. Isso excluirá todos os arquivos cujos nomes terminam com .swk , .swl , .swm , .swn , .swo ou .swp na árvore de diretórios atual.

Isso pode não ser o que você deseja, por vários motivos:

  • Como afirmado, ele pesquisa o diretório atual tree ; isto é, o diretório atual e todos os subdiretórios, recursivamente. Isso vai além do que a pergunta pede, e pode ser considerado um exagero.
  • Como afirmado, ele excluirá todos os arquivos cujos nomes terminam com .swk , .swl , .swm , .swn , .swo ou .swp , e não apenas .swp . Gary Johnson diz ,

    Also, not all swap files end in .swp.  If Vim needs to create a swap file and one ending in .swp already exists, Vim will use the extension .swo for the new one and .swn after that.  I think it just continues backwards through the alphabet.  So using something like
      \*.sw[nop] 
    

    or even

      \*.sw? 
    

    would be more thorough.

    O autor original de este post diz:

    'klmnop' may be overkill, but that usually ensures I get all of them.

  • Por outro lado, pode ser um exagero. rublo sugere

    find . -type f \( -name ".*.s[a-v][a-z]" -o -name ".*.sw[a-p]" \) -delete
    

    que corresponde a todas as extensões de três letras (minúsculas) variando de .saa a .swp . Ele acrescenta: "Tenha cuidado, embora esta seja uma solução mais completa, ele removerá arquivos de imagem .svg e arquivos .swf do Adobe Flash. Você pode querer modificar o regex se trabalhar com esses arquivos. ” Ele também corresponde a .sav , .snd (dados de som), .sql , .src , .srt (formato de legenda de vídeo SubRip) e muitas outras extensões comuns.

  • Pode ser um exagero. Como indicado, ele excluirá todos os arquivos cujos nomes terminam com .swk , .swl , .swm , .swn , .swo ou .swp . Mas, aparentemente, os arquivos de troca vim são comumente arquivos "ponto". Se você editar hello.cpp , o arquivo de troca pode ser .hello.cpp.swp . Como mostrado (mas não explicado) na resposta do rouble , é mais seguro excluir apenas arquivos cujos nomes começam com um ponto; por exemplo, com

    find . -type f -name ".*.sw[klmnop]" -delete
    
por 30.08.2014 / 20:39
13

Digite ls -a , que lista TODOS os arquivos no diretório

digite rm .whatever.your.swp is e pressione enter

É simples assim.

Qualquer arquivo que aparece com . na frente é um arquivo oculto e normalmente não é visto.

Lembre-se de que as mudanças são imediatas e permanentes, por isso tenha cuidado.

    
por 21.12.2013 / 18:14
6

Entre. alguns plugins fazem isso automaticamente para você: autoswap.vim

da descrição:

  1. Is file already open in another Vim session in some other window?
  2. If so, swap to the window where we are editing that file.
  3. Otherwise, if swapfile is older than file itself, just get rid of it.
  4. Otherwise, open file read-only so we can have a look at it and may save it.
    
por 04.08.2015 / 22:27
5

Não, AFAIK, você não está perdendo nada. Vim continua a manter o swapfile como backup até que você o exclua explicitamente.

Basta salvar, sair e reabrir o mesmo arquivo novamente. Você será solicitado (novamente) com

[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete it

Agora, basta pressionar d :)

    
por 27.09.2012 / 17:00
1

O Vim, como a maioria dos comandos Unix, é simples e explícito, ao invés de assumir e implícito.

Você recupera com (r). Você não gosta da recuperação ou a recuperação está corrompida, você pode descartá-la. Se você gosta, você pode salvar o arquivo. O arquivo de recuperação não é excluído para você porque isso não é explícito e não estará correto em 100% das situações.

Então você (r) ecover, (w) rite e (q) uit, então edite novamente e escolha (d) elete ou "rm .myfile.js.swp" e edite novamente. Isso é rápido de se fazer e é sempre, do ponto de vista do Vim, 100% de comportamento correto.

    
por 27.09.2013 / 11:40
1

Aqui está um regex mais completo para limpar todos os arquivos de troca vim baseados no arquivo gitignore do Github para Vim

$ find ./ -type f \( -name "\.*\.s[a-v][a-z]" -o -name "\.*\.sw[a-p]" \) -delete

Tenha cuidado, porém, enquanto esta é uma solução mais completa, vai tirar todos os arquivos de imagem .svg e arquivos .swf do Adobe Flash. Você pode querer modificar o regex se trabalhar com esses arquivos.

    
por 07.06.2017 / 17:33
1

Aqui está um snippet para adicionar em .vimrc . Exclui todos os arquivos de troca que são associado ao buffer de arquivo atual e redefinir a extensão de troca.

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()

Depois do encontro com a situação, pode-se executar :DeleteFileSwaps Isso é ótimo se combinar com os comandos :windo ou :tabdo .

:tabdo DeleteFileSwaps 

Mais detalhes : Um arquivo pode ter mais de um arquivo de troca. A razão porque o arquivo de troca, com extensão de .swp , ainda existe e vim continuará criando novos por causa disso. Para descobrir se .swp existe:

  • Com o arquivo de destino aberto no vim, execute :sw para obter o arquivo de troca atual.
  • Verifique o diretório no qual o arquivo de troca atual está contido.
  • Em seguida, verifique se o diretório contém um arquivo de troca com o nome do arquivo aberto e tem uma extensão de .swp .

O snippet acima segue o mesmo processo, mas remove todos os arquivos de troca.

Espero que isso ajude.

    
por 18.06.2017 / 23:48
0

Do manual :h swap :

You can see the name of the current swap file being used with the command: :sw[apname]

    
por 26.01.2015 / 21:03
0

se você for solicitado, pressione D para apagar o arquivo de troca do arquivo atual.

se você não for, então você tem que fazê-lo manualmente.

uma maneira alternativa de fazer isso é:

para localizar / pesquisar arquivo:

find | grep ".searchRefineVertTabs.jsp.swp"

e, em seguida, exclua este arquivo:

rm ./.searchRefineVertTabs.jsp.swp
    
por 22.09.2015 / 14:05
0

Esses arquivos eram irritantes para mim também, mas eu configuro a opção .vimrc - set noswapfile para evitar que o vim crie e, em vez disso, mantenha os arquivos na memória.

    
por 23.06.2016 / 14:03
-1

Você pode usar

rm -f .<filename>.<ext>.swp

Exemplo:

rm -f .rc.local.swp
    
por 18.03.2015 / 09:48

Tags