closuresEmacs中的所有其他缓冲区

如何closuresEmacs中的所有当前缓冲区? 类似于现代networking浏览器中的“closures其他标签”function?

对于更为手动的方法,可以使用Cx Cb列出所有缓冲区,将列表中的缓冲区标记为d ,然后使用x删除它们。

我还build议用更高级的ibufferreplace列表缓冲区: (global-set-key (kbd "Cx Cb") '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) 

来自EmacsWiki:杀戮缓冲区 :

 (defun kill-other-buffers () "Kill all other buffers." (interactive) (mapc 'kill-buffer (delq (current-buffer) (remove-if-not 'buffer-file-name (buffer-list))))) 

编辑 :更新来自Gilles的反馈

在emacs中没有办法直接做到这一点。

你可以写一个函数来做到这一点。 以下将closures所有的缓冲区:

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

有一个内置的命令m -x kill-some-buffers (我使用的是24.3.50)在我的nextstep gui(没有在terminal上试过,但是确定它是类似的),你可以批准哪些缓冲区被杀死。

  (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上的第一个答案。 希望能帮助到你 :)

我发现这个解决scheme是最简单的。 这将删除除当前缓冲区之外的每个缓冲区。 您必须将此代码添加到.emacs文件

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

当然,然后你用Mx kill-other-buffers RET来使用它, 或者把以下代码粘贴到.emacs文件中,然后按下Cx Cb

 (global-set-key (kbd "Cx Cb") 'kill-other-buffers)