phi*_*ils 94
对于更加手动的方法,您可以列出所有缓冲区C-x C-b,在列表中标记缓冲区以进行删除d,然后使用x删除它们.
我还建议用更高级的ibuffer替换list-buffers : (global-set-key (kbd "C-x C-b") 'ibuffer). 以上将适用于ibuffer,但您也可以这样做:
m(标记要保留的缓冲区)
t(切换标记)
D(终止所有标记的缓冲区)
我还使用了Emacs Wiki中的这个片段,这将进一步简化这种手动方法:
;; Ensure ibuffer opens with point at the current buffer's 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)
Run Code Online (Sandbox Code Playgroud)
Rei*_*ica 50
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer
(delq (current-buffer)
(remove-if-not 'buffer-file-name (buffer-list)))))
Run Code Online (Sandbox Code Playgroud)
编辑:根据Gilles的反馈进行更新
Sta*_*key 21
直接在emacs中没有办法做到这一点.
您可以编写一个函数来执行此操作.以下将关闭所有缓冲区:
(defun close-all-buffers () (interactive) (mapc 'kill-buffer (buffer-list)))
pja*_*mer 13
有一个内置命令m- x kill-some-buffers(我正在使用24.3.50)在我的nextstep gui(未在终端尝试但确定它类似)你可以批准杀死哪些缓冲区.
wen*_*yan 10
(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)))))
Run Code Online (Sandbox Code Playgroud)
它按预期工作.
阅读@ Starkey的回答后,我认为这会更好:
(defun only-current-buffer ()
(interactive)
(mapc 'kill-buffer (cdr (buffer-list (current-buffer)))))
Run Code Online (Sandbox Code Playgroud)
(buffer-list(current-buffer))将返回一个包含所有现有缓冲区的列表,当前缓冲区位于列表的开头.
这是我在StackOverflow上的第一个答案.希望能帮助到你 :)
我发现这个解决方案是最简单的。这将删除除当前缓冲区之外的所有缓冲区。您必须将此代码添加到您的.emacs文件中
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
Run Code Online (Sandbox Code Playgroud)
当然,然后您使用它M-x kill-other-buffers RET 或者您也将以下代码粘贴到.emacs文件中,然后只需按C-xC-b
(global-set-key (kbd "C-x C-b") 'kill-other-buffers)
Run Code Online (Sandbox Code Playgroud)