Por que o Vim salva arquivos com uma extensão ~?

180

Descobri que, ao usar o Vim no Windows, o Vim salva o arquivo, um .ext.swparquivo que é excluído ao fechar a janela do Vim e um .ext~arquivo.

Presumo que o .ext.swparquivo seja um backup de sessão no caso de o Vim travar. Qual é o objetivo do .ext~arquivo, no entanto? Este é um arquivo de backup permanente? É chato, pois eu gostaria de copiar todos os arquivos em que estou trabalhando no meu host, sem essas duplicatas. Como posso desativar isso ou , se houver por um bom motivo, ocultar os arquivos ?

Ross
fonte
Você tem algum arquivo aberto simultaneamente em mais de um local, eles criarão um .ext.swp.
dirkgently 3/03/2009
2
dirkgently: Não, aqui posso abrir um arquivo na única janela do vim e ele criará o arquivo .swp. Não estou muito preocupado com isso, pois ele é removido quando eu salvo / fecho a janela.
Ross

Respostas:

221

O *.ext~arquivo é um arquivo de backup, contendo o arquivo como era antes da sua edição.

O *.ext.swparquivo é o arquivo de troca, que serve como um arquivo de bloqueio e contém o histórico de desfazer / refazer, além de qualquer outra informação interna que o Vim precise. Em caso de falha, você pode reabrir seu arquivo e o Vim restaurará seu estado anterior a partir do arquivo de troca (o que acho útil, para não desativá-lo).

Para desativar a criação automática de arquivos de backup, use (no seu vimrc):

set nobackup
set nowritebackup

Onde nowritebackupaltera o comportamento padrão "salvar" do Vim, que é:

  1. gravar buffer para novo arquivo
  2. excluir o arquivo original
  3. renomeie o novo arquivo

e faz com que o Vim grave o buffer no arquivo original (resultando no risco de destruí-lo em caso de erro de E / S). Mas você evita "pular arquivos" na área de trabalho do Windows, o que é o principal motivo para eu ter um nowritebackuplocal.

Tomalak
fonte
7
+1 para you prevent "jumping files" on the Windows desktop. Pesquisei no Google e encontrei esta resposta
Merlyn Morgan-Graham
1
Na verdade - eu tenho que ter os dois nobackupe nowritebackup? Existe uma maneira de escrever uma cópia do arquivo como um backup, mas isso não é necessário para gravar / excluir / renomear?
Merlyn Morgan-Graham
@ Merlyn: Se você tiver backup(ao contrário de nobackup), o Vim criará um backup (o *.ext~arquivo). Isso não tem nenhuma relação com nowritebackup.
precisa
6
Há uma tabela que descreve o comportamento diferente entre combinação desses interruptores: help backup-table. Acontece que nem definir nem nobackupnem nowritebackup, mas definir backupcopy=yestambém resolve o problema do "salto". Isso pode doer perf, embora, por isso cada um na sua
Merlyn Morgan-Graham
27
Em vez de desligar, backup para um diretório set backupdir=~/.vim/backupno .vimrc ou _vimrc em janelas
tsukimi
224

Eu acho que a melhor solução é colocar essas linhas no seu arquivo vimrc

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

A primeira linha é para arquivos de backup, a segunda linha para arquivos de troca. A barra dupla no final garante que não haja conflito no caso de dois arquivos com o mesmo nome, veja os comentários (no momento desta edição, esta opção é aceita apenas para arquivos de troca, ainda não para arquivos de backup ). A ,.permissão vimpara usar o diretório atual se o primeiro não existir.

Você precisa criar um diretório em seu diretório pessoal chamado vimtmp para que isso funcione. Além disso, verifique se os backups estão ativados na sua configuração (adicione set backupse não estiver).

Dessa forma, você obtém o benefício dos dois mundos, não precisa ver os arquivos, mas se algo ficar futurizado, você poderá obter seu arquivo de backup no vimtmp. Não se esqueça de limpar o diretório de vez em quando.

