Às vezes, o Vim falha e me deixa um arquivo de troca. Fantástico. Em seguida, abro o arquivo que estava editando e o Vim pergunta se eu quero recuperar. Eu faço obrigado. Quando estiver pronto, 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 ele apenas começaria a usar o arquivo de swap antigo como um arquivo de swap novamente e o limparia quando eu saísse, mas isso não é verdade. Ele cria um novo, limpa esse e, quando abro o arquivo novamente, solicita novamente que eu me recupere do primeiro.
Certamente estou perdendo alguma coisa.
Respostas:
Uma maneira um pouco mais simples:
No emulador de terminal:
Em seguida, escolha recuperar e, se desejar excluir a troca, escreva (salve) e faça isso no vim:
... e escolha excluir desta vez.
Acabei de descobrir sobre isso e acho que farei isso a partir de agora. Também não substituirei acidentalmente um arquivo de trabalho, se a recuperação estiver corrompida (embora eu nunca tenha tentado isso antes).
Também há dicas relevantes sobre essa questão no Stack Overflow (onde encontrei essa dica).
fonte
delete
opção, existe apenas: [O] caneta (E) dit (R) ecover (Q) uit (A) bort, o que devo fazer?(D)elete
opção, veja:help swap-exists
; quoteOn Unix this choice is only offered when the process that created the swap file does not appear to be running.
Ou seja, talvez você tenha outro processo vim em execução, que está ocultando essa opção. Também pode explicar por que você tem umswp
arquivo em primeiro lugar!Para limpar TODOS os arquivos de troca do vim em um diretório:
Se você tem certeza de que não precisa de nenhum arquivo de troca do vim em uma árvore de diretórios e deseja se livrar deles, pode usar o seguinte comando no diretório enquanto o vim não estiver em execução (nem mesmo em outra janela ou mesmo em um login diferente) sessão):
Algumas inspirações e idéias vieram de Removendo arquivos .swp indesejados nos Grupos do Google. Isto irá apagar todos os arquivos cujos nomes terminam com
.swk
,.swl
,.swm
,.swn
,.swo
, ou.swp
na árvore do diretório atual.Pode não ser o que você deseja, por vários motivos:
Como foi dito, ele irá apagar todos os arquivos cujos nomes terminam com
O autor original deste post diz:.swk
,.swl
,.swm
,.swn
,.swo
, ou.swp
, e não só.swp
. Gary Johnson diz ,Por outro lado, pode ser pouco. rublo sugere
que corresponde a todas as extensões de três letras (em minúsculas) que variam de
.saa
até.swp
. Ele acrescenta: “Cuidado, embora essa seja uma solução mais completa, ela removerá qualquer arquivo de imagem .svg e arquivo flash .swf adobe flash. Você pode querer modificar o regex se você trabalhar com esses arquivos.”Ele também corresponde.sav
,.snd
(dados de som),.sql
,.src
,.srt
(SubRip formato de vídeo de legenda), e muitas outras extensões comuns.Pode ser um exagero. Como foi dito, ele irá apagar todos os arquivos cujos nomes terminam com
.swk
,.swl
,.swm
,.swn
,.swo
, ou.swp
. Mas, aparentemente, os arquivos de troca do vim são geralmente arquivos de "ponto". Se você editarhello.cpp
, o arquivo de troca pode ser.hello.cpp.swp
. Como mostrado (mas não explicado) na resposta do rouble , é mais seguro excluir apenas os arquivos cujos nomes começam com um ponto; por exemplo, comfonte
Tipo
ls -a
que lista TODOS os arquivos no diretóriodigite
rm .whatever.your.swp
e pressioneenterÉ simples assim.
Qualquer arquivo que aparece
.
na frente é um arquivo oculto e normalmente não é visto.Lembre-se de que as mudanças são imediatas e permanentes, portanto, tenha cuidado.
fonte
file.swp
ou nãofile.swo
. Então eu tenho que voltar para onde eu estava. Bater:e
é uma solução muito mais simples.ls: cannot access +A: No such file or directory
Btw. alguns plugins fazem isso automaticamente para você: autoswap.vim
da descrição:
fonte
Não, AFAIK você não está perdendo nada.
Vim
continua mantendo o arquivo de troca como um backup até que você o exclua explicitamente.Simplesmente salve, feche e reabra o mesmo arquivo novamente. Você será solicitado (novamente) com
Agora basta pressionar
d
:)fonte
O Vim, como a maioria dos comandos do Unix, é simples e explícito, ao invés de assumido e implícito.
Você se recupera com (r). Se você não gostar da recuperação ou a recuperação estiver corrompida, você pode descartá-la. Se você gosta, pode salvar o arquivo. O arquivo de recuperação não foi 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, edite novamente e escolha (d) elete ou "rm .myfile.js.swp" e edite novamente. Isso é rápido e sempre é, do ponto de vista de Vim, 100% de comportamento correto.
fonte
Esses arquivos também eram irritantes para mim, mas eu configurei a opção no .vimrc -
set noswapfile
para evitar que o vim o crie e, em vez disso, mantenha os arquivos na memória.fonte
Aqui está um regex mais completo para limpar todos os arquivos de troca do vim com base no próprio arquivo gitignore do Github para o Vim
Porém, tenha cuidado, embora essa seja uma solução mais completa, ela removerá todos os arquivos de imagem .svg e arquivos flash .swf adobe. Você pode modificar a regex se trabalhar com esses arquivos.
fonte
Aqui está um trecho para adicionar
.vimrc
. Exclui todos os arquivos de troca associados ao buffer de arquivo atual e redefine a extensão de troca.Uma vez encontrado o problema, pode-se executar
:DeleteFileSwaps
Isso é ótimo se combinar com:windo
ou:tabdo
comandos.Mais detalhes : Um arquivo pode ter mais de um arquivo de troca. O motivo porque o arquivo de troca, com extensão de
.swp
, ainda existe evim
continuará criando novos por causa dele. Para descobrir se.swp
existe::sw
para obter o arquivo de troca atual..swp
.O trecho acima segue o mesmo processo, mas remove todos os arquivos de troca.
Espero que isto ajude.
fonte
Do manual
:h swap
:fonte
.swp
arquivo, o:sw
comando provavelmente fornecerá o nome do.swo
arquivo - que não é o que você deseja excluir.se você for solicitado, pressione Dpara excluir o arquivo de troca do arquivo atual.
se você não for, precisará fazê-lo manualmente.
uma maneira alternativa de fazer isso é:
para localizar / pesquisar arquivo:
e exclua este arquivo:
fonte
Você pode usar,
Exemplo:
fonte
<ext>
é redundante aqui, pois um nome de arquivo pelo menos no Linux inclui zero ou mais extensões.