1

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

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

Это Emacs 24.4 / Aquamacs 3.2.

2 ответа2

3

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

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

РЕДАКТИРОВАТЬ: Как предложено @Drew в комментарии ниже, как правило, это хорошая идея, чтобы сохранить внутренние буферы, которые имеют начальный пробел в своих именах. Строка документа содержит объяснение того, как работает эта функция. Сочетание клавиш клавиши 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)
2

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

В 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))))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .