Иногда в моем списке буферов более 10 окон с задержкой, и в итоге я использую, buffer-menuчтобы вручную пометить и убить их все. Есть ли более быстрый способ закрыть все открытые окна?
Иногда в моем списке буферов более 10 окон с задержкой, и в итоге я использую, buffer-menuчтобы вручную пометить и убить их все. Есть ли более быстрый способ закрыть все открытые окна?
Ответы:
Вы можете сделать следующее:
M-x ibuffer
* / отмечать буферы в режиме Dired.
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
У вас есть много буферов Dired, потому что вы хотели их всех в один момент? Итак, вы хотели создать каждый из них как отдельные буферы?
Если нет, решение простое: скажите Dired повторно использовать существующий буфер Dired, когда вы нажмете RETимя каталога, чтобы открыть его в Dired.
Вот как это сделать:
Загрузить библиотеку Dired + ( dired+.el):
(require 'dired+)
Скажите Dired, чтобы повторно использовать Dired буферы:
(diredp-toggle-find-file-reuse-dir 1)
В результате, когда вы RETнажимаете (или щелкаете мышью) каталог в Dired, find-alternate-fileиспользуется, поэтому оригинальный буфер Dired заменяется (удаляется) новым.
Вы можете переключать это поведение в любое время, используя C-M-R(aka 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означает, что выбранные только буферы содержат строку «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-!