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 magit
có 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 checkout
mộ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
, ..., Bn
một lỗi trong khi cố gắng để trở lại B2
ngăn chặn B3
- Bn
khô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-mode
vì 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.
B2
bộ đệ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.