【问题标题】:Show all open buffers in Emacs在 Emacs 中显示所有打开的缓冲区
【发布时间】:2012-08-29 21:22:47
【问题描述】:

在 emacs 中,是否有 M-x 命令或组合键可以将所有当前打开的缓冲区渲染到不同的窗口中? 为清楚起见,假设我有四个打开的缓冲区,而我目前只看到一个正在显示,我想一步一步将每个缓冲区显示在一个象限中。

【问题讨论】:

  • 4 个缓冲区?我的 Emacs 现在打开了 188 个缓冲区(尽管实际上只有 154 个正在访问文件)。
  • cjm 您是否将所有这些缓冲区拆分到屏幕的不同部分?
  • 显然不是,它们不适合。我一次只显示几个(通常只有 1 个)。
  • 有时我有大约 20 个缓冲区、一个终端、俄罗斯方块和其他打开的东西,但当我完成该项目时,我总是关闭它们。有时,我使用“C-x 3”和“C-x 2”将它们分开。顺便说一句,@cjm,更多的缓冲区将使用更多的 RAM,对吧?
  • @user996056:更多内存?取决于缓冲区的大小。我现在的 Emacs 进程是 59MB,是目前打开的第二大应用程序,但几乎没有问题。

标签: emacs elisp emacs23


【解决方案1】:

我推荐 ibuffer。 M-x ibuffer 可能是你想要的。这是我的 ibuffer 配置:

;; *Messages* is so annoying. Also, I really like ibuffer
(require 'ibuf-ext)
(add-to-list 'ibuffer-never-show-predicates "^\\*Messages")
(add-to-list 'ibuffer-never-show-predicates "^\\*Completions")
(global-set-key (kbd "C-b") 'ibuffer)
(kill-buffer "*scratch*")
('ibuffer)
(switch-to-buffer "*Ibuffer*")

【讨论】:

  • 感谢 user996056,我不知道 ibuffer,这个配置很好!
【解决方案2】:

如果没有已知的方法,您可以从以下代码开始:

(defun buffer-in-window-list ()
  (let (buffers)
    (walk-windows (lambda (window) (push (window-buffer window) buffers)) t t)
    buffers))

(defun display-all-buffers ()
  (interactive)
  (let (buffers-in-window (buffer-in-window-list))
    (dolist (buffer (buffer-list))
      (when (and (not (string-match "\\`[[:space:]]*\\*" (buffer-name buffer)))
                 (not (memq buffer buffers-in-window)))
        (set-window-buffer (split-window (get-largest-window)) buffer)))
    (balance-windows)))

display-all-buffers 命令为当前未在任何地方显示的每个缓冲区(包括其他帧)打开一个新窗口。出于可用性考虑,它会忽略名称以 * 开头的缓冲区(可选地,以空格字符为前缀),因为它们通常仅供内部使用。

请注意,Emacs 不允许用户制作太小的窗口。因此,当要显示的缓冲区过多时,该命令将按照最近显示或选择的顺序显示尽可能多的缓冲区并发出错误信号。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 2014-10-17
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多