2012-09-27 14:47:47 +0000 2012-09-27 14:47:47 +0000
89
89

Qual é a maneira mais fácil de apagar ficheiros swap Vim de onde já recuperei?

Por vezes o Vim cai e deixa-me um ficheiro swap. Isso é fantástico. Depois abro o ficheiro que estava a editar e o Vim pergunta-me se eu quero recuperar. Eu quero, obrigado. Quando está feito, o Vim diz-me,

You may want to delete the .swp file now.

Porquê, sim, eu quero. Como é que o faço? Pensei que iria começar a usar o antigo ficheiro swap como um ficheiro swap novamente e limpá-lo quando eu desistisse, mas isso não é verdade. Faz um novo, limpa-o, e quando volto a abrir o ficheiro, isso leva-me novamente a recuperar do primeiro.

Com certeza que me está a faltar alguma coisa.

Respostas (12)

86
86
86
2013-12-13 12:39:26 +0000

Uma forma ligeiramente mais simples:

Do emulador de terminal:

vim filename

Depois escolha recover, e se quiser apagar o swap, escreva_ (guardar) e depois faça isto a partir do vim:

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

…e escolha delete desta vez.

Acabei de saber isto, e acho que vou fazer isso a partir de agora. Então também não vou escrever acidentalmente um ficheiro de trabalho, se a recuperação se revelar corrupta (embora nunca tenha tentado isso antes).

Há também dicas relevantes sobre esta questão sobre Stack Overflow (onde encontrei esta dica).

40
40
40
2014-08-30 18:39:56 +0000

Para Limpar TODOS os ficheiros vim Swap num directório:

Se tem a certeza que não precisa de nenhum ficheiro vim swap numa árvore de directórios e quer ver-se livre deles, você pode usar o seguinte comando no directório enquanto o vim está não a correr (nem mesmo noutra janela ou mesmo numa sessão de login diferente):

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

Algumas inspirações e pensamentos vieram de Remover lixo . swp files no Google Groups.  Isto irá apagar todos os ficheiros cujos nomes terminam com .swk, .swl, .swm, .swn, .swo, ou .swp na árvore de directórios actual.

Isto pode não ser o que pretende, por várias razões:

  • Como referido, procura no directório actual tree ; ou seja o directório actual e todos os subdirectórios, recursively.  Isso vai além do que a pergunta pede, e pode ser considerado como exagerado.
  • Como dito, irá apagar todos os ficheiros cujos nomes terminam com .swk, .swl, .swm, .swn, .swo, ou .swp, e não apenas .swp. &nbsp Gary Johnson diz ,

  • Por outro lado, poderá ser underkill.&nbsp rouble sugere

  • Poderá ser overkill.   Como referido, irá apagar todos os ficheiros cujos nomes terminam em .swk, .swl, .swm, .swn, .swo, .swp ou hello.cpp.  Mas, aparentemente, os ficheiros vim swap são normalmente ficheiros “dot”.  Se editar .hello.cpp.swp, o ficheiro swap pode ser &007.  Como mostrado (mas não explicado) na resposta de rouble , é mais seguro apagar apenas ficheiros cujos nomes começam com um ponto; por exemplo com

14
14
14
2013-12-21 17:14:36 +0000

Tipo ls -a que lista TODOS os ficheiros do directório

tipo rm .whatever.your.swp é e prima enter

é assim tão simples.

Qualquer ficheiro que mostre com . na frente é um ficheiro oculto e normalmente não é visto.

Lembre-se que as alterações são imediatas e permanentes, por isso tenha cuidado.

7
7
7
2015-08-04 20:27:23 +0000

Btw. alguns plugins fazem isso automaticamente para si: autoswap.vim

da descrição:

  1. O ficheiro já está aberto noutra sessão Vim noutra janela?
  2. Se sim, mude para a janela onde estamos a editar esse ficheiro.
  3. Outra, se o ficheiro swap for mais antigo que o próprio ficheiro, basta livrar-se dele.
  4. Caso contrário, abra o ficheiro apenas para leitura, para que possamos dar uma vista de olhos e guardá-lo.
6
6
6
2012-09-27 15:00:27 +0000

Não, AFAIK não lhe falta nada. Vim continua a manter o ficheiro swap como backup até o apagar explicitamente.

Basta guardar e sair e reabrir novamente o mesmo ficheiro. Ser-lhe-á pedido (novamente) com

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

Agora basta premir d :)

2
2
2
2013-09-27 09:40:43 +0000

Vim, como a maioria dos comandos Unix, é simples e explícito, em vez de assumir e implícito.

Você recupera com ®. Se não gostar da recuperação ou se a recuperação for corrupta, pode desfazer-se dela. Se gostar, pode guardar o ficheiro. O ficheiro de recuperação não é apagado para si porque isto não é explícito e não será correcto para 100% das situações.

Então você ®ecover, (w)rite e (q)uit, depois ou edita novamente e escolhe (d)elete ou “rm .myfile.js.swp” e edita novamente. Isto é rápido de fazer e é sempre, do ponto de vista de Vim, um comportamento 100% correcto.

1
1
1
2017-06-18 21:48:08 +0000

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.

1
1
1
2016-06-23 12:03:20 +0000

Estes ficheiros eram irritantes para mim também, mas eu defini a opção em .vimrc - set noswapfile para evitar que o vim o criasse e, em vez disso, para manter os ficheiros na memória.

1
1
1
2017-06-07 15:33:24 +0000

Aqui está um regex mais completo para limpar todos os arquivos vim swap baseados no próprio arquivo gitignore do Github para Vim

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

Tenha cuidado, embora esta seja uma solução mais completa, ela irá tirar qualquer arquivo de imagem .svg e arquivos .swf adobe flash. Poderá querer modificar o regex se trabalhar com esses ficheiros.

0
0
0
2015-01-26 20:03:16 +0000

Do manual :h swap:

Pode ver o nome do ficheiro swap actual a ser utilizado com o comando: :sw[apname]

0
0
0
2015-09-22 12:05:33 +0000

se lhe for pedido, prima D para apagar o ficheiro swap do ficheiro actual.

se não o for, tem de o fazer manualmente.

Uma forma alternativa de o fazer é:

para localizar/esquadrar ficheiro:

find | grep ".searchRefineVertTabs.jsp.swp"

e depois apagar este ficheiro:

rm ./.searchRefineVertTabs.jsp.swp
-1
-1
-1
2015-03-18 08:48:14 +0000

Pode utilizar,

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

Exemplo:

rm -f .rc.local.swp