Иногда в моем списке буферов более 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-!