如何将 emacs 缓冲区移动到新的 window?

How to move an emacs buffer to a new window?

我在 Emacs 中打开了很多缓冲区 window。我想将其中一个缓冲区移动到新的 window。有执行此操作的命令吗?

IIUC,您想创建一个新的 WM window。

Emacs 使用略有不同的术语:在 GUI 环境中通常称为 "windows",Emacs 称为 "frames"。在单个框架内,Emacs 将其区域细分为单独的 "windows"(IOW,即使在非 GUI 环境中,Emacs 也充当 "tiling" window 管理器)。因此,您可以使用 C-x 5 2(或等同于 M-x make-frame-command RET)创建一个新帧,然后在该帧中,使用 C-x b <buffer-name> RET.

切换到所需的缓冲区

顺便说一下,您没有 "move" 新框架的缓冲区:缓冲区的存在独立于显示框架中是否存在 (emacs) window缓冲区。

您要查找的命令是tear-off-window。请注意,此命令必须与鼠标单击事件相关联。

比如你可以把下面的代码(from this reddit comment) in your init file (more about init file here):

(global-set-key [mode-line C-mouse-1] 'tear-off-window)

当您按住 Control 键并单击缓冲区模式行时,这将调用 tear-off-window

如果你想使用键盘绑定,下面是tear-off-window的修改版本。把它放到你的init文件里,重启emacs后保存。

(bind-key "C-x C-X" #'my/tear-off-window)

(defun my/tear-off-window ()
  "Delete the selected window, and create a new frame displaying its buffer."
  (interactive)
  (let* ((window (selected-window))
     (buf (window-buffer window))
     (frame (make-frame)))          
    (select-frame frame)
    (switch-to-buffer buf)
    (delete-window window)))

在代码中,修改后的命令绑定到"C-x C-X"。您可以随意将其更改为任何其他键序列(更多详细信息 here)。