Onde o VIM (gvim / macvim) mantém arquivos de troca por buffers não salvos / sem nome?


52

Onde o VIM (gvim / macvim) mantém arquivos de troca por buffers não salvos / sem nome? (Se assim for).

Antecedentes: Ao longo de um seminário semi-intenso, eu estava anotando um buffer MacVim sem nome / não salvo quando o MacBook ficou sem suco e desligou do nada (ele não dormia / hibernou como normalmente).

Pergunta: Alguém saberia se existe alguma chance de que o trabalho não salvo tenha sido salvo em um arquivo de troca (.swp) ou semelhante, que possa ser recuperado?

Detalhes do sistema: Em particular, isso aconteceu com o MacVim no Mac OS X 10.5.8 (mas também são interessantes dicas de recuperação possíveis para outras versões). Ainda não reiniciei o MacVim, caso isso inicie um processo de limpeza.


11
Esclarecimento: Por não salvo, quero dizer nunca salvo. O arquivo foi criado pressionando Command-T (acho equivalente a: tabe), ou seja, um novo buffer sem nome é aberto em uma nova guia. (Eu normalmente faria ': sav somefilename' em um estágio posterior.
davur

Não importa. Veja as adições à minha resposta.
Frabjous

Respostas:


60

Inicie o vim e tente:

:recover <filename>

Se o arquivo nunca teve um nome, simplesmente:

:recover

Essa é a sua melhor aposta. Para saber mais sobre arquivos de permuta e recuperação, consulte:

:help usr_11

Sobre os arquivos de troca, normalmente eles são salvos no mesmo diretório que o arquivo que está sendo editado, mas com um. adicionou o começo para torná-lo oculto e .swp no final, mas é possível movê-los para outro lugar por algo como:

:set directory=~/vimswap

ou similar.

Vejo:

:help swap

Para todos os detalhes.

Um arquivo de troca do vim não é o mesmo que o buffer editado, no entanto, não deixe de ler o que pode ser feito para recuperação.


EDIT : comentários respondendo à pergunta:

[…] Parece procurar no seu diretório de trabalho atual, ~ / tmp, / var / tmp e / tmp por arquivos de troca e, no meu caso, eu sempre tenho um diretório de trabalho atual definido e foi onde ele foi salvo. Veja o que você precisa.

Além disso, verifique a linha de comando vim -r arg. Isso imprimirá todos os arquivos de troca encontrados e onde eles estão. Além disso, ele terá muitas informações extras, como data / modificação / nome de usuário / etc ... # : 1001 Neg_EV


Isso não vai ajudar. Por não salvo, quero dizer, nunca salvo. Significado Abri um novo buffer com: tabe ou (Command + T). Então, estamos falando de um buffer não salvo / sem nome. Existe um local padrão onde esse tipo de trabalho não salvo é armazenado?
Davur 5/10

3
Tente :recoversem nome de arquivo. Acabei de testar isso para recuperar um arquivo sem nome e funcionou. De qualquer forma, mesmo que esse comando em particular não ajude, a leitura desses arquivos de ajuda pode.
Frabjous

11
Não é tanto quanto eu posso dizer. Acabei de testar matando o vim externamente enquanto editava um novo arquivo. Mas quando eu corri recoversem argumentos, deixei-me escolher mesmo entre algumas sessões mais antigas. De qualquer forma, o arquivo .swp para um buffer não unificado provavelmente está em / tmp, mas estaria em outro lugar, dependendo se você possui set directory= <something>.
Frabjous

2
Além disso, verifique a linha de comando vim -r arg. Isso imprimirá todos os arquivos de troca encontrados e onde eles estão. Em addtion ele vai ter um monte de informação extra como data / modificado / username / etc ...
Neg_EV

11
Eu tive que usar o comando :recover!para recuperar meu arquivo não salvo.

2

Eu trabalho no Windows 10 e :recovernão encontrei um arquivo de troca. vim -rlistou o arquivo de troca da última sessão de edição (também nunca salva) chamada _.swp. Recuperar era possível com :recover _.


1

A resposta é: em todo o lugar. O truque é encontrar o caminho certo. Alguns estão no diretório / tmp, mas muitos estão em algum lugar no diretório inicial.

Talvez haja maneiras mais eficientes de fazer isso, mas o seguinte funcionou para mim quando perdi um arquivo sem nome (no MacBook):

no diretório inicial, procure por arquivos de backup (leva alguns segundos e provavelmente pode ser mais inteligente):

find ./ -name ".s*" > findVimBackups.txt

abrir arquivo:

vim findVimBackups.txt

remova nomes de arquivos que não são para backups de arquivos sem nome:

:g!/\/\.s..$/d
:g/svn/d

Agora vejo uma lista dos locais de arquivos de backup sem nome. Em cada um desses diretórios, eu executo o seguinte até encontrar o (s) arquivo (s) de hoje:

ls -ltra <directory>

Entro no diretório certo e abro o vim e digite: recuperar e selecione o backup correto.


0

Parece que eles acabarão no seu diretório de trabalho. :pwdÉ aqui que você abre o vim ou, alternativamente, você pode configurá-lo usando :cdou similar.

os arquivos de troca por buffers sem nome parecem ser despejados ali sem nome de arquivo, então você acabará com .swp .swn .swo etc. Eu descobri isso não ao tentar recuperar alguma coisa, mas quando meu arquivo hg ignore não estava cobrindo o suficiente sufixos diferentes!

Imaginei que ter muitos buffers sem nome com alterações poderia ter sido a causa e a exclusão desses buffers fazia com que os arquivos misteriosos desaparecessem.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.