告诉Emacs在特定窗口中打开新缓冲区

时间:2014-06-06 10:24:13

标签: windows emacs buffer

如果在几个窗口中分割Emacs帧并打开一个新缓冲区,是否有可能告诉Emacs在哪个窗口打开缓冲区。

特别是,如果一个窗口包含一个dired缓冲区,并且我想告诉Emacs在其他打开的窗口中应该显示一个新文件。

如果Emacs框架例如按以下方式分割:

____________________
|        |         |
|        |         |
|   A    |    B    |
|        |         |
|        |         |
--------------------
|        |         |
|   C    |    D    |
|        |         |
--------------------

其中A,B,C和D是窗口。如果A包含一个dired缓冲区,我可以告诉Emacs在窗口D的新缓冲区中打开一个新文件吗?

3 个答案:

答案 0 :(得分:5)

这是另一个答案 -

您可以使用Icicles执行所需操作。在 Icicle 模式中,C-x o(通常为other-window)为icicle-other-window-or-frame。前缀arg为其提供了几种替代行为,其中一种(对于Emacs 24及更高版本)是选择将由下一个缓冲区显示操作使用的窗口(例如,C-x C-fC-x b) 。

如果你使用双普通前缀arg:C-u C-u C-x o,那就会发生这种情况。这会调用命令icicle-choose-window-for-buffer-display,您当然也可以绑定到任何其他键。

您可以按名称选择目标窗口(使用完成或循环等)。

所有该命令都将变量icicle-next-window-for-display-buffer设置为您选择的窗口。 冰柱建议命令display-bufferswitch-to-bufferswitch-to-buffer-other-window,以便下次调用它们时使用的值为icicle-next-window-for-display-buffer的窗口。 (在调用之后,它们会恢复正常行为。)

这也意味着如果您有另一种选择窗口的方法,您更喜欢(例如使用here中提到的其他方法之一循环),那么您可以修改该方法以设置icicle-next-window-for-display-buffer到所选窗口,以获得相同的效果(在 Icicle 模式下)。 IOW,你选择窗户的方式很重要;只需将变量值设置为它,下一个缓冲区显示操作将使用它。

答案 1 :(得分:0)

其他人可能会给你更直接回答你问题的答案。我的回答是只需将焦点移动到您想要的窗口,然后使用C-x C-f或其他任何内容打开文件或在所选窗口中显示所需的缓冲区。

为了直接执行您的请求,您无论如何都需要使用调用所需命令的键序列。如果你想要一些适用于不同命令的通用(例如find-fileswitch-to-buffer),那么你需要使用前缀键或重新设置前缀arg。这通常与切换到窗口然后使用常用命令一样多的关键笔划。

当然,根据我的建议,你需要一个命令来快速切换到你想要的窗口。有各种命令可以让你在窗口之间循环或使用完成来快速选择一个名称或数字的窗口。

这就是我的建议:切换到窗口,然后显示你想要的任何内容,而不是尝试组合(a)指定目标窗口(b)调用显示的命令缓冲区。我只是按照老派的方式去做:去窗口然后在那里展示。

当然,如果你真的不想在新显示的缓冲区中结束,而你只想把焦点保持在你开始的地方,那么根据我的建议,你需要循环(例如)回到你的开始窗口。从您的描述中不清楚这是否是您的用例。如果是,那么我的解决方案可能没那么有用。

但即使在这种情况下,拆分也可能仍然有用:(a)命令(仅)指定用于以下display-buffer命令的窗口和(b)display-buffer命令。 IOW,基本上和我建议的一样,但第一步只会指定目标窗口而不是切换到它,第二步将使用指定的窗口。 (您需要将(a)和(b)定义为一般机制。)

在这种情况下,我的建议也可能与其他人的建议不同,因为它不会尝试窗口选择与display命令结合起来。它们按顺序耦合,但不能在一个命令中组合。

答案 2 :(得分:0)

激活要在其中加载缓冲区的窗口,
激活并按:

C-x b

,系统将提示您:

Switch to buffer (default *Buffer List*):

在不编写任何内容的情况下按Enter(ret)键以选择默认值。然后您会在该窗口中找到加载的缓冲区列表。然后选择您要加载的文件,您会在同一窗口中找到它。