जब गिट के साथ संस्करण नियंत्रण में एक परियोजना पर काम कर रहा हूं, तो मैं अक्सर शेल में कुछ चीजें करना चाहता हूं जो मेरी कई खुली फाइलों को प्रभावित करते हैं, फिर हर बफर को वापस करते हैं जो मुझे यह सुनिश्चित करने के लिए खुला है कि मैं गलती से नया संस्करण नहीं खोल रहा हूं मेरे पास जो कुछ भी खुला था। मुझे पता है कि magit
यहाँ उपयोगी हो सकता है, लेकिन मैं अपने वर्कफ़्लो का उपयोग शेल में कर रहा हूँ और मैं इसे अभी के लिए रखना चाहूँगा। इसलिए इसके बजाय, मैं सभी खुले बफ़र्स को वापस करना चाहूंगा, और शायद किसी भी बंद को बंद कर दूं (जैसे कि git checkout
एक शाखा के कारण जो अब उस फ़ाइल में नहीं है)।
मेरे पास निम्नलिखित ऐसपीट है जो मैंने Google खोज से लिए हैं:
(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"))
लेकिन इस टूट जाता है, तो यह मेरे खुली फ़ाइलों में से एक, यानी जब वापस लाने में में एक त्रुटि हिट B1
, B2
, B3
, ..., Bn
वापस लौटने की कोशिश करते समय त्रुटि B2
रोकता है B3
- Bn
से वापस लाया गया जा रहा है।
इस मामले में पॉप अप करने वाली किसी भी त्रुटि को अनदेखा करने के लिए मैं एमएसीएस को कैसे बता सकता हूं? मैं उपयोग नहीं करना चाहता global-auto-revert-mode
क्योंकि प्रत्येक रिवर्ट कुछ भारी शुल्क सामान जैसे मेरे ऑटो-पूर्ण और सिंटैक्स चेकर फ़ाइल को फिर से पार्स करता है, एक या दूसरे के लिए emacs लटकाता है।
C-x s
"file no longer exists"
.. अहा! मेरा संस्करण ठीक करता है कि :) जल्द ही इसे पोस्ट करूंगा।
B2
बफर को आपके उदाहरण में बदलने से रोकती है । मैं एक बहुत ही समान फ़ंक्शन (इस स्निपेट से प्राप्त होने की संभावना) का उपयोग करता हूं और इसने ठीक काम किया है।