2011-02-13 71 views
132

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

回答

232

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

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

左右拖动需要非常精确地点击两条模式线加入的地点。

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行,如同   -       CX   ^

(没有缺省为shrink-window结合。)

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

在与repeat这些命令之一(C-X   ž启动,只是ž为持续重复)使得它非常容易得到你想要的确切大小。

如果您经常想用一个特定的值要做到这一点,你可以记录键盘宏来做到这一点,或使用类似
(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"))

这是一个点点哈克,所以这将是更好的:

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

+1

真棒,正是我想要的!非常感谢! – Steve 2011-02-17 06:04:40

+1

+1:感谢'撤消'赢家模式提示。顺便说一句,在我的情况下点击缓冲区名称打开下一个缓冲区。但很容易看出您何时可以调整鼠标光标形状的大小。 – jfs 2012-03-20 05:28:35

6

C-x o添加到您想扩展的窗口。从那里,C-x ^扩大它。

+3

如果绑定不同(我的),命令是“放大窗口”。另一个提示是使用前缀arg来控制扩展的数量。 – 2011-02-14 01:17:46

+0

太棒了!非常感谢你! – Steve 2011-02-17 06:05:17

26

我把这些在我.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) 
+0

在Mac OSX 10.9的Emacs 24.3.1中,前两个不适用于我。1 – 2014-01-14 15:55:09

6

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

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

所以,现在当我输入:M-X上运行的方案,在这里,缓冲区大小!
这里是我的配置文件,希望这会有所帮助。 https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el

8

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

C-H   一个

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

你会找到你想要的东西。

享受!