Іноді мій список буферів містить 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-!