Qual é o objetivo dos arquivos de troca?

74

Quando edito arquivos, o Vim tende a criar arquivos nomeados , o que acho irritante. De , vejo que a opção suprime a criação de arquivos de troca..filename.swpvim -h-n

Existe uma diretiva vimrc que eu possa usar para desativar os arquivos de troca por padrão?

Qual é o objetivo dos arquivos de troca e que funcionalidade eu estaria perdendo ao suprimi-los?

200_success
fonte
FWIW, acho os arquivos de permuta irritantes também e, por um tempo, tentei usar noswapfilecomo sugerido abaixo. Eu acabei cedendo e desligando isso, no entanto, porque aparentemente os benefícios superam os aborrecimentos - no entanto, não me lembro o que me convenceu a restaurar o uso de arquivos de troca. Provavelmente meu computador travou e não consegui restaurar alguns arquivos perdidos, o que seria trivial com os arquivos de troca ativados.
Kyle Strand

Respostas:

89

Razões para arquivos de troca

Os arquivos de swap armazenam as alterações feitas no buffer. Se o Vim ou o seu computador travar, eles permitem que você recupere essas alterações.

Os arquivos de troca também fornecem uma maneira de evitar que várias instâncias do Vim editem o mesmo arquivo. Isso pode ser útil em sistemas multiusuário ou apenas para saber se você já tem outro Vim editando um arquivo.

Desativando Arquivos de Troca

Se você deseja desativar completamente a criação de arquivos de troca (o que eu não recomendaria), adicione-o set noswapfileao seu .vimrc. Isso define o valor global da opção. Você pode substituir isso para buffers específicos usando :setlocal swapfileenquanto executa o Vim.

Organizando arquivos de troca

Se o seu problema é mais sobre os arquivos extras espalhados pelo seu sistema de arquivos, você pode agregar todos os arquivos de troca em um só lugar. Por exemplo, crie um ~/.vim/tmpdiretório e adicione

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

para o seu .vimrc. A 'directory'opção contém uma lista de diretórios que o Vim usará para tentar armazenar o arquivo de troca.

A ^=sintaxe para :setprecede o nome do diretório ao cabeçalho da lista, portanto o Vim verificará esse diretório primeiro.

O //no final do nome do diretório diz ao Vim para usar o caminho absoluto para o arquivo para criar o arquivo de troca, para que não haja colisões entre arquivos com o mesmo nome de diretórios diferentes.

Observe que isso impedirá o Vim de perceber quando há vários usuários tentando editar o mesmo arquivo. Como o arquivo de troca não está no mesmo diretório que o arquivo original, o Vim do outro usuário não saberá sobre o arquivo de troca e não avisará que ele já está sendo editado.

jamessan
fonte
4
Qual o benefício dos arquivos de troca sobre a persistência-desfazer agora que eles estão no vim por um tempo?
Alpha_989
Eu uso vim-auto-save. Isso não substitui a necessidade de arquivos de troca?
Kevin
@ Kevin Depende. Se o plug-in estiver causando um salvamento em todos os cenários em que o Vim gravará o arquivo de troca, provavelmente. Caso contrário, ainda haverá períodos em que o buffer não será salvo e um arquivo de troca poderá ajudar.
jamessan
@ alpha_989 Eles são complementares. Um arquivo de troca permite recuperar alterações não salvas. O arquivo de desfazer persistente permite percorrer o histórico de desfazer pelas sessões do Vim, mas o arquivo é gravado apenas quando você salva.
jamessan
Algum método de configurar o vim no swap para apenas uma instância? por exemplo vim temp.txt --some-command-that-disable-swap? Meu caso de uso é que algum observador continuará observando qualquer alteração no diretório; portanto, só então eu gostaria de desativar a troca para evitar colisões.
Ng Sek Long 14/10