Emacs 是否有类似于“删除其他窗口”(“C-x 1”)的内容,但允许我恢复窗口排列

Emacs 是否有类似于“删除其他窗口”(“C-x 1”)的内容,但允许我恢复窗口排列,emacs,window,Emacs,Window,假设我有一个缓冲区,在它的当前窗口中有点太狭窄,所以我决定简单地给它更多的空间,然后回到我正在做的事情。我是否可以暂时隐藏其他窗口,而不是像C-x 1那样删除它们?库中有相应的命令。它们本质上是标准Emacs命令的可重复版本,例如放大窗口 我说的“可重复”是指你可以重复一个键序列的最后一次击键 例如,默认情况下,C-x}绑定到标准的Emacs命令水平放大窗口。要重复它,您需要每次重复整个键序列:C-x}C-x}C-x}…。(或者,您需要为要放大窗口的列数提供数字前缀arg。) 但是可重复的版本,

假设我有一个缓冲区,在它的当前窗口中有点太狭窄,所以我决定简单地给它更多的空间,然后回到我正在做的事情。我是否可以暂时隐藏其他窗口,而不是像C-x 1那样删除它们?

库中有相应的命令。它们本质上是标准Emacs命令的可重复版本,例如
放大窗口

我说的“可重复”是指你可以重复一个键序列的最后一次击键

例如,默认情况下,
C-x}
绑定到标准的Emacs命令
水平放大窗口
。要重复它,您需要每次重复整个键序列:
C-x}C-x}C-x}…
。(或者,您需要为要放大窗口的列数提供数字前缀arg。)

但是可重复的版本,command
放大窗口水平重复
允许您只做
C-x}}…

定义很简单。他们使用以下辅助功能:

(取消重复命令(命令)
“重复命令。”
(要求“重复”;在绑定变量之前定义变量。
(let((重复上一个重复的命令)
(重复消息功能#'忽略)
(最后一个可重复命令“重复”)
(重复零次)
这就是
水平放大窗口的全部定义重复

(取消放大窗口水平重复()
“将所选窗口水平放大一列。
您可以通过再次按最后一个键来重复此操作…”
(互动)
(要求“重复”)
(frcmds重复命令“水平放大窗口”)
以下是您可能使用的一些键绑定:

(全局设置键[水平重新映射放大窗口]“水平重复放大窗口”)
(全局设置键[水平重新映射收缩窗口]“水平重复收缩窗口”)
(全局设置键[重新映射放大窗口]'放大/缩小窗口重复)


除此之外,如果大于缓冲区,还有标准的Emacs命令
收缩窗口,默认情况下绑定到
C-x-
。它会缩小窗口以适应缓冲区内容。

您可以将窗口配置保存到寄存器,转到单个窗口,完成后,从寄存器恢复窗口配置:

  • 保存窗口配置以注册
    z
    :C-xrwz
  • 转到单个窗口:C-x1并执行您需要执行的操作(但不要干扰寄存器
    z
    !)
  • 从寄存器
    z
    :C-xrjz恢复窗口配置

请执行
(信息”(elisp)寄存器)
,以获取有关的信息。执行C-hfwindow-configuration-to-register-RET以获取绑定到C-xrw的函数的信息。

将此添加到您的init文件:

(winner-mode 1)
然后您可以正常使用C-x1,然后使用C-C调用
winner undo
来恢复以前的窗口配置

您可以重复使用C-C来逐步返回以前的配置,也可以使用C-C再次跳回最新的配置


n、 b.这是一个通用功能,除了这个特定示例之外,它在各种情况下都非常有用。我强烈建议您熟悉它。

@picklerick:我很清楚
设置瞬态映射(这不是“现代的”)。使用
repeat
并不能取代
set transient map
的所有用法,但它很简单(而且
repeat
本身使用
set transient map
repeat
还有一个额外的优点,就是它可以通过Emacs 22与Emacs一起使用。但是,请随意添加另一个答案,它直接使用
设置瞬态映射
。哦,谢谢,我没有意识到它使用了
设置瞬态映射
,但这当然有意义:)