Como impedir que o vim crie (e saia) de arquivos temporários?

163

Por que o vim cria <filename>~arquivos? Existe uma maneira de desativar isso?

Se for para backup (ou algo assim), eu uso o git para isso.

Além disso, esses .<filename.with.path.hints>.swparquivos também.

Como digo ao vim para não criá-los ou, pelo menos, limpar depois de si mesmo?

EDITAR

gritos, duplicar:

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

Eu adotei resposta das rogeriopvl de lá.

cópia literal:

set nobackup       "no backup files
set nowritebackup  "only in case you don't want a backup file while editing
set noswapfile     "no swap files
hasen
fonte
12
O Git nunca o ajudará a recuperar o trabalho após uma falha no sistema. O Git também pode ignorar seus arquivos * .swp. = D
vmassuchetto
3
Possível duplicata de Por que o Vim salva arquivos com uma extensão ~?
törzsmókus 08/12/2015
lol alguém marcou seriamente esta pergunta como duplicada após seis anos de publicação?
hasen

Respostas:

78

Eu recomendo fortemente continuar trabalhando com arquivos de troca (no caso do Vim travar).

Você pode definir o diretório em que os arquivos de troca estão armazenados, para que não atrapalhem seus diretórios normais:

set swapfile
set dir=~/tmp

Veja também

:help swap-file
user55400
fonte
4
bem, eu nunca precisei daqueles com o bloco de notas ++, a menos que você diga que o vim travará com muita frequência!
hasen
8
não, eu não estava sugerindo que o vim travava com muita frequência (embora eu tenha visto ele travar). Mas para o meu ambiente de trabalho, a conexão de rede com algum host em que estou trabalhando é bastante instável, portanto ocorre uma edição interrompida. Os arquivos de troca ajudam lá.
user55400
9
@ user55400 ouviu falar do GNU / Screen? (ou tmux, ou esta alternativa japonês)
ELAZAR Leibovich
Adicionei isso ao meu arquivo _vimrc no Windows e ainda estou recebendo os arquivos ~. Não estou fazendo algo corretamente?
FilBot3
2
@ noircc Eu não recomendaria o uso de / tmp. No caso de todo o sistema travar e você precisar reiniciar, seus arquivos de swap desaparecerão.
56

Coloque isso no seu arquivo de configuração .vimrc.

set nobackup
Chad Birch
fonte
5
Fizemos isso no Windows 8.1 com Vim. Os arquivos de troca ainda estão presentes.
Shaun Luttin
1
Shaun, pode ser necessário adicionar "set noswapfile" ao seu .vimrc, para evitar a criação de novos arquivos de troca, conforme mencionado na edição da pergunta original.
Earl Zedd
E a posição :como prefixo antes da setpalavra - chave? É necessário? Não parece um comentário ..
Stephane
@Stephane um :prefixo significa o seu feito no modo de comando, mas você não precisa de um :ao escrever o seu vimrc
TankorSmash
Isso não é realmente uma boa ideia. A descrição acima de deixar esses arquivos na pasta temp / já é muito melhor.
MonsieurMan
36

; Para usuários do Windows retornar ao diretório temporário

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup
Sooraj
fonte
6
Eu tive que adicionar set undodir = C: \ WINDOWS \ Temp
Isso não funcionou para mim - eu tive que usar o conjunto dir = $ TEMP
Frank Schmitt
10

Eu criei um plugin chamado "noswapsuck" que só ativa o arquivo de troca quando o buffer contém alterações não salvas. Depois que as alterações são salvas, o arquivo de troca é limpo. Portanto, os arquivos de troca que contêm o mesmo conteúdo que o arquivo no disco serão removidos.

Venha aqui: noswapsuck.vim

Tem funcionado bem para mim, mas nunca o publiquei antes, então gostaria de receber feedback.

Vantagens:

  • Os únicos arquivos de troca que permanecem no seu disco serão arquivos de troca importantes que realmente diferem do arquivo!

Desvantagens:

  • Se o buffer tiver um arquivo de troca, ele não será detectado quando o arquivo for aberto pela primeira vez. Ele só será detectado quando swapfileestiver ativado, que é quando você começa a editar o buffer. Isso é irritantemente tarde e irá interrompê-lo. (Resolvido: agora verificamos um arquivo de troca preexistente quando um buffer é aberto, ativando temporariamente a swapfileopção novamente.)

  • Se você estiver trabalhando em um ambiente em que deseja minimizar gravações em disco (por exemplo, baixo consumo de energia ou arquivos montados em uma rede ou editar um arquivo enorme), não é ideal continuar removendo e recriando o arquivo de troca em todos os salve e edite. Em tais situações, você pode fazer:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    que manterá o arquivo de troca após uma gravação, mas ainda o removerá quando o buffer perder o foco.

A propósito, tenho outro pequeno plug-in :DiffAgainstFileOnDiskque pode ser bastante útil depois de clicar (r)ecover, para verificar se o buffer que você recuperou é mais recente ou mais antigo que o arquivo existente ou idêntico a ele.

joeytwiddle
fonte
8

No Windows, adicione as seguintes linhas ao _vimrc

" store backup, undo, and swap files in temp directory
set directory=$HOME/temp//
set backupdir=$HOME/temp//
set undodir=$HOME/temp//
Vlad Bezden
fonte
5

Esta resposta se aplica ao uso do gVim no Windows 10. Não posso garantir os mesmos resultados para outros sistemas operacionais.

Adicionar:

set nobackup
set noswapfile
set noundofile

Para o seu arquivo _vimrc.

Nota: Esta é a resposta direta à pergunta (para Windows 10) e provavelmente não é a coisa mais segura a fazer (leia as outras respostas), mas esta é a solução mais rápida no meu caso.

wlwl2
fonte
0

Eu tenho essa configuração no meu Ubuntu .vimrc. Não vejo nenhum arquivo de troca nos meus arquivos de projeto.

set undofile
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

set backup                        " enable backups
set swapfile                      " enable swaps
set undodir=$HOME/.vim/tmp/undo     " undo files
set backupdir=$HOME/.vim/tmp/backup " backups
set directory=$HOME/.vim/tmp/swap   " swap files

" Make those folders automatically if they don't already exist.
if !isdirectory(expand(&undodir))
    call mkdir(expand(&undodir), "p")
endif
if !isdirectory(expand(&backupdir))
    call mkdir(expand(&backupdir), "p")
endif
if !isdirectory(expand(&directory))
    call mkdir(expand(&directory), "p")
endif
Raza
fonte