当Emacs窗口被分割时,使用next-buffer会跳过缓冲区。

5

我是一个新的Emacs用户,正在学习如何在窗口中垂直拆分并循环缓冲区。

但是,在一个窗格中打开一个新文件后,下一个缓冲区命令(next-buffer)不会在另一个窗格中循环显示该文件,而只有在它首次出现在新窗格中之后才行。可以按以下步骤进行复现:

在新的Emacs会话中打开2个文件A和B。

使用'split-window-right'命令垂直拆分窗口。

'next-buffer'命令将在PaneLeft和PaneRight中循环显示A和B。

在PaneLeft中打开文件C。

'next-buffer'命令将在PaneLeft中循环显示A、B和C。

确保在PaneLeft中焦点在C上,然后切换到PaneRight。'next-buffer'命令只会在PaneRight中循环显示A和B。它可能会跳过C,因为C已经在PaneLeft中可见。

切换回PaneLeft,并确保焦点在PaneLeft中的A或B上。

再次切换到PaneRight,现在'next-buffer'命令将在PaneRight中循环显示A、B和C,而不管PaneLeft中显示什么。

这是预期的行为吗?我该如何使它按照我的意愿工作?

注意:我没有安装任何自定义扩展,我的.emacs文件几乎是空的。


我无法在Windows XP上的emacs24中重现这个问题。我在两个窗口中循环遍历所有缓冲区。 - mamboking
next-buffer 避免显示已经在其他窗口中可见的缓冲区,这是预期的行为(不知道是否有一些交互式替代 next-buffer 没有这个属性)。 - Anton Kovalenko
谢谢您的提示,我编辑了问题以反映更多调查后的发现。似乎 next-buffer 可以显示在另一个窗口中可见的缓冲区,但最初不行。 - Justin Wong
1个回答

2

有一个名为switch-to-visible-buffer的变量用于控制这种行为。根据GNU Emacs 24.2的文档:

switch-to-visible-buffer is a variable defined in `window.el'.
Its value is t

Documentation:
If non-nil, allow switching to an already visible buffer.
If this variable is non-nil, `switch-to-prev-buffer' and
`switch-to-next-buffer' may switch to an already visible buffer
provided the buffer was shown in the argument window before.  If
this variable is nil, `switch-to-prev-buffer' and
`switch-to-next-buffer' always try to avoid switching to a buffer
that is already visible in another window on the same frame.

You can customize this variable.

This variable was introduced, or its default value was changed, in
version 24.1 of Emacs.

如果这个功能不能正常工作,很可能是有bug存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接