Как закрыть все буферы в Emacs?

Я часто оставляю Emacs (на самом деле Aquamacs) открытым и заканчиваю с большим количеством буферов, загромождающих мое автозаполнение. Я хотел бы иметь возможность закрыть их все и начать все заново. Сейчас я увольняюсь и открыть в Emacs, но это неправильно.

есть ли способ закрыть все буферы в Emacs?

Это Emacs 24.4 / Aquamacs 3.2.

7
задан Schwern
06.05.2023 14:12 Количество просмотров материала 3216
Распечатать страницу

2 ответа

следующая функция была написана username Starkey на stackoverflow в связи с этим вопрос: https://stackoverflow.com/a/3417472/2112489

(defun close-all-buffers ()
(interactive)
  (mapc 'kill-buffer (buffer-list)))

EDIT: как было предложено @Drew в комментарии ниже, обычно рекомендуется сохранить внутренние буферы, которые имеют начальное пространство в их именах. Строка doc содержит объяснение того, как работает эта функция. Сочетание клавиш F5 ключ это просто пример для тестирования функции в сочетании с универсальным аргументом.

(defun custom-kill-buffer-fn (&optional arg)
"When called with a prefix argument -- i.e., C-u -- kill all interesting
buffers -- i.e., all buffers without a leading space in the buffer-name.
When called without a prefix argument, kill just the current buffer
-- i.e., interesting or uninteresting."
(interactive "P")
  (cond
    ((and (consp arg) (equal arg '(4)))
      (mapc
        (lambda (x)
          (let ((name (buffer-name x)))
            (unless (eq ?\s (aref name 0))
              (kill-buffer x))))
        (buffer-list)))
    (t
      (kill-buffer (current-buffer)))))

(global-set-key [f5] 'custom-kill-buffer-fn)
3
отвечен lawlist 2023-05-07 22:00

мне кажется, что ваша главная проблема заключается во многих старых буферах, которые вы, вероятно, не вели в течение некоторого времени.

в emacs есть команда clean-buffer-list. По умолчанию он очищает буферы, которые не были доступны в течение 3 дней (или 1 часа, в случае некоторых специальных буферов). Конечно, вы можете настроить время. Также посмотрите на midnight-mode, что делает это автоматически в определенное время.

Если вы не хотите, чтобы убить все буферы, кроме одного вы в настоящее время используется:

(defun kill-other-buffers ()
  "Kill all other buffers."
  (interactive)
  (mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
2
отвечен Christian Herenz 2023-05-08 00:17

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх