Desativando a criação de arquivos de permuta no vim

216

Existe uma maneira de desativar a .swpcriação de arquivos no vim? ou pelo menos crie todos eles em um só lugar para que eu possa encontrá-los e excluí-los facilmente.

Acho-os especialmente irritantes quando copio o diretório pai durante a edição ao mesmo tempo. Claro que sei que posso usar o find -exec para encontrá-los e excluí-los. Mas eu quero uma solução mais prática.

Nadia Alramli
fonte

Respostas:

255

Para desativar os arquivos de troca do vim, digite

:set noswapfile

Para desativar os arquivos de permuta permanentemente, adicione o abaixo ao seu ~/.vimrcarquivo

set noswapfile

Para mais detalhes, consulte os documentos do Vim no swapfile

dwc
fonte
6
Os arquivos de troca são bons se o seu editor travar (queda de energia etc.), lembre-se.
Koonse
1
Outra opção ainda é usar o arquivo de troca, mas deixe-o na memória, para não continuar gravando no disco rígido. Isso não pode protegê-lo de perder o arquivo durante uma interrupção, mas se você abrir o mesmo arquivo no anter vim, ele informará imediatamente. O comando é: set directory = / dev / shm
webbertiger 14/09/16
A resposta de trusktr permite que você mantenha as vantagens dos arquivos de troca, enquanto aborda a preocupação do OP.
jpaugh
De vim dentro de você também pode desativar o swapfile ao abrir um arquivo::noswapfile edit /path/to/file
Torkel Bjørnson-Langen
Minha filosofia pessoal sobre perda de dados é DBAB e salvo frequentemente ...
Samy Bencherif
156

Defina as seguintes variáveis ​​em .vimrc ou / etc / vimrc para fazer o vim colocar arquivos de swap, backup e desfazer em um local especial, em vez do diretório de trabalho do arquivo que está sendo editado:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

O uso de barras duplas à direita no caminho informa ao vim para ativar um recurso onde evita colisões de nomes. Por exemplo, se você editar um arquivo em um local e outro arquivo em outro local e os dois arquivos tiverem o mesmo nome, não desejará que ocorra uma colisão de nomes em ~ / .vim / swap /. Se você especificar ~ / .vim / swap // com duas barras à direita, o vim criará arquivos de troca usando todo o caminho dos arquivos que estão sendo editados para evitar colisões (as barras no caminho do arquivo serão substituídas pelo símbolo de porcentagem%).

Por exemplo, se você editar /path/one/foobar.txt e /path/two/foobar.txt, verá dois arquivos de troca em ~ / .vim / swap / que são nomeados% path% one% foobar.txt e% path% two% foobar.txt, respectivamente.

trusktr
fonte
Você também pode adicionar que algum tempo os arquivos de backup salvos pode salvar uma pele devs
Bartek Skwira
Comentário: (não crítica), isso parece bom principalmente para o desenvolvimento, porque para a leitura de arquivos e pequenas edições ou manutenção de notas sem importância, que é uma grande parte do uso do vim para muitas pessoas, parece um trabalho extra de leitura de livros melhor deixado de fora. Pessoalmente, prefiro que todos os trabalhos não tenham swaps ou outros backups automáticos. Se eu realmente preciso desenvolver algo, eu prefiro ter um quadro mais alto nível para me proteger, de preferência com controle de versão de código etc.
j riv
@LelaDax É verdade que na maioria das vezes esses arquivos são inúteis porque eu uso o git para todo o meu código-fonte. Em raras ocasiões (como um acidente), eles foram úteis. Mas, na verdade, a história de desfazer eu uso muito. É muito mais fácil navegar tão rapidamente do que verificar o git commit para visualizar o histórico anterior. O gundo facilita e facilita a navegação na árvore de desfazer. Eu poderia viver sem os arquivos de troca e backup.
trusktr
26
Apenas para quem é novo (como eu, haha ​​...), você precisa ir para ~ / .vim / e criar os diretórios por conta própria. Não os criará automaticamente para você.
ago
1
Você também pode escrever algum código no seu vimrc para criar automaticamente as pastas para você, que é o que eu fiz no meu. Então, em novos sistemas, eu acabei de receber meu vimrc, e ele cuida do resto.
trusktr
42

Encontrei a resposta aqui :

vim -n <file>

abre arquivo sem swapfile.

Além do que, além do mais:

