ChatGPT解决这个技术问题 Extra ChatGPT

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

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


p
phils

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

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

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

Cx - (shrink-window-if-larger-than-buffer) 将缩小窗口以适应其内容。

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

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

shrink-window 没有默认绑定。)

Cx } (enlarge-window-horizontally) 水平方向同样如此。
Cx { ( 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 反复“撤消”对窗口配置的任何更改(无论更改是大小/数量/排列窗口,或仅显示哪个缓冲区)。 Cc right 将您返回到最近的配置。使用 (winner-mode 1) 全局设置它


太棒了,正是我想要的!太感谢了!
+1:感谢“撤消”获胜者模式提示。顺便说一句,在我的情况下,单击缓冲区名称会打开下一个缓冲区。但是很容易看出何时可以调整鼠标光标的形状。
w
wilbeibi

我把这些放在我的 .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 中对我不起作用
@OskarPersson 这可能是与全局快捷方式的冲突。优先找到它或将控件重新映射到大写锁定(我的方式),它应该可以工作。
我遇到了同样的问题,发现 C-left 和 C-right 与 OS X 系统偏好设置中的任务控制快捷方式冲突,如@Wilbeibi 所述。
这些键已经定义,在设置之前先用 (global-set-key (kbd "<C-up>") nil) 取消设置,但最好使用 M-left
我喜欢这个,但使用 M-k(放大)、M-j(缩小)、M-l(水平放大)和 M-l(水平缩小)。
m
maoyang

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

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

你会找到你想要的。

享受!


可能有人在 C-h 不可用的环境中工作。然后怎样呢?
如果您破坏了标准的帮助地图绑定,那么您肯定应该知道您用什么来破坏它。 (如果失败,请尝试 <f1>,它是 other 标准帮助地图绑定。)
v
vpit3833

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


如果绑定不同(我的是),命令是 enlarge-window。另一个技巧是使用前缀 arg 来控制扩展量。
惊人的!非常感谢!
j
justinpc

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


Y
Yesh

这不是您正在寻找的确切答案,但我在寻找 spacemacs 中的功能时偶然发现了这个问题,所以为了完整起见,我将写下我的答案。

选项是使用 <SPC> + w + .(它适用于 vanilla spacemacs)

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

不需要 Cx 或鼠标...

https://i.stack.imgur.com/xoVrN.png


常规emacs中是否有类似的东西?
它可能不存在,这就是德鲁首先问这个问题的原因......
佚名

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

(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


你的链接坏了:(