Vim'de takas dosyaları oluşturmayı devre dışı bırakma


216

.swpVim'de dosya oluşturmayı devre dışı bırakmanın bir yolu var mı ? veya en azından hepsini tek bir yerde oluşturabilir, böylece kolayca bulabilir ve silebilirim.

Aynı anda düzenleme yaparken üst dizini kopyaladığımda özellikle rahatsız edici buluyorum. Tabii ki onları bulmak ve silmek için find -exec'i kullanabileceğimi biliyorum. Ama daha pratik bir çözüm istiyorum.



Yanıtlar:


255

Takas dosyalarını vim içinden devre dışı bırakmak için şunu yazın

:set noswapfile

Takas dosyalarını kalıcı olarak devre dışı bırakmak için aşağıdakileri ~/.vimrcdosyanıza ekleyin

set noswapfile

Daha fazla ayrıntı için swapfile'daki Vim belgelerine bakın


6
Editörünüz olsa da çökerse dosyaları değiştirin (elektrik kesintisi vb.), Unutmayın.
koonse

1
Başka bir seçenek hala takas dosyası kullanmaktır, ancak bellekte bırakın, böylece sabit disk yazmaya devam etmez. Bu, bir kesinti sırasında dosyayı kaybetmenizi önleyemez, ancak aynı dosyayı başka bir vim'de açarsanız, hemen söyleyecektir. Komut: set directory = / dev / shm
webbertiger

trusktr'un cevabı , OP'nin endişesini ele alırken takas dosyalarının avantajlarını korumanıza izin verir.
jpaugh

Vim içinden bir dosyayı açarken swap dosyasını da devre dışı bırakabilirsiniz::noswapfile edit /path/to/file
Torkel Bjørnson-Langen

Veri kaybı hakkındaki kişisel felsefem DBAB ve sık sık tasarruf etmem ...
Samy Bencherif

156

Aşağıdaki değişkenleri .vimrc veya / etc / vimrc dizininde ayarlayın.

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

Yolda çift eğik çizgi kullanılması, vim'e ad çakışmalarını önleyen bir özelliği etkinleştirmesini söyler. Örneğin, bir konumdaki bir dosyayı ve başka bir konumdaki başka bir dosyayı düzenlerseniz ve her iki dosya da aynı ada sahipse, ~ / .vim / swap / dizininde bir ad çakışması olmasını istemezsiniz. İki arka eğik çizgi ile ~ / .vim / swap // belirtirseniz, vim, çarpışmaları önlemek için düzenlenmekte olan dosyaların tüm yolunu kullanarak takas dosyaları oluşturur (dosyanın yolundaki eğik çizgiler yüzde simgesi ile değiştirilir).

Örneğin, /path/one/foobar.txt ve /path/two/foobar.txt dosyasını düzenlerseniz, ~ / .vim / swap / dizininde% path% one% foobar.txt adlı iki takas dosyası görürsünüz. ve sırasıyla% yol% iki% foobar.txt.


Ayrıca, kaydedilen yedekleme dosyalarının bir geliştirici kaplamasını kaydedebileceğini de ekleyebilirsiniz
Bartek Skwira

Yorum: (eleştiri değil), Bu esas olarak geliştirme için iyi görünüyor çünkü dosyaları ve küçük düzenlemeleri okumak veya birçok insan için vim kullanımının büyük bir kısmı olan önemsiz not tutmak için, daha iyi bir ekstra defter tutma işi gibi görünüyor. Şahsen ben tüm işlerin sadece takas veya diğer otomatik yedeklemeler olmasını tercih ederim. Gerçekten bir şey geliştirmem gerekiyorsa, beni korumak için daha yüksek düzeyli bir çerçeveye sahip olmayı tercih ederim, tercihen kod sürüm kontrolü vb.
j riv

@LelaDax Doğru, çoğu zaman bu dosyalar çoğunlukla işe yaramaz çünkü tüm kaynak kodum için git kullanıyorum. Nadir durumlarda (bir kaza gibi) olsa da kullanışlı hale geldi. Ama aslında, geri alma tarihini çok kullanıyorum. Önceki geçmişi görüntülemek için git taahhütlerini kontrol etmekten daha çabuk gezinmek çok daha kolaydır. gundo, geri alma ağacında gezinmeyi güzel ve kolay hale getirir. Ben takas ve yedekleme dosyaları olmadan yaşayabilir.
trusktr

26
Sadece yeni insanlar için FYI (benim gibi haha ​​...) ~ ~ .vim / adresine gitmeli ve dizinleri kendin yapmalısın. Onları sizin için otomatik olarak oluşturmaz.
Ağustos

1
Ayrıca sizin için klasörleri otomatik olarak oluşturmak için vimrc'nize bazı kodlar yazabilirsiniz. Yani, yeni sistemlerde, sadece vimrc'imi alıyorum ve geri kalanıyla ilgileniyor.
trusktr

42

Cevabı burada buldum :

vim -n <file>

