Geri almayı nasıl kullanabilirim?


36

Vim.org'daki en son haber , geçmişinizi kurtarmak ve yeniden başlattıktan sonra bile değişiklikleri geri almak için 'geri al' seçeneğini kullanmaktan bahsediyor:

Kendimi kullanmaktan zevk aldığım bir özellik, geçen hafta sonu öğrendiğim gibi pek çok kullanıcı tarafından bilinmiyor. Vim, istediğiniz kadar seviye ile geri almanın yanı sıra, geri alma bilgilerini bir dosyada saklamayı da sağlar. Böylece Vim'den çıkabilir, bilgisayarınızı yeniden başlatabilir ve yaptığınız değişiklikleri geri alabilirsiniz. 'Geri al' yardımına bakın. (Bram Moolenaar)

Bu özelliği nasıl etkinleştirebilir ve kullanabilirim?


2
Bram muhtemelen bu olayla
Kurt Pfeifle

Yanıtlar:


37

En basit versiyon şudur: ~/.vim/undo-dir/dizin yaratın ve aşağıdakileri ekleyin .vimrc:

set undodir=~/.vim/undo-dir
set undofile

Ancak, kusursuz değil ve okumak için daha iyi. Benim kendimden .vimrc:

" Let's save undo info!
if !isdirectory($HOME."/.vim")
    call mkdir($HOME."/.vim", "", 0770)
endif
if !isdirectory($HOME."/.vim/undo-dir")
    call mkdir($HOME."/.vim/undo-dir", "", 0700)
endif
set undodir=~/.vim/undo-dir
set undofile

Geri alma dosyaları ile rasgele dizinleri karıştırmamayı tercih ederim. Bu yüzden undodirhepsini bir geri alma dizinine yerleştiren seçeneği ayarladım . Bu bir sorun yaratıyor - tembelim ve bu dizini tüm makinelerimde oluşturmak istemiyorum ( .vimrcbir sürü makinede senkronize etmek için sürüm kontrol sistemi kullanıyorum ). Neyse ki, Vim'in var olmadığı durumlarda dizinleri kontrol etmesi ve oluşturması kolay.

Ayrıca, 0700geri alma dizinindeki modu da not edin (bu, sahipler için tam izinler, kimsenin izni yok). Hangi dosyaları düzenlediğim, ne zaman vb. Özel kalmalı. Ve bu sadece erişebileceğim bir dizin olduğundan, oraya bir sembolik bağlantı ekleyen birinin, ya da kendi geri alma dosyasının ya da sistemin geçici bir dizinini kullanmak için endişelenmeniz gereken herhangi bir şey hakkında endişelenmek zorunda değilim.

Son olarak, sistem geçici dizini olmamak, sistem geçici dosyası temizleme politikasına tabi değildir. Genellikle, bu oldukça kısadır - bir hafta kadar. Ama sonsuza dek büyümesini engellemek için şunu yazdım crontab:

# m h  dom mon dow   command
 43 00 *   *   3     find /home/anthony/.vim/undo-dir -type f -mtime +90 -delete

Yani 90 gün değiştirilmeden sonra silinirler. (Dürüst olmak gerekirse, onlar gerçekten o kadar büyük değiller, onları ne kadar ucuz bir diskle kolayca sonsuza dek bırakabilirsiniz. Ancak, makinenizin zarar görmesi durumunda kendi gizliliğinizi de göz önünde bulundurun.)


Detaylı cevap @derobert için teşekkürler! Bunun eski bir soru olduğunu biliyorum, ancak eski vim geri alma dosyalarını silmenin bir vimscript yolu ile gelmeye çalışıyorum ( vi.stackexchange.com/questions/16053/… ). Bence bu şekilde yapmak daha temiz olurdu, ama kolay olmadığını kanıtladı. Eski vim dosyalarını silmek için bir vimscript kullanmayı hiç düşündünüz mü? Olmazsa, hala bir vimscript üzerinde crontab kullanır mısın?
Logan,

1
@Logan Bir vim komut dosyası kullanmak yalnızca vim çalışırken çalışır ve ayrıca çalışan birden fazla vims varsa ne olur? Bu cron çizgisi basittir, bu sorunlardan muzdarip değildir ve açıkça doğru ...
derobert

mkdir()İşlev, parametre "p"seçeneğiyle birden çok dizin yapısı oluşturmayı destekliyor gibi görünüyor {path}. Böylece yukarıdaki komut biraz basitleştirilebilir. call mkdir($HOME."/.vim/undo-dir", "p", 0700)Benim için en az 7.4.160 Vim'deki eserleri kullanmak .
Jdhao
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.