Práticas recomendadas para arquivos de troca VIM?


14

Toda vez que eu interrompo uma sessão no vim perdendo minha conexão, estou bastante cheio de dred (e ainda continuo usando o vim ... que masoquista devo ser) porque quando abro meus arquivos novamente, uma pilha de troca- arquivos estão esperando para tentar destruir meu trabalho. Quais são as melhores práticas para trabalhar com arquivos de troca vim? Você acabou de escolher o mais novo? Se o arquivo funcionar da maneira que você espera, você simplesmente exclui os arquivos de troca? Como você se livra deles?


5
Os arquivos de troca existem para proteger seu trabalho. Considere usar a tela gnu.

1
Não quero desativar a funcionalidade; É chato, mas como você diz útil.
leeand00

1
Eu só quero saber como usá-lo corretamente.
leeand00

2
@DrEval eu uso tmux
leeand00

2
Se você usa o tmux, não precisa se preocupar em perder sua conexão: basta reconectar à sua sessão quando se reconectar. Você pode também estar interessado em mosh e no plug-in Recuperar @ ChristianBrabandt .
Rico

Respostas:


22

Não entre em pânico!

A recuperação de arquivos é sempre segura, porque o vim nunca grava alterações até que você as grave. Portanto, recuperar-se de um arquivo de troca e fechar sem salvar não mudará nada.

Organize seus arquivos de troca:

Faça com que o vim coloque todos os seus arquivos de troca no mesmo local, para que você sempre saiba onde eles estão:

set directory^=$HOME/.vim/swap//

ou onde você preferir. O uso //no final do nome do arquivo faz com que o vim use caminhos de arquivo absolutos para os nomes dos arquivos de troca, para que você não tenha colisões de nomes. Verifique se o diretório existe ou o vim não o usa (não o cria para você).

Nota: Isso funciona apenas em variáveis ​​de ambiente, se você deseja usar uma variável vimscript, precisamos usar um pouco de :executemágica:

execute "set directory^=".my_vim_home_var."/swap//"

Diff as diferenças:

Ajuda do Vim sugere um comando muito útil para usar nesta situação: :DiffOrig. Não é um comando vim padrão , portanto, copie a implementação :h :DiffOrigpara o seu vimrc. (também está $VIMRUNTIME/defaults.vimse você tiver o vim8). Agora, você pode recuperar o arquivo e simplesmente executar o DiffOrig para obter um vimdiff do que mudou na versão não modificada.

Se você deseja comparar o conteúdo de vários arquivos de troca, recupere seu arquivo com cada arquivo de troca diferente e, em seguida, grave o resultado em arquivos temporários. Agora carregue os arquivos e execute :diffthisem cada arquivo, faça as alterações desejadas, escreva de volta para o arquivo original e exclua os arquivos temporários e de troca.

Comandos úteis:

:swapname: obtenha o nome que o vim está usando no arquivo de troca do buffer atual ( :h :swapname) :recover: recupera o arquivo selecionado, o mesmo que quando você inicia o vim e pressiona R( :h :recover)

Confira a ajuda:

Vim tem uma seção inteira do manual do usuário em recuperação: :usr_11.txt
ajuda de referência do Vim em arquivos de swap: :h swap-file, h recovery
Ajuda sobre a opção de diretório (para definir o local do arquivo swap)::h 'directory'

Edit: Exemplo modificado para configuração de diretório, como apontado nos comentários de @B Layer


E quando você acaba com vários arquivos de troca? Por causa de muitas conexões perdidas?
precisa saber é o seguinte

1
Eu mencionei isso no segundo parágrafo de "Diferencie as diferenças". Depois de usar diffs para determinar quais alterações você deseja manter, exclua todos os arquivos temporários e arquivos de troca antigos que você fez (agora você sabe onde estão todos os arquivos de troca).
precisa saber é o seguinte

1
Para sua informação, você não precisa usar exec... set directory^=$HOME/.vim/swap//funciona bem, desde que $HOMEseja uma variável de ambiente inicializada. Veja :h expand-env. Também trabalha com dictionary, undodire backupdirpara citar alguns.
Camada B

Obrigado por me lembrar disso! Em vez disso, uso uma variável vimscript na minha configuração, portanto, as variáveis ​​de ambiente execute e esqueci não precisam disso. Pensando nisso, eu provavelmente deveria apenas usar o vim para definir uma variável de ambiente.
flemingfleming

2

Pessoalmente, desativei os arquivos de troca e backup, pois ele tende a criar arquivos de troca e arquivos de backup em todos os lugares e frequentemente cria conflitos. O desfazer persistente do Vim tem sido muito mais confiável e livre de erros.

Atualmente, o Vim tem desfazer persistente, é um método de backup muito mais refinado. Toda vez que você pressiona Esc, o estado atual do arquivo é capturado.

Você pode usar :undolistplugins como gundo ou desfazer uma árvore para navegar no seu histórico de desfazer.

Para usar o vim desta maneira:

  • crie um diretório onde o histórico de edição de cada arquivo será capturado
  • diga ao vim para usar esse diretório
  • ativar desfazer persistente

No shell:

mkdir ~/.vim/undodir

No Vim

set undodir=~/.vim/undodir
set undofile

Para desativar os arquivos de troca: :set noswapfile


1
Existem alguns grandes problemas com esta resposta. 1. Desfazer persistente resolve um problema diferente para trocar arquivos (e 'writebackup'soluciona outro problema). A desativação persistente ativada não ajudará se o computador travar. Você pode argumentar que os arquivos de troca são desnecessários por outros motivos (estabilidade moderna do sistema operacional, existência de no-breaks), mas não o fez nesta resposta. 2. a configuração 'undodir' não permite desfazer persistente! Você precisa definir 'undofile'para este
Ricos
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.