定义“其他窗口”指向的窗口


10

在emacs中,我经常遇到超过4个窗口或更多窗口。

我将使用该示例:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

许多功能都可以在other-window(通常由指向的同一窗口C-x o)中执行操作。特别有用的是scroll-other-window。但是,当打开4个或更多窗口时,other window不太可能是我想要的那个。

有没有一种简单的方法可以在other-window不更改窗口/缓冲区布局的情况下进行设置?当然,使用一堆是可行的C-x 4 bC-b但是我不想更改布局。例如:

  • 如果在上图中的窗口4中进行编辑,是否有一种简单的方法来设置C-M-v滚动窗口1
  • 或者简单地,假设焦点在窗口3上,如何设置other-window为指向窗口2

Answers:


7

如果我正确阅读了您的问题,那么您主要对快速操作其他窗口中显示的缓冲区感兴趣(同时保留当前窗口的布局)。

更改other-window指向的窗口是实现此目的的一种方法,但我想提出一个替代的工作流程:

与不同other-window,它ace-window使您可以快速跳至特定窗口:调用时ace-window,它在每个窗口中显示一个唯一的数字。要跳至特定窗口,只需键入相应的数字。如果您只有两个窗口,则它将指向另一个窗口,而不要求您键入数字。此截屏视频演示了切换到另一个窗口,滚动它并切换回原始窗口:

ace窗口的演示

如果您绑定ace-windowC-x o,则不必记住其他的按键绑定,并且感觉就像您使用的增强版本other-window

另外,如果您触摸输入和/或不想将手指移离主行太远,则可以指示ace-window使用字母而不是数字为窗口“编号”(请参见下文)。

ace-windowMELPA中可用。通过进行安装后M-x package-install RET ace-window RET,您可以将以下内容放入init文件中以进行如上所述的设置:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))

感谢您的演示,我在其他站点上也看到了该软件包,并想知道它是如何工作的。实际上,我可以轻松切换窗口,因为我必须M-1 M-2 ..使用该window-number软件包选择1号,2号窗口
Lompik 2014年

1

快速浏览other-window一下它的来源,看起来它实际上取决于,由next-windowc 返回定义的窗口。不幸的scroll-other-window是,它也在c中定义,大概是从那里调用next-window的。我认为覆盖它并不容易。

但是,switch-to-buffer-other-window似乎可以使用pop-to-buffer,因此您可能会遇到一些麻烦。


1

没有简单的方法可以操作窗口列表,因此返回的结果other-window或多或少是固定的。这本身不是一件坏事,因为它允许在浏览窗口时保持一致。关于您描述的两种情况,使用一些elisp或宏可以适合您的工作流程。

如果在上图中的窗口4中进行编辑,是否有一种简单的方法来设置CMv滚动窗口1?

您可以使用下面的简单代码段使用other-window适当的次数,向下滚动并移回原始窗口。

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

您可以传递前缀参数来指定要滚动的窗口。可以推断,它使用内置的机制other-windowarg滚动滚动窗口。在save-selected-window确保重点将回到原来的窗口。的文档other-window可以提供有关修改此代码段以适合您的行为的更多信息。

或者简单地,假设焦点在窗口3上,如何设置other-window为指向窗口2?

prefix-argC-3 C-x o调用时再次使用as other-window。提供的实际数量将取决于您拆分它们的顺序,并且只要不创建新窗口就不会更改。或者,您可以使用便捷包(例如window-numberace-window来自MELPA的便捷包)来快速切换选定的窗口。


对,没有简单的方法来操作窗口列表。我很难使用前缀。感觉像这样增加了另一个无法访问的键并减慢了速度
Lompik 2014年

那就是键盘宏/键绑定的目的。如果这是您工作流程的常规部分,则可以轻松定义基于前缀映射的键绑定,例如<f7> n滚动第n个窗口。使用键盘宏创建临时的一键绑定。
Vamsi 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.