Git ile sürüm kontrolü altında bir proje üzerinde çalışırken, genellikle açık dosyalarımın çoğunu etkileyen bir kabukta bazı şeyler yapmak, ardından yanlışlıkla yeni sürümü tıkamadığımdan emin olmak için açık olan her arabelleği geri almak istiyorum ne varsa açtım. magit
Burada yardımcı olabileceğini biliyorum , ama kabuğumdaki iş akışına alışkınım ve şimdilik saklamak istiyorum. Bunun yerine, tüm açık arabellekleri geri almak istiyorum ve belki de mevcut olanı durdurabilenleri kapatmak istiyorum (örneğin, git checkout
artık bu dosyaya sahip olmayan bir dal nedeniyle ).
Bir Google aramasından yakaladığım aşağıdaki elisp snippet'im var:
(defun revert-all-buffers ()
"Refreshes all open buffers from their respective files"
(interactive)
(let* ((list (buffer-list))
(buffer (car list)))
(while buffer
(when (and (buffer-file-name buffer)
(not (buffer-modified-p buffer)))
(set-buffer buffer)
(revert-buffer t t t))
(setq list (cdr list))
(setq buffer (car list))))
(message "Refreshed open files"))
Ama bu araları geri alırken yani benim açık dosyalardan birinin, bir hataya vurursa B1
, B2
, B3
, ..., Bn
geri dönmek için çalışılırken bir hata B2
önler B3
- Bn
dan döndürüldü ediliyor.
Emacs'a bu durumda ortaya çıkan hataları yoksaymasını nasıl söyleyebilirim? global-auto-revert-mode
Kullanmak istemiyorum çünkü her geri alma, otomatik tamamlama ve sözdizimi denetleyicim gibi dosyayı yeniden ayrıştırarak, emac'leri bir saniye kadar asılı bırakarak bazı ağır iş öğelerini tetikler.
C-x s
"file no longer exists"
.. aha! benim sürüm bunu düzeltir :) Kısa süre içinde gönderir.
B2
, örneğin tamponun geri alınmasını engeller . Çok benzer bir işlev kullanıyorum (büyük olasılıkla bu snippet'ten türetilmiştir) ve iyi çalıştı.