dosyayı swapfile olmadan açar.

Ek olarak:

set dir=/tmp

içindeki .vimrctakas dosyalarını oluşturur /tmp.


*.ext~Yedek dosyalar ne olacak ? Bunları da devre dışı bırakmak için herhangi bir komut satırı seçeneği var mı?
Salman von Abbas

Bu tek seferlik devasa dosyalar için çok kullanışlı! Teşekkürler.
Felipe Alvarez

28

İşte kişisel ~ / .vimrc yedekleme ayarlarım

" 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

13

Başka hiçbir metin editörüyle uğraşmadığında vim'in neden tüm bu 'felaket kurtarma' şeylerine ihtiyacı olduğunu sorgulayanlara katılıyorum. Düzenlerken vim'in düzenlenmiş dosyanın dizininde HERHANGİ BİR ekstra dosya oluşturmasını istemiyorum, çok teşekkür ederim. Bu amaçla, _vimrctakas dosyalarını devre dışı bırakmak ve rahatsız edici 'yedekleme' dosyalarını Temp dizinine taşımak için bu benim var :

" 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

9
Diğer editörlerin bununla uğraşmadığı gerçeği, diğer editörlere vi (m) üzerinde kötü yansıdığından daha kötü yansıtıyor. Aynı dizini bu dosyaları koymak için varsayılan yer yapma seçeneği, en azından marjinal olarak savunulabilir olsa da, biraz talihsizdir. (örneğin, çok bölmeli, yüksek oranda çapraz monte edilmiş bir ortamda, en acil ihtiyacınız olan anda bir kurtarma dosyasını nerede bulabileceğiniz açık olmayabilir)
Domingo Ignacio

3
Vim'in swapfile kullanımı çok korkunç. Kayıp verileri kurtarmak için belki 5 kez kullandım. Ama yaklaşık 9.000 kez bir swapfile kurtarmak zorunda kaldım, bu da yine de dosyayla her zaman aynı ya da daha eski bir sürümü. Kurtarma işlemi bu kadar korkunç bir şekilde emilmezse iyi bir özellik olabilir. recover.vim biraz yardımcı olur, ancak yine de çok etkileşimlidir.
joeytwiddle

3
Yüce Metin vardır disaster recovery. Onu seviyorum! Bir dosyayı kaydetmeme bile gerek yok, yaptığım, kaydettiğim veya kaydetmediğim değişiklikleri sürdürdüğümde geri çekiliyor.
leetNightshade

Tüm değişiklikleri yaptıkları anda yazan basit bir otomatik komutum var, hem swap dosyalarını hem de yedekleri işe yaramaz hale getiriyor.
tbodt

2
@ TorkelBjørnson-Langen Muhtemelen tüm Vim oturumlarımı kapatmadan makinemi yeniden başlatmak ve sonra hangi kurtarma dosyalarının gerçekten geçerli olduğu konusunda paranoyak olmak benim hatam. Her neyse, her iki dünyanın da en iyisini almaya çalıştım, sadece kaydedilmemiş düzenlemeler olduğunda bir takas
dosyasını

7

Takas dosyalarınızı tamamen devre dışı bırakmak için backupdir ve dizini null olarak ayarlayabilirsiniz, ancak genellikle bunları merkezi bir dizine koymanız önerilir. Vim isim soyadı ya da bunun gibi bir şey olmadığından emin olmaya çalışır; yani, bu tamamen güvenli bir alternatif:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/

3
//Aynı ada sahip iki dosyayı aynı anda değiştirebilmeniz için yolların sonuna çift ​​eğik çizgi eklemelisiniz .
Samuel O'Malley

Teşekkürler, @ SamuelO'Malley. // ne yapar?
monokrome

Bunun :help directoryiçin dokümanları okumak isteyip istemediğinize bakın . Çift eğik çizgi, vim'e dosyanın tam yolunu takas dosyasının adına kodlamasını, örneğin %home%sam%dotfiles%.gitignore.swpsadece kodlamasını söyler .gitignore.swp.
Samuel O'Malley

3

set directory=""Exrc dosyanızı koyarsanız , takas dosyasını kapatırsınız. Ancak, bu kurtarma işlemini devre dışı bırakır.

Daha fazla bilgi burada .


3

Eğer kullanıyorsanız git, ekleyebilir *.swpiçin .gitignore.


Bence çoğu kullanıcının ihtiyacı olan budur! Takas dosyalarının kapatılması kötü bir uygulamadır.
DenisKolodin

2

sadece belirli bir dosya için vim takas dosyası oluşturma

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile

1
Veya belirli bir dizindeki tüm dosyalar için aşağıdakiler işe yarıyor gibi görünüyor (sadece kısa test):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty

1

Bunu Rails projeleri için ayarlamaya çalışan herkes için şunu ekleyin:

set directory=tmp,/tmp

senin içine

~/.vimrc

Böylece .swp dosyaları doğal konumlarında olacaktır - tmp dizini (proje başına).

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.