Khi làm việc với một dự án dưới sự kiểm soát phiên bản với git, tôi thường muốn thực hiện một số thứ trong trình bao có ảnh hưởng đến nhiều tệp đang mở của mình, sau đó hoàn nguyên mọi bộ đệm mà tôi đã mở để đảm bảo rằng tôi không vô tình làm tắc phiên bản mới với bất cứ điều gì tôi đã mở. Tôi biết magitcó thể hữu ích ở đây, nhưng tôi đã quen với quy trình làm việc của mình trong vỏ và tôi muốn giữ nó ngay bây giờ. Vì vậy, thay vào đó, tôi muốn hoàn nguyên tất cả các bộ đệm đang mở và có thể đóng bất kỳ bộ đệm nào đã ngừng tồn tại (ví dụ: do git checkoutmột nhánh không còn có tệp đó).
Tôi có đoạn trích sau đây mà tôi đã lấy từ một tìm kiếm 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"))
Nhưng phá vỡ này nếu nó chạm một lỗi trong một file mở của tôi, tức là khi quay trở lại B1, B2, B3, ..., Bnmột lỗi trong khi cố gắng để trở lại B2ngăn chặn B3- Bnkhông bị quay trở.
Làm thế nào tôi có thể nói với emacs để bỏ qua bất kỳ lỗi nào bật lên trong trường hợp này? Tôi không muốn sử dụng global-auto-revert-modevì mỗi lần hoàn nguyên kích hoạt một số nội dung nặng như tự động hoàn thành và trình kiểm tra cú pháp của tôi phân tích lại tệp, treo emacs trong một giây hoặc lâu hơn.
C-x s
"file no longer exists".. aha! phiên bản của tôi sửa nó :) Sẽ đăng nó trong thời gian ngắn.
B2bộ đệm trong ví dụ của bạn. Tôi sử dụng một chức năng rất giống nhau (rất có thể xuất phát từ đoạn trích này) và nó đã hoạt động tốt.