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

1969
Schwern

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

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

Это Emacs 24.4 / Aquamacs 3.2.

1
`(defun close-all-buffers () (интерактивный) (mapc 'kill-buffer (buffer-list)))` - http://stackoverflow.com/a/3417472/2112489 lawlist 9 лет назад 0
@lawlist Спасибо! Вы должны опубликовать это как ответ здесь, чтобы оно было доступно под правильным названием вопроса, которое будет найдено другими. Schwern 9 лет назад 0
Вы также можете проверить `clean-buffer-list`, который закроет все буферы, которые не использовались в течение некоторого времени. Juancho 9 лет назад 1

2 ответа на вопрос

3
lawlist

The following function was written by username Starkey on stackoverflow in a related question: https://stackoverflow.com/a/3417472/2112489

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

EDIT:  As suggested by @Drew in the comment below, it is generally a good idea to keep internal buffers that have a leading space in their names. The doc-string provides an explanation of how this function works. The keyboard shortcut of the F5 key is just an example for the purposes of testing the function in conjunction with a universal argument.

(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) 
Если вы сделаете это, то можете закрыть Emacs и перезапустить его. ;-) Маловероятно, что вы хотите убить *** все *** буферы. Это включает в себя «внутренние» буферы, которые Emacs ожидает от них. Вы можете сделать это, но я сомневаюсь, что это то, что вы действительно хотите сделать. Я бы посоветовал убить все буферы, имена которых не начинаются с пробела, для начала. Drew 9 лет назад 0
@Drew - Это отличная идея, и это дало бы мне повод включить мою идею, которая представляет собой функцию kill-buffer, которая принимает универсальный аргумент - то есть стандартное уничтожение текущего буфера или уничтожение их всех у которого нет ведущего места. Я добавлю новую функцию в свой список дел. lawlist 9 лет назад 0
2
Christian Herenz

It seems to me, that your main problem are to many old buffers, that you probably have not visted for some time.

In emacs there is a command clean-buffer-list. By default it cleans buffers that have not been accessed for 3 days (or 1 hour, in the case of some special buffers). Of course, you can customize the time. Also have a look at midnight-mode, which does this automatically at some specified time.

If you wan't to kill all buffers, except the one you are currently using:

(defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (buffer-list)))) 

Похожие вопросы