Ketika mengerjakan proyek di bawah kontrol versi dengan git, saya sering ingin melakukan beberapa hal dalam shell yang memengaruhi banyak file terbuka saya, lalu kembalikan setiap buffer yang saya buka untuk memastikan bahwa saya tidak secara tidak sengaja merusak versi baru dengan apa pun yang saya buka. Saya tahu magitbisa membantu di sini, tapi saya terbiasa dengan alur kerja saya di shell dan saya ingin menyimpannya untuk saat ini. Jadi sebagai gantinya, saya ingin mengembalikan semua buffer yang terbuka, dan mungkin menutup semua yang sudah berhenti ada (misalnya karena git checkoutcabang yang tidak lagi memiliki file itu).
Saya memiliki cuplikan elisp berikut yang saya ambil dari pencarian 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"))
Tapi istirahat ini jika hits kesalahan dalam salah satu file yang terbuka saya, yaitu ketika mengembalikan B1, B2, B3, ..., Bnkesalahan saat mencoba untuk kembali B2mencegah B3- Bndari yang dikembalikan.
Bagaimana saya bisa memberitahu emacs untuk mengabaikan kesalahan yang muncul dalam kasus ini? Saya tidak ingin menggunakan global-auto-revert-modekarena setiap pengembalian memicu beberapa tugas berat seperti auto-complete dan sintaks pemeriksa ulang mengurai file, menggantung emacs selama satu detik atau lebih.
C-x s
"file no longer exists".. aha! versi saya memperbaiki itu :) Akan mempostingnya segera.
B2buffer pada contoh Anda. Saya menggunakan fungsi yang sangat mirip (kemungkinan besar berasal dari cuplikan ini) dan telah berfungsi dengan baik.