Đôi khi danh sách bộ đệm của tôi có hơn 10 cửa sổ được điều hướng và cuối cùng tôi sử dụng buffer-menu
để đánh dấu thủ công và tiêu diệt tất cả chúng. Có cách nào nhanh hơn để đóng tất cả các cửa sổ đã mở?
Đôi khi danh sách bộ đệm của tôi có hơn 10 cửa sổ được điều hướng và cuối cùng tôi sử dụng buffer-menu
để đánh dấu thủ công và tiêu diệt tất cả chúng. Có cách nào nhanh hơn để đóng tất cả các cửa sổ đã mở?
Câu trả lời:
Bạn có thể làm như sau:
M-x
ibuffer
* /
để đánh dấu bộ đệm trong chế độ dired.
D
để xóa chúng.
C-x C-b
tới ibuffer
.
t
( dired-toggle-marks
) để đánh dấu tất cả (nếu không được đánh dấu trước đó).
dired-toggle-marks
là tên của lệnh dired . Nhấn t
cũng sẽ chuyển tất cả các dấu trong ibuffer, nhưng các bộ đệm không được chuyển hướng thường vượt trội hơn các bộ đệm được chuyển hướng, do đó, việc bật tắt thường không có ý nghĩa trong bối cảnh này.
Thay vì thêm một chức năng khác để tiêu diệt tất cả các dired
bộ đệm, tôi khuyên bạn nên tận dụng các nhóm bộ lọc ibuffer
, nó cho phép bạn nhóm bộ đệm theo nhiều điều kiện.
Dưới đây là một ví dụ để đặt các nhóm bộ lọc:
(setq-default ibuffer-saved-filter-groups
`(("Default"
;; I create a group call Dired, which contains all buffer in dired-mode
("Dired" (mode . dired-mode))
("Temporary" (name . "\*.*\*"))
)))
Sau đó C-x C-b
mở ibuffer
cửa sổ, bạn có thể thấy một cái gì đó như thế này:
Di chuyển con trỏ đến [ Dired ]
(với M-p
, M-n
), sau đó nhấn d
để đánh dấu là xóa
sau đó nhấn x
để thực thi.
Tôi thích cách này vì tôi không cần phải suy nghĩ về cách tôi nên liên kết khóa của mình với chức năng mới và bộ đệm của tôi được tổ chức tốt hơn.
ibuffer
sau khi đánh giá mã của bạn. Tôi đã phải đánh / R
(ràng buộc ibuffer-switch-to-saved-filter-groups
) để có được các nhóm.
(ibuffer-switch-to-saved-filter-groups "Default")
Bạn có thể thêm dòng mã này vào móc ibuffer, nên thay đổi tên nhóm bộ lọc nếu khôngDefault
Bạn có nhiều bộ đệm Dired bởi vì bạn muốn tất cả chúng tại một thời điểm? IOW, bạn có muốn tạo mỗi người trong số họ như một bộ đệm riêng biệt không?
Nếu không, giải pháp rất đơn giản: bảo Dired sử dụng lại bộ đệm Dired hiện có khi bạn nhấn RET
một tên thư mục để mở nó trong Dired.
Đây là cách để làm điều đó:
Tải thư viện Dired + ( dired+.el
):
(require 'dired+)
Nói với Dired để sử dụng lại bộ đệm Dired:
(diredp-toggle-find-file-reuse-dir 1)
Hiệu quả là khi bạn nhấn RET
(hoặc nhấp chuột) vào một thư mục trong Dired, find-alternate-file
được sử dụng, do đó, bộ đệm Dired ban đầu được thay thế (xóa) bởi cái mới.
Bạn có thể chuyển đổi hành vi này bất cứ lúc nào, sử dụng C-M-R
(aka C-M-S-r
) trong Dired.
Một cái gì đó như thế này (cuộn một chút)?
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
Bạn cũng có thể sử dụng helm-mini
:
M-x helm-mini
.*Di
(một phần từ cho Dired
, không cần nhập thêm). Khi bạn gõ, bộ đệm được thu hẹp dần dần. Bây giờ, chỉ Dired
còn lại bộ đệm. Nhấn M-a
để đánh dấu tất cả.TAB
để chuyển sang menu hành động và nhấn K
để chọn hành động Kill buffer(s)
.RET
để thực hiện hành động.Điều tốt helm-mini
là nó có thể thay thế Emac thông thường C-x b
, vì vậy bạn sẽ không phải sử dụng hai ràng buộc chính, một để chuyển đổi bộ đệm và một cho trình quản lý bộ đệm thực tế. helm-mini
là tất cả trong một. Đọc thêm trong hướng dẫn helm-mini của tôi .
helm-mini
cũng có thể mờ bộ đệm khớp và cho phép mở nhiều bộ đệm bằng cách đánh dấu bằng C-SPC
hoặc M-a
(viết tắt của M ark a ll). Bạn cũng có thể thu hẹp để bộ đệm chứa chuỗi nhất định bằng cách nối thêm @
trước một mẫu, ví dụ, @test
có nghĩa là chỉ chọn bộ đệm chứa chuỗi "kiểm tra".
Tôi sẽ thử một cái gì đó như thế này:
(require 'dash)
(defun my-kill-dired-buffers ()
(interactive)
(kill-some-buffers
(-filter (lambda (buffer)
(save-excursion
(set-buffer buffer)
(eq major-mode 'dired-mode)))
(buffer-list))))
-filter
yêu cầu dash.el
từ MELPA. Bạn có lẽ nên liệt kê đó là một yêu cầu.
Những gì bạn thực sự có thể đang tìm kiếm là một cách để tự động dọn sạch bộ đệm không mong muốn, trong trường hợp đó bạn nên kiểm tra midnight.el
, đó là một phần của Emacs.
Nhưng nói chung, ibuffer
làm cho nó rất dễ dàng để hoạt động trên bộ đệm với số lượng lớn, như Francisco đề xuất.
Nếu bạn sử dụng Icicles , thì bạn có thể sử dụng C-x k
để tiêu diệt tất cả các bộ đệm Dired - hoặc tất cả các bộ đệm trong bất kỳ chế độ nào.
Sau khi nhấn C-x k
, sử dụng C-x M +
để chỉ giữ các bộ đệm với một chế độ nhất định. Nhấn TAB
để xem các chế độ và chọn dired-mode
. Sau đó sử dụng C-!
để giết tất cả các bộ đệm với chế độ đó.
C-x k C-x M + dired-mode C-!