set dir=/tmp

in .vimrccria os arquivos de troca em /tmp.

markus_b
fonte
E os *.ext~arquivos de backup? Existe alguma opção de linha de comando para desativá-los também?
Salman von Abbas
Isso é muito útil para esses arquivos enormes únicos! Obrigado.
Felipe Alvarez
28

aqui estão minhas configurações pessoais de backup ~ / .vimrc

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup
cpjolicoeur
fonte
13

Concordo com aqueles que questionam por que o vim precisa de todo esse material de 'recuperação de desastres' quando nenhum outro editor de texto se preocupa com isso. Eu não quero que o vim crie QUALQUER arquivo extra no diretório do arquivo editado quando eu estiver editando, muito obrigado. Para esse fim, eu tenho isso _vimrcpara desativar arquivos de troca e mover arquivos irritantes de 'backup' para o diretório Temp:

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile
Jez
fonte
9
Penso que o fato de outros editores não se importarem com isso se reflete mal nos outros editores, mais do que em vi (m). A escolha de tornar o mesmo diretório o local padrão para colocar esses arquivos é um pouco lamentável, embora pelo menos marginalmente defensável. (por exemplo, em um multi-servidor, altamente ambiente cross-montado, pode não ser óbvio onde encontrar um arquivo de recuperação no momento em que você mais precisa urgentemente)
Domingo Ignacio
3
O manuseio de swapfile do Vim é péssimo. Eu o usei para recuperar dados perdidos talvez 5 vezes. Mas eu tenho me esforçado para recuperar um arquivo de troca cerca de 9.000 vezes, o que é invariavelmente idêntico ao arquivo de qualquer maneira, ou pior, uma versão desatualizada. Pode ser um bom recurso se o processo de recuperação não for tão ruim. recover.vim ajuda um pouco, mas ainda é muito interativo.
joeytwiddle
3
O texto sublime possui disaster recovery. Eu amo isso! Nem preciso salvar um arquivo, quando retomo as alterações feitas, salvas ou não, são recuperadas.
LeetNightshade
Eu tenho um comando automático simples que grava todas as alterações assim que são feitas, tornando inúteis os arquivos de troca e os backups.
tbodt
2
@ TorkelBjørnson-Langen Provavelmente é minha culpa por reiniciar minha máquina sem fechar todas as sessões do Vim e ficar paranóico sobre quais arquivos de recuperação são realmente válidos. De qualquer forma eu tentei obter o melhor dos dois mundos, escrevendo um plugin que só mantém um arquivo de swap quando há edições não salvas: vim-swap-se-awesome.vim
joeytwiddle
7

Você pode definir o backupdir e o diretório como null para desativar completamente seus arquivos de troca, mas geralmente é recomendável colocá-los em um diretório centralizado. O Vim cuida para garantir que não haja colisões de nomes ou algo assim; então, essa é uma alternativa completamente segura:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/
monokrome
fonte
3
Você deve adicionar uma barra dupla //no final dos caminhos para poder modificar dois arquivos com o mesmo nome ao mesmo tempo.
Samuel O'Malley
Obrigado, @ SamuelO'Malley. O que o // faz?
monokrome
Dê uma olhada :help directoryse você quiser ler os documentos para isso. Barra dupla informa ao vim para codificar o caminho completo do arquivo no nome do arquivo de troca, por exemplo %home%sam%dotfiles%.gitignore.swp, em vez de apenas .gitignore.swp.
Samuel O'Malley
3

Se você colocar set directory=""seu arquivo exrc, desativará o arquivo de troca. No entanto, isso desabilitará a recuperação.

Mais informações aqui .

Brian Rasmussen
fonte
3

Se você estiver usando git, você pode adicionar *.swpa .gitignore.

Evan Hu
fonte
Eu acho que é disso que a maioria dos usuários precisa! Desativar arquivos de troca é uma prática recomendada.
DenisKolodin
2

não crie nenhum arquivo de troca do vim apenas para um arquivo específico

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile
zzapper
fonte
1
Ou para todos os arquivos em um diretório específico, o seguinte parece funcionar (apenas uma breve teste):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty
1

Para quem tentar definir isso para projetos Rails, adicione

set directory=tmp,/tmp

dentro de voce

~/.vimrc

Portanto, os arquivos .swp estarão em seu local natural - o diretório tmp (por projeto).

valk
fonte