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

15
如果Emacs框架分成多个窗口,并打开一个新的buffer,是否有可能告诉Emacs在哪个窗口中打开该buffer。
特别是当一个窗口包含一个dired buffer时,我想告诉Emacs在其他已打开的窗口中显示一个新文件。
如果Emacs框架被分割如下:
____________________
|        |         |
|        |         |
|   A    |    B    |
|        |         |
|        |         |
--------------------
|        |         |
|   C    |    D    |
|        |         |
--------------------

假设A、B、C和D是窗口,如果A包含一个dired缓冲区,我能告诉Emacs在窗口D中打开一个新文件吗?

3个回答

6
这里有另一个答案 -
您可以使用Icicles来实现您想要的功能。在Icicle模式下,C-x o(通常是other-window)变成了icicle-other-window-or-frame。前缀参数会给它几种替代行为之一(对于Emacs 24及更高版本),其中之一是选择下一个缓冲区显示操作将使用的窗口(例如C-x C-fC-x b)。
如果您使用双重纯前缀参数:C-u C-u C-x o,那么就会出现这种情况:调用命令icicle-choose-window-for-buffer-display,您当然也可以将其绑定到其他任何键上。
您可以通过名称(使用完成或循环等)选择目标窗口。
那个命令所做的只是将变量icicle-next-window-for-display-buffer设置为您选择的窗口。 Icicles建议使用命令display-bufferswitch-to-bufferswitch-to-buffer-other-window,以便下次调用它们时,它们使用值为icicle-next-window-for-display-buffer的窗口。(之后它们会恢复正常行为。)
这也意味着,如果您有另一种选择窗口的方法,比如使用其他提到的方法(在此处),那么您可以修改该方法,将icicle-next-window-for-display-buffer设置为所选窗口,以获得相同的效果(在模式下)。换句话说,选择窗口的方式并不重要;只需将变量值设置为它,下一个缓冲区显示操作将使用它。

谢谢。我会尝试这个。 - Hypnotoad

-1

其他人可能会直接回答你的问题。我的回答是,只需将焦点转移到你想要的窗口,然后使用C-x C-f或其他方法在选择的窗口中打开文件或显示所需的缓冲区。

为了直接实现你的要求,你需要使用一个调用你想要的命令的按键序列。如果你想要一个适用于不同命令(如find-fileswitch-to-buffer)的通用解决方案,那么你需要使用前缀键或重新定义前缀参数。通常情况下,这样做所需的按键次数与切换到窗口并使用常规命令相同。

当然,根据我的建议,你需要一个快速切换到目标窗口的命令。有各种命令可以让你在窗口之间循环切换,或者使用补全来快速通过名称或编号选择窗口。

所以,这就是我建议的方法:切换到窗口,然后在那里显示你想要的内容,而不是试图同时(a)指定目标窗口和(b)调用显示缓冲区的命令。换句话说,老派一点,先去到窗口,然后在那里显示。

当然,如果你不想进入新显示的缓冲区,只是想保持焦点在原来的位置,那么根据我的建议,你需要循环(例如)回到起始窗口。从你的描述中并不清楚这是否符合你的使用情况。如果是这样,那么我的解决方案可能没有那么有用。
但即使在这种情况下,拆分也可能仍然有用:(a)一个命令(仅)指定用于以下display-buffer命令的窗口和(b)display-buffer命令。 也就是说,做与我建议的基本相同的事情,但第一步仅指定目标窗口而不是切换到它,第二步将使用该指定的窗口。您需要定义(a)和(b)作为一种通用机制。
在这种情况下,我的建议与其他人提出的建议可能不同,因为它不尝试将窗口选择与显示命令结合起来。它们被顺序耦合,但不合并成一条命令。

1
这个问题特别关注如何选择“链接”或“命令”将打开一个缓冲区。显然,我们可以移动到一个窗口并直接在那里打开一个缓冲区。问题是:当我在dired中按下一个“链接”(例如),我如何指定将为新缓冲区选择哪个窗口? - UndeadKernel
@UndeadKernel:我不确定你所提出的问题是否是原帖的问题。但是回答你的问题是,“link”调用的任何命令都决定了其行为。没有更多,也没有更少。该命令可以执行这个或那个特定的操作,或者它可以提示用户在一些可能的操作中进行选择,或者......一个命令是一个Elisp函数——它可以做任何函数能做的事情。关键是无论调用哪个命令(无论是否点击链接),都会决定其行为。它可能会给你一些选择,也可能不会。 - Drew

-2

打开您想要在其中加载缓冲区的窗口,
激活并按下:

C-x b

然后会提示您:

Switch to buffer (default *Buffer List*):

按下回车键(ret)而不写任何内容即可选择默认值。然后您将在该窗口中找到缓冲区列表已加载。然后选择您想要加载的缓冲区,您将在同一窗口中找到它已加载。


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