如何更改拆分屏幕emacs窗口的大小?


172

我将emacs进行了水平拆分-顶部是我在编辑Perl代码,底部是shell。默认情况下,emacs使两个窗口的大小相等,但是我希望shell缓冲区更小(也许是大小的一半?)。我想知道我该怎么做。

Answers:


294

使用鼠标,您可以拖动窗口大小。

单击模式行上其他不处于“活动”状态的位置(缓冲区名称是安全的,或者在右侧没有使用的区域),然后可以向上或向下拖动。

左右拖动需要非常精确地单击两条模式线连接的位置。

C-x -shrink-window-if-larger-than-buffer)将缩小窗口以适合其内容。

C-x +balance-windows)将使窗口具有相同的高度和宽度。

C-x ^enlarge-window)将高度增加1行,即前缀arg值。负arg缩小窗口。例如,C-- C-1 C-6 C-x ^缩小16行C-u - 1 6 C-x ^

(没有默认绑定shrink-window。)

C-x }enlarge-window-horizontally)同样在水平方向执行。
C-x {shrink-window-horizontally)也默认绑定。

在这些命令之一后面加上repeatC-x z以进行初始化,并z继续进行重复)可以很容易地获得所需的大小。

如果您经常想使用特定的值来执行此操作,则可以记录一个键盘宏来执行此操作,或者使用类似的方法
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

或这个:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

这是一个smidgen hacky,所以这样做会更好:

(defun halve-other-window-height ()
  "Expand current window to use half of the other window's lines."
  (interactive)
  (enlarge-window (/ (window-height (next-window)) 2)))

(global-set-key (kbd "C-c v") 'halve-other-window-height)

切向地,我也很喜欢winner-mode它使您可以反复“撤消”对窗口配置的任何更改C-c left(无论更改是窗口的大小/数量/排列,还是显示哪个缓冲区)。C-c right返回到最新配置。全局设置(winner-mode 1)


3
太棒了,正是我想要的!非常感谢!
史蒂夫

1
+1:感谢“撤消”获胜者模式提示。顺便说一句,在我的情况下,单击缓冲区名称将打开下一个缓冲区。但是很容易看到何时可以调整鼠标光标形状的大小。
jfs 2012年

34

我把这些放在我的.emacs

(global-set-key (kbd "<C-up>") 'shrink-window)
(global-set-key (kbd "<C-down>") 'enlarge-window)
(global-set-key (kbd "<C-left>") 'shrink-window-horizontally)
(global-set-key (kbd "<C-right>") 'enlarge-window-horizontally)

前两个在Mac OSX 10.9.1的Emacs 24.3.1中对我不起作用
Oskar Persson

1
@OskarPersson可能是与全局快捷方式冲突。优先找到它或将控件重新映射到大写锁定(按我的方式),然后它应该可以工作。
wilbeibi 2014年

我遇到了同样的问题,发现C左键和C右键与OS X系统偏好设置中的任务控制快捷方式冲突,如@Wilbeibi所述。
Doug Richardson 2014年

1
这些键已经被定义,首先取消设置的钥匙(global-set-key (kbd "<C-up>") nil)之前设置它,但会更好地利用M-left替代
毛里西奥·科塔萨尔

@MauricioCortazar我已经好多年没有使用Emacs了。此答案可能现在不适用。随时更新。
wilbeibi

13

让我们尝试使用emacs帮助文档。

C-h a

然后输入“放大”或“窗口”

您会找到想要的东西。

请享用!


可能是在C-h无法使用的环境中工作。然后怎样呢?
德里尔·杜勒特

1
如果你打一顿标准的帮助对应绑定,那么你当然应该知道你已经重挫什么。(如果失败,请尝试<f1>使用其他标准帮助映射绑定。)
phils

6

C-x o到您要扩展其大小的窗口。从那里C-x ^开始扩展它。


3
如果绑定不同(我的是),则命令为enlarge-window。另一个提示是使用前缀arg来控制扩展量。
约瑟夫·盖伊

太棒了!非常感谢你!
史蒂夫

6

C-x ^采取积极的消极的数字参数。特别是,如果您想将当前光标所在的窗口缩小四行,可以按C-u -4 C-x ^


2

这不是您要查找的确切答案,但是在寻找中的功能时,我偶然发现了这个问题spacemacs,因此,出于完整性考虑,我将写出我的答案。

该选项是要使用的<SPC> + w + .(它在香草spacemacs中有效)

这会打开一个瞬态窗口,您可以在其中使用[]{}粒度进行调整。

不需要Cx或鼠标...

窗口操作瞬态


常规emacs中是否有类似的东西?
krokodil19年

可能不在那里,这就是为什么Drew首先问这个问题的原因……
Yesh

0

我有同样的问题。这是我的解决方案。
首先,我定义一个新函数:

(defun buffer-resize ()
  (delete-other-windows)
  (split-window-vertically (floor (* 0.68 (window-height))))
  (other-window 1)
  (switch-to-buffer buf)
  (other-window 1))

例如,我想在缓冲区中运行方案,因此我将其重写。
这是定义,以及之前定义的功能:

(defun run-scheme-here ()
  "Run a new scheme process at the directory of the current buffer.
   If a process is already running, switch to its buffer."
  (interactive)
  (let* ((proc (format "scheme: %s" default-directory))
         (buf (format "*%s*" proc)))
    (unless (comint-check-proc buf)
      (let ((cmd (split-string scheme-program-name)))
        (set-buffer
         (apply 'make-comint-in-buffer proc buf (car cmd) nil (cdr cmd)))
        (inferior-scheme-mode)
        (buffer-resize)))
    (pop-to-buffer buf)))

所以现在当我输入:Mx run-scheme-here时,将调整缓冲区的大小!
这是我的配置文件,希望对您有所帮助。https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


3
您的链接已损坏:(
CiprianTomoiagă14年
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.