Как закрыть все, кроме текущего буфера в Emacs? Аналогично функции "Закрыть другие вкладки" в современных веб-браузерах?
Закройте все буферы, кроме текущего в Emacs
Ответ 1
Из EmacsWiki: Killing Buffers:
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer
(delq (current-buffer)
(remove-if-not 'buffer-file-name (buffer-list)))))
Изменить: обновлено с обратной связью от Gilles
Ответ 2
Для более ручного подхода вы можете перечислить все буферы с помощью C-x C-b, отметьте буферы в списке для удаления с помощью d, а затем используйте x, чтобы удалить их.
Я также рекомендую заменить list-buffers более продвинутым ibuffer: (global-set-key (kbd "C-x C-b") 'ibuffer)
. Вышеупомянутое будет работать с ibuffer, но вы также можете это сделать:
m (отметьте буфер, который вы хотите сохранить)
t (метки переключения)
d (убить все отмеченные буферы)
Я также использую этот фрагмент из Emacs Wiki, который еще более упростит этот ручной подход:
;; Ensure ibuffer opens with point at the current buffer entry.
(defadvice ibuffer
(around ibuffer-point-to-most-recent) ()
"Open ibuffer with cursor pointed to most recent buffer name."
(let ((recent-buffer-name (buffer-name)))
ad-do-it
(ibuffer-jump-to-buffer recent-buffer-name)))
(ad-activate 'ibuffer)
Ответ 3
В emacs нет прямого способа сделать это.
Вы можете написать функцию для этого. Следующее закроет все буферы:
(defun close-all-buffers () (interactive) (mapc 'kill-buffer (buffer-list)))
Ответ 4
Существует встроенная команда m - x kill-some-buffers
(я использую 24.3.50). В моей следующей строке gui (не пробовал в терминале, но уверен, что это похоже) вы можете затем утвердить, какие буферы для убить.
Ответ 5
(defun only-current-buffer ()
(interactive)
(let ((tobe-killed (cdr (buffer-list (current-buffer)))))
(while tobe-killed
(kill-buffer (car tobe-killed))
(setq tobe-killed (cdr tobe-killed)))))
Он работает так, как вы ожидали.
И после прочтения ответа @Starkey, я думаю, что это будет лучше:
(defun only-current-buffer ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))
(buffer-list (current-buffer)) возвращает список, содержащий все существующие буферы, с текущим буфером в начале списка.
Это мой первый ответ на StackOverflow. Надеюсь, это поможет:)
Ответ 6
Я нашел, что это решение является самым простым. Это удаляет каждый буфер, кроме текущего. Вы должны добавить этот код в свой .emacs
файл
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
Конечно, тогда вы используете его с M-x kill-other-buffers
RET или, и вы вставляете следующий код в файл .emacs
, а затем просто нажмите C-x C-b
(global-set-key (kbd "C-x C-b") 'kill-other-buffers)