Vim neden ~ uzantılı dosyaları kaydediyor?


180

Windows Vim'de Vim kullanırken dosyayı, .ext.swpVim penceresini kapatırken silinen bir .ext~dosyayı ve bir dosyayı kaydettiğini gördüm .

Ben .ext.swpVim çökmesi durumunda dosya bir oturum yedekleme olduğunu varsayalım . .ext~Ancak dosyanın amacı nedir ? Bu kalıcı bir yedekleme dosyası mı? Bu kopyalar olmadan üzerinde çalıştığım tüm dosyaları sunucuma kopyalamak istediğim için can sıkıcı. Bunu nasıl kapatabilirim veya iyi bir nedenden dolayı oradaysa dosyaları gizleyebilirim ?


Birden fazla yerde aynı anda açık olan herhangi bir dosyanız varsa, bunlar bir oluşturur .ext.swp.
dirkgently

2
dirkgently: Hayır, burada sadece vim penceresinde bir dosya açabilir ve .swp dosyasını oluşturacaktır. Pencereyi kaydettiğimde / kapattığımda kaldırıldığı için çok fazla endişelenmiyorum.
Ross

Yanıtlar:


221

*.ext~Dosya düzenleseniz önce olduğu gibi dosyayı içeren bir yedek dosyasıdır.

*.ext.swpDosya bir kilit dosyası olarak hizmet verir ve geri alma / yeniden yapma tarihinin yanı sıra başka iç bilgi Vim ihtiyaçlarını içeren takas dosyasıdır. Bir kilitlenme durumunda dosyanızı yeniden açabilirsiniz ve Vim, önceki durumunu takas dosyasından geri yükler (yardımcı bulduğum için kapatmam).

