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

时间:2011-02-13 23:59:27

标签: emacs split size screen

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

7 个答案:

答案 0 :(得分:279)

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

单击模式行上任何“非活动”的缓冲区(缓冲区名称是安全的,或右侧任何未使用的区域),然后可以向上或向下拖动。

左右拖动需要在两条模式线连接的位置进行非常精确的点击。

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

C-x + balance-windows)会使窗户的高度和宽度相同。

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

shrink-window没有默认绑定。)

C-x } enlarge-window-horizontally)同样也是水平的。
C-x {shrink-window-horizontally)也默认绑定。

执行其中一个命令repeat Cx 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,它允许你用 Cc left 重复“撤消”对窗口配置的任何更改(无论更改是否为/窗口的数量/排列,或者只显示哪个缓冲区)。 C-c right 返回最近的配置。使用(winner-mode 1)

全局设置

答案 1 :(得分:31)

我把这些放在我的.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)

答案 2 :(得分:13)

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

C-H

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

你会找到你想要的东西。

享受!

答案 3 :(得分:6)

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

答案 4 :(得分:6)

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

答案 5 :(得分:1)

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

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

这将打开一个过渡窗口,您可以在其中使用[]{}在粒度级别进行调整。

不需要C-x或鼠标...

Window manipulation transient state

答案 6 :(得分: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))

例如,我想在缓冲区中运行scheme,所以我重写它。
这是定义,使用前面定义的函数:

(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)))

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