Yapmış olabileceğim veya yapamayacağım değişiklikleri nasıl güvenle geri alabilirim?


12

Çok sık yanlış pencere odaklı yazarak hata yapıyorum (ve bir USB doğrulayıcı ile birkaç kez yaptım). Çok sayıda kısayol tuşunun etkin olduğu programlarda (Gmail, VLC, Vim), bunun genellikle istenmeyen değişiklikler yapmanın istenmeyen bir sonucu vardır.

Bazen adımlarımı izleyebilir ve herhangi bir değişikliği onarmak için yazdıklarımı hatırlayabilir veya kendimi erken yakalarsam ayarladığım ayarları geri alabilirim. Ne yazık ki, durum her zaman böyle değildir.

Vim'de, kolayca geri alınabilen bir metin satırını değiştirmek kadar zararsız ve açık bir şeye sahip olabilirdim. Ya da, kolayca tanımlanamayan bir şeyi bilmeden değiştirebilirdim. Yanlışlıkla Vim'e istenmeyen komutlar dizisi yazarsam, ayarlarda yapılan değişiklikleri veya değişiklikleri nasıl kontrol edebilir ve geri alabilirim?


1
Bir "geri döndürme" eylemi mi arıyorsunuz? :e!Bunu yapardı
Jasper

1
Bence :e!son doğru durumuna beri kaydetmediyseniz kötü olurdu ve usen şeyler bir grup yazdıysanız yetersiz olabilir. ( date monthÖrneğin, yazarsanız, bir etiketi silmiş, bir işaret ayarlamış ve geri almayı oldukça kafa karıştırıcı bir arama u
yapmış olursunuz

1
@WChargin Dizinin bir uparçası olmaktan bahsetmemek , ortada bazı geri alma işlemleri yapmak.
yo '

Yanıtlar:


14

Çağırmak

:undolist

en son değişikliklerin ne zaman yapıldığını görmek için. Birkaç değişiklik yapıldığını söylüyorsa, örneğin, "3 saniye önce" ve bunu kasıtlı olarak değiştirdiğinizi biliyorsanız, örneğin, bir dakika önce,

:earlier 10s

istenen duruma dönmek için. Aksi takdirde, yakın zamanda herhangi bir değişiklik yoksa hiçbir şey yapmanız gerekmez.


Daha fazla referans: :help undo-tree .


4

Soruyu yeniden ifade etmek için, bir dosyada yaptığınız değişiklikleri görmenin veya başka şekilde bildirim almanın ve sonra geri alma özelliğini kullanmanın bir yolunu arıyorsunuz. Bunu destekleyen başka bir yol veya hatta eklentiler olabilir. Ama aynı amaçla ne kullandığımı açıklayacağım.

Bunu yapmak için mevcut vim özelliğini birleştirirsiniz. Örneğin, aşağıdaki gibi bir işlev tanımlayabilirsiniz:

" Function: View changes after the last save
function! s:DiffSinceSave()
  let filetype=&ft
  diffthis
  vnew | r # | normal! 1Gdd
  diffthis
  exe "setlocal bt=nofile bh=wipe nobl noswf ro ft=" . filetype
  exe "normal! ]c"
endfunction
com! DiffSaved call s:DiffSinceSave()

Daha sonra daha sonra arayabilir ve hatta bir kısayol tuşunu eşleyebilirsiniz.

" Map key to function: View changes after the last save
nnoremap <leader>? :DiffSaved<CR>

Bu, son kayıttan bu yana yaptığınız değişiklikleri gösteren bölünmüş pencere tabanlı bir fark görünümü açacaktır. Yapılan değişiklikleri belirledikten sonra, bu görünümden çıkıp, ağacı geri al ve geri al vb. Gibi diğer vim özelliklerini veya hatta önceki durumlara geri dönmek için eklentileri kullanabilirsiniz.

Bunun ideal olmadığını anlıyorum çünkü bunun yararlı olması için belirli bir iş akışına sahip olmalısınız. Ancak bu oldukça iyi çalışıyor. Artı tarafta, vim'in çalışma şeklini değiştirmiyoruz veya dışarıdaki herhangi bir şeye güvenmiyoruz.

Umarım bunu faydalı bulursun. Bu çözümü bir süre önce vim Wikia da dahil olmak üzere internette bulunan parçacıklardan uyarladım. Bu yüzden herhangi bir kredi vadesi geldi.


3

Bana öyle geliyor ki, basit bir cevap usaklamak istediğiniz bir değişikliği geri alana kadar tuşuna basmaktır Ctrl-R.


0

@Superjer gibi, durum çizgimdeki ukırmızı [+]işaret kaybolana kadar baskı yapmaya devam ediyorum .

set statusline=%f\ %#Error#%m%##

Otomatik olarak son değiştirilmemiş duruma geri dönmek için bir anahtarınızın olması iyi olabilir. Ama :e!aynı zamanda güzel bir çözümdür; Bugünlerde Vim geri alma geçmişindeki "atılan" değişikliklerinizi bile koruyacak.
joeytwiddle

5
Bu komut :earlier 1f. 1fÖnceki zamana geri döner, böylece araç "1 önceki kaydedilmiş durum", dosyayı kurtardı. Arabellek değiştirilirse, tüm değişiklikler geri alınır. Arabellek değiştirilmediyse (yani, şu anda kaydedilmiş bir durumda), dosyayı önceki kaydettiğinizde gider.
jamessan
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.