emacs 列表缓冲区行为

Posted

技术标签:

【中文标题】emacs 列表缓冲区行为【英文标题】:emacs list-buffers behavior 【发布时间】:2010-11-16 21:37:47 【问题描述】:

在 GNU emacs 中,每次我按 Ctrl-x Ctrl-b 来查看我的所有缓冲区时,窗口都会被拆分以显示缓冲区列表,或者如果我的窗口已经拆分2(例如,我将在下方窗口中运行一个shell),缓冲区列表出现在另一个窗口中。

我想要的行为是让缓冲区列表出现在我的活动窗口中,这样我就可以选择我想要的缓冲区并继续在同一个窗口中工作,而不必Ctrl-x Ctrl-o kbd> 到另一个缓冲区,选择缓冲区(使用 enter)并在另一个窗口中编辑该缓冲区......我已经搜索过它,但它似乎不是一个共同的愿望?我想知道是否有人有 elispy(或其他)解决方案?

【问题讨论】:

【参考方案1】:

您可能希望重新绑定 C-x C-b 以调用 buffer-menu 而不是 list-buffers

(global-set-key "\C-x\C-b" 'buffer-menu)

【讨论】:

我想知道有没有办法可以用1、2、...或a、b、c...等快捷键更快地打开一个缓冲区,我知道ac -jump-buffer 可以,但是它的缓冲区列表太简单了,没有缓冲区菜单中的模式、大小列等额外信息。如果你解决了这个问题,那将不胜感激。 @zimbu668【参考方案2】:

只需自定义变量same-window-regexpsdisplay-buffer 将在当前选定的窗口中显示名称与正则表达式匹配的任何缓冲区。

(您需要添加“[*]Buffer List”。)

【讨论】:

这是最好的答案,因为它涉及到真正的问题(修改显示缓冲区的行为),而不是提供解决方法。【参考方案3】:

不完全是一个解决方案,但ido-mode 提供了一种不同且强大的与缓冲区交互的方式。然后C-x b 将显示所有打开缓冲区的列表,您选择的缓冲区将在当前窗口中打开。

【讨论】:

我想知道你为什么被否决...总是很高兴知道我有选择! 如果您回来查看,感谢您的建议。我现在是 ido 的粉丝。【参考方案4】:

奇怪的是,这里没有关于 ibuffer 的答案。

我会建议大多数 Emacs 用户将此作为标准更改:

(global-set-key (kbd "C-x C-b") 'ibuffer)

ibuffer 是默认缓冲区列表的一个非常高级的替代品,不仅具有所要求的确切行为,而且还提供了丰富的其他功能。

我列出了一些 ibuffer 过滤和分组基础知识 Emacs: help me understand file/buffer management,但请务必阅读文档了解详细信息。

【讨论】:

【参考方案5】:

尝试添加

(ido-mode 1)

到您的 .emacs,并享受结果 :)

【讨论】:

【参考方案6】:

如果你喜欢原始的缓冲区列表(而不是其他人提出的'buffer-menu 解决方案),你可以使用这个:

(global-set-key (kbd "C-x C-b") 'my-list-buffers)
(defun my-list-buffers (&optional files-only)
  "Display a list of names of existing buffers.
The list is displayed in a buffer named `*Buffer List*'.
Note that buffers with names starting with spaces are omitted.
Non-null optional arg FILES-ONLY means mention only file buffers.

For more information, see the function `buffer-menu'."
  (interactive "P")
  (switch-to-buffer (list-buffers-noselect files-only)))

和之前的功能一样,只是在当前窗口中。

【讨论】:

如果我已经在缓冲区列表中,我现在正在使用带有 switch-to-buffer-other-window 和特殊行为的变体。谢谢。【参考方案7】:

我强烈推荐 http://www.geekware.de/software/emacs/ 的 bs.el 安装它并:

(require 'bs)
(add-hook 'bs-mode-hook 'turn-on-font-lock)
(global-set-key "\C-x\C-b" 'bs-show)

它以正确的方式管理缓冲区和窗口配置,因此一切都需要最少的击键次数。

【讨论】:

【参考方案8】:

不知道我从哪里得到的,但是:

;;; Faster buffer switching
(global-set-key [(C tab)] 'buffer-menu) 

这使得 Ctrl-Tab 显示当前窗口中的所有缓冲区。然后,您可以导航到缓冲区并按 Enter 键访问它。

【讨论】:

谢谢 - 我已经保留了 Ctrl-tab :)。但缓冲菜单是关键。【参考方案9】:

另一个不是你要求的解决方案:不要用鼠标选择所需的缓冲区,而是完成输入它的名称(使用制表符补全来减少击键并提高准确性),然后按回车键。缓冲区列表将消失,新文件将在之前的活动窗口中打开。

【讨论】:

谢谢 - 但我主要在终端工作,所以那里没有鼠标......但有时我会混淆某些缓冲区是否以 * 开头,但你是对的,制表符完成甚至会帮助我在那里。 这不会为我删除缓冲区列表窗口?

以上是关于emacs 列表缓冲区行为的主要内容,如果未能解决你的问题,请参考以下文章

将 Emacs 设置为并排拆分缓冲区

分析行为不端的 Emacs Lisp 的提示?

如何在emacs中进行缓冲区拆分后切换焦点?

Emacs :(下一行)和(上一行)行为不正确

EMACS快捷键

Emacs常用快捷键