Іноді мій список буферів містить 10+ вікон, і я в кінцевому підсумку використовую buffer-menuдля вручну позначення та вбивство всіх. Чи є більш швидкий спосіб закрити всі відкриті вікна?
Іноді мій список буферів містить 10+ вікон, і я в кінцевому підсумку використовую buffer-menuдля вручну позначення та вбивство всіх. Чи є більш швидкий спосіб закрити всі відкриті вікна?
Відповіді:
Ви можете зробити наступне:
M-x ibuffer
* / щоб позначити буфери в перенесеному режимі.
D щоб видалити їх.
C-x C-bна карту ibuffer.
t( dired-toggle-marks), щоб позначити всі (якщо раніше жодного не було позначено).
dired-toggle-marks- це назва переведеної команди. Натискання tтакож перемикає всі позначки в ibuffer, але нерозроблені буфери зазвичай перевищують набрані буфери, тому перемикання часто не має сенсу в цьому контексті.
Замість того, щоб додати ще одну функцію, щоб знищити всі diredбуфери, я пропоную вам скористатися групами фільтрів ibuffer, вона дозволяє групувати буфер за багатьма умовами.
Ось приклад для встановлення груп фільтрів:
(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 . "\*.*\*"))
)))
Потім C-x C-bвідкрийте ibufferвікно, ви побачите щось подібне:

Перемістіть курсор до [ Dired ](з M-p, M-n), а потім натисніть, dщоб позначити як видалити

потім натисніть xдля виконання.
Я вважаю за краще цей спосіб, тому що мені не потрібно думати про те, як я повинен прив’язати свій ключ до нової функції, а мої буфери краще організовані.
ibufferпісля оцінки вашого коду. Мені довелося вдарити / R(зв'язано ibuffer-switch-to-saved-filter-groups), щоб отримати групи.
(ibuffer-switch-to-saved-filter-groups "Default")Ви можете додати цей рядок коду в гачок ibuffer, назву груп фільтрів слід змінити, якщо це не такDefault
Чи є у вас багато в'ялених буферів, тому що ви хотіли їх усіх в один момент? IOW, ви хотіли створити кожен з них як окремі буфери?
Якщо ні, рішення просте: скажіть Dired повторно використовувати існуючий буфер Dired, коли ви натиснете RETім'я каталогу, щоб відкрити його в Dired.
Ось як це зробити:
Завантажити бібліотеку Dired + ( dired+.el):
(require 'dired+)
Скажіть Dired повторно використовувати подвійні буфери:
(diredp-toggle-find-file-reuse-dir 1)
Ефект полягає в тому, що коли ви натискаєте RET(або клацаєте мишкою) на каталозі в Dired, find-alternate-fileвикористовується, тому оригінальний буфер Dired замінюється (видаляється) на новий.
Ви можете переключити цю поведінку в будь-який час, використовуючи C-M-R(ака C-M-S-r) в Dired.
Щось подібне (прокрутити трохи)?
(defun kill-dired-buffers ()
(interactive)
(mapc (lambda (buffer)
(when (eq 'dired-mode (buffer-local-value 'major-mode buffer))
(kill-buffer buffer)))
(buffer-list)))
Ви також можете використовувати helm-mini:
M-x helm-mini.*Di(часткове слово для Dired, більше не потрібно вводити). Під час введення буфери поступово звужуються. Тепер Diredзалишився лише буфер. Натисніть, M-aщоб позначити всіх.TABщоб перейти до меню дій, і натисніть, Kщоб вибрати дію Kill buffer(s).RETщоб виконати дію.Хороша річ у helm-miniтому, що він може замінити звичайний Emacs C-x b, тому вам не доведеться використовувати дві прив’язки клавіш, одну для перемикання буфера і одну для фактичного менеджера буфера. helm-miniвсе-в-одному. Детальніше читайте в моєму посібнику "Шлем-міні" .
helm-miniтакож може нечіткий буфер відповідності та дозволяє відкрити кілька буферів, позначивши їх C-SPCабо M-a(стояти за M ark a ll). Ви також можете звузити, щоб буфер містив певну рядок, додавши @перед шаблоном, наприклад, @testозначає, що виберіть лише буфери, що містять рядок "тест".
Я б спробував щось подібне:
(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вимагає dash.elвід MELPA. Вам, мабуть, слід перерахувати це як вимогу.
Якщо ви використовуєте Icicles , то ви можете використовувати C-x kдля знищення всіх Dired буферів або всіх буферів у будь-якому режимі.
Після натискання C-x kвикористовуйте C-x M +для збереження лише буферів у певному режимі. Натисніть, TABщоб переглянути режими, і виберіть dired-mode. Потім використовуйте C-!для знищення всіх буферів у цьому режимі.
C-x k C-x M + dired-mode C-!