user183135
fonte
22
+1 Na verdade, tenho o meu definido como ~ / .vim / tmp, mas, de qualquer forma, isso me salvou em mais de uma ocasião.
JC Yamokoski 6/06/11
11
Por que voce precisa ,. no final de cada linha?
shin
9
@shin Vim usará o primeiro dir disponível, portanto, neste caso, se ~ / vimtmp não existir, ele irá usar o diretório de trabalho atual
xixixao
3
@SalmanPK Em um mundo ideal, você não deve editar arquivos de configuração diretamente em servidores acessíveis ao público
#
12
Use duas barras no final do caminho. Por exemplo, defina backupdir = ~ / .vim / .backup // - o "//" no final do diretório significa que os nomes dos arquivos serão criados a partir do caminho completo para o arquivo com todos os separadores de caminho substituídos por porcentagem "% " placa. Isso garantirá a exclusividade do nome do arquivo no diretório preserve.
Hacknightly
25

Para desativar esses arquivos, basta adicionar essas linhas ao .vimrc (arquivo de configuração do vim no SO baseado em unix):

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files
rogeriopvl
fonte
12
:set nobackup 

desativará os backups. Você também pode definir um backupdir se ainda desejar esses arquivos de backup, mas em uma pasta central. Desta forma, o seu diretório de trabalho não está cheio de arquivos ~.

Você encontra mais informações sobre backups em : ele backup .

f3lix
fonte
12

E você também pode definir uma extensão de backup diferente e onde salvá-los (eu prefiro ~/.vimbackupsno linux). Eu costumava usar backups "versionados", via:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

Isso define uma extensão de backup dinâmico ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).

Zsolt Botykai
fonte
3
você pode querer incluir como configurar o backup do diretório, ou seja, colocando set backupdir=~/.vimbackupsem seu ~ / .vimrc
rampion
1
A ajuda do vim descreve completamente essa técnica. Veja:help backupext
netjeff
8

Coloque esta linha no seu vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


No isso seria o:

C:\Program Files (x86)\vim\_vimrc

arquivo para configuração do vim em todo o sistema para todos os usuários.

Definir o último noundofileé importante no Windows para impedir a criação de *~arquivos tilda após a edição.


Eu gostaria que o Vim tivesse essa linha incluída por padrão. Ninguém gosta de diretórios feios.

Deixe o usuário escolher se e como ele deseja ativar os recursos avançados de backup / desfazer arquivos primeiro.

Esta é a parte mais irritante do Vim.

A próxima etapa pode ser a configuração:

set noeb vb t_vb= " errorbells visualbell

desativar o sinal sonoro também :-)


fonte
Muito obrigado por isso! "noundofile" foi a opção que finalmente se livrou daquele lixo horrível. (E eu concordo 100% com tudo que você escreveu no seu post!)
pwmusic
6

Você está certo de que o .swparquivo é usado pelo vim para bloquear e como um arquivo de recuperação.

Tente colocar set nobackupseu vimrc se você não quiser esses arquivos. Consulte os documentos do Vim para obter várias opções relacionadas ao backup, se você deseja obter toda a informação ou se deseja ter arquivos .bak ...

dwc
fonte
+1 por mencionar a finalidade como um arquivo de bloqueio. Eu não pensei nisso.
Tomalak
5

A única opção que funcionou para mim foi colocar esta linha no meu arquivo ~ / .vimrc

definir noundofile

As outras opções referentes aos arquivos de backup não impediram a criação dos arquivos temporários que terminam em ~ (til)

Logan
fonte
Isso finalmente funcionou para mim. Por que isso não é mencionado em outras respostas? Isso remove os .<filename>.un~arquivos : enquanto as outras opções apenas os removem <filename>~.
JLT
0

Eu tive que adicionar set noundofileao ~ _gvimrc

O diretório "~" pode ser identificado alterando o diretório com o cd ~comando

Josh
fonte