Yedekleme dosyalarının otomatik oluşturulmasını kapatmak için (vimrc'nizde) kullanın:

set nobackup
set nowritebackup

Nerede nowritebackupVim'in varsayılan "kaydet" davranışını değiştirir:

  1. tamponu yeni dosyaya yaz
  2. orijinal dosyayı sil
  3. yeni dosyayı yeniden adlandır

ve Vim'in arabelleği orijinal dosyaya yazmasını sağlar (bir G / Ç hatası durumunda imha etme riskiyle sonuçlanır). Ama onunla birlikte Windows masaüstünde "dosyaları atlamayı" önlüyorsunuz nowritebackup.


7
+1 İçin you prevent "jumping files" on the Windows desktop. Googled ve bu cevabı buldu
Merlyn Morgan-Graham

1
Aslında - Ben ikisine de sahip gerekiyor nobackupve nowritebackup? Dosyanın bir kopyasını yedek olarak yazmanın bir yolu var, ancak bu yazma / silme / yeniden adlandırma şeyler yapmıyor musunuz?
Merlyn Morgan-Graham

@Merlyn: Varsa backup(aksine nobackup) Vim bir yedek ( *.ext~dosya) oluşturur. Bu tamamen ilgisiz nowritebackup.
11'te Tomalak

6
Bu anahtarlar kombinasyonu arasındaki farklı davranış tarif eden bir tablo bulunmaktadır: help backup-table. Ne ayarı ne nobackupde ortaya çıkıyor nowritebackup, ancak bunun yerine ayar backupcopy=yes"atlama" sorununu da çözüyor. Yine de bu, her birine kendi başına zarar verebilir
Merlyn Morgan-Graham

27
Kapatmak yerine, set backupdir=~/.vim/backupWindows'ta .vimrc veya _vimrc dizinine yedekleyin
tsukimi

224

Bence daha iyi çözüm bu satırları vimrc dosyanıza yerleştirmektir

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

İlk satır yedek dosyalar, ikinci satır takas dosyaları içindir. Sondaki çift eğik çizgi, aynı ada sahip iki dosya olması durumunda çakışma olmamasını sağlar, yorumlara bakın (bu düzenleme sırasında bu seçenek yalnızca yedekleme dosyaları için değil , yalnızca takas dosyaları için geçerlidir ). İlk dizin yoksa, geçerli dizini kullanma ,.izni vim.

Çalışması için ana dizininizde vimtmp adlı bir dizin oluşturmanız gerekir. Ayrıca, yapılandırmanızda yedeklemelerin etkin olup olmadığını kontrol edin ( set backupeğer eklemediyseniz ekleyin ).

Bu şekilde her iki dünyanın faydasını elde edersiniz, dosyaları görmek zorunda kalmazsınız, ancak bir şey donarsa vimtmp'dan yedek dosyanızı alabilirsiniz. Dizini arada bir temizlemeyi unutmayın.


22
+1 Aslında benim ~ / .vim / tmp olarak ayarlanmış benim var, ama her iki durumda da, bu kıçımı birden fazla vesileyle kurtardı.
JC Yamokoski

11
Neden ihtiyaç duyuyorsun ,. her satırın sonunda?
Shin

9
@shin Vim ilk kullanılabilir dizini kullanacak, bu durumda ~ / vimtmp yoksa mevcut çalışma dizinini kullanacaktır
xixixao

3
@SalmanPK İdeal bir dünyada, yapılandırma dosyalarını doğrudan halka açık sunucularda doğrudan düzenlememelisiniz
Score_Under

12
Yolun sonunda iki eğik çizgi kullanın. Örneğin, backupdir = ~ / .vim / .backup // - dizinin sonundaki "//", dosya adlarının, dosyaya giden tam yoldan tüm yol ayırıcılarının yüzdesi olarak değiştirileceği anlamına gelir "% " işaret. Bu, koruma dizininde dosya adı benzersizliğini sağlayacaktır.
Hacknightly

25

Bu dosyaları kapatmak için bu satırları .vimrc'ye (unix tabanlı işletim sistemindeki vim yapılandırma dosyası) eklemeniz yeterlidir:

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

12
:set nobackup 

yedeklemeleri kapatır. Yine de bu yedekleme dosyalarını ancak merkezi bir klasörde istiyorsanız bir backupdir ayarlayabilirsiniz. Bu şekilde çalışma dizininiz ~ dosyaları ile çevrelenmez.

Yedeklemeler hakkında daha fazla bilgiyi şu yedekleme bölümünde bulabilirsiniz : he backup .


12

Ayrıca farklı bir yedekleme uzantısı ve bu yedeklemenin nereye kaydedileceğini de ayarlayabilirsiniz ( ~/.vimbackupslinux'u tercih ederim ). Eskiden "sürümlü" yedekleri kullanıyordum:

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

Bu, dinamik bir yedekleme uzantısı ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup) ayarlar .


3
yedekleme dizininin nasıl kurulacağını dahil etmek isteyebilirsiniz, örn set backupdir=~/.vimbackups. ~ / .vimrc
rampion

1
Vim yardımı bu tekniği tam olarak açıklamaktadır. Bkz.:help backupext
netjeff

8

Bu satırı şunun içine koy vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


İçinde bu olurdu:

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

tüm kullanıcılar için sistem genelinde vim yapılandırması dosyası.

noundofileWindows'da sonuncuyu ayarlamak, *~düzenleme sonrasında tilda dosyalarının oluşturulmasını önlemek için önemlidir .


Keşke Vim'in bu satırı varsayılan olarak içermesi. Kimse çirkin dizinlerden hoşlanmaz.

Öncelikle gelişmiş yedekleme / geri alma dosya özelliklerini etkinleştirmek isteyip istemediğini ve nasıl etkinleştireceğini kullanıcının seçmesine izin verin.

Bu Vim'in en sinir bozucu kısmı.

Bir sonraki adım ayarlanıyor olabilir:

set noeb vb t_vb= " errorbells visualbell

bip sesini devre dışı bırakmak için de :-)


Bunun için çok teşekkürler! "Noundofile" nihayet o tanrının korkunç çöpünden kurtulmuş olan seçimdi . (Ve
yazında

6

.swpDosyanın vim tarafından kilitleme ve kurtarma dosyası olarak kullanıldığı doğru .

set nobackupBu dosyaları istemiyorsanız vimrc'nizi koymayı deneyin . Kepçenin tamamını istiyorsanız veya bunun yerine .bak dosyalarına sahip olmak istiyorsanız, yedekleme ile ilgili çeşitli seçenekler için Vim belgelerine bakın ...


Bir kilit dosyası olarak amacından bahsettiği için +1. Bunu düşünmedim.
Tomalak

5

Benim için çalışan tek seçenek bu satırı ~ / .vimrc dosyama koymaktı

noundofile ayarlamak

Yedekleme dosyalarına atıfta bulunan diğer seçenekler ~ (tilde) ile biten geçici dosyaların oluşturulmasını engellemedi.


Bu sonunda benim için çalıştı. Bu neden diğer cevaplarda belirtilmiyor? Bu,: .<filename>.un~dosyalarını kaldırırken diğer seçenekler yalnızca <filename>~dosyaları kaldırır .
JLT

0

set noundofile~ _Gvimrc'e eklemek zorunda kaldım

"~" Dizini, dizini cd ~komutla değiştirerek tanımlanabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.