如何在emacs中进行缓冲区拆分后切换焦点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在emacs中进行缓冲区拆分后切换焦点?相关的知识,希望对你有一定的参考价值。

我希望在分割窗口(C-x 3C-x 2)之后能够自动获取新打开的缓冲区中的光标(除当前之外)。我怎样才能实现这种行为?

答案

!!!不要使用这个答案! - 正如评论中指出的那样,建议split-window可能导致不良副作用。

而改名为Bozhidar Batsovos的反而是。


将以下内容放在.emacs文件中:

(defadvice split-window (after move-point-to-new-window activate)
  "Moves the point to the newly created window after splitting."
  (other-window 1))
另一答案

您可以使用C-x o在缓冲区之间切换。至于自动执行此操作,我认为没有现成的命令。

另一答案

你可以这样做:

(global-set-key "C-x2" (lambda () (interactive)(split-window-vertically) (other-window 1)))
(global-set-key "C-x3" (lambda () (interactive)(split-window-horizontally) (other-window 1)))

在Emacs 24.3.1中,如果你为1更改参数0,它就可以工作。

另一答案

除了用C-x 2或C-x 3手动分割帧之外,缓冲区也会自动“弹出”一些。默认情况下,这些也未被选中/激活。

这可以通过更改用于拆分窗口的功能来解决。它默认设置为split-window-sensibly,但您可以将其设置为调用split-window-sensibly的自己的函数,然后选择缓冲区。

不幸的是,当你在迷你缓冲区中点击TAB时,这会产生选择*Completions*缓冲区的副作用。因此,在这种情况下,检查迷你缓冲区是否处于活动状态并且不进行切换是值得的。我敢打赌还有其他类似的不良情景。当我找到它们时,我会尝试更新这篇文章。

;; after splitting a frame automatically, switch to the new window (unless we
;; were in the minibuffer)
(setq split-window-preferred-function 'my/split-window-func)
(defun my/split-window-func (&optional window)
  (let ((new-window (split-window-sensibly window)))
    (if (not (active-minibuffer-window))
        (select-window new-window))))

(适用于Emacs 24.5.1。)

另一答案

我想到你想要在split-window之后跟随窗口的时候,就像它具有相同的缓冲区一样,如下面的代码:

(defun split-window--select-window (orig-func &rest args)
  "Switch to the other window after a `split-window'"
  (let ((cur-window (selected-window))
        (new-window (apply orig-func args)))
    (when (equal (window-buffer cur-window) (window-buffer new-window))
      (select-window new-window))
    new-window))
(advice-add 'split-window :around #'split-window--select-window)

简单

以上是关于如何在emacs中进行缓冲区拆分后切换焦点?的主要内容,如果未能解决你的问题,请参考以下文章

在 git 中切换分支时,如何让 Emacs 恢复所有未更改的缓冲区?

如何在 Emacs 中将文件加载到缓冲区并在启动时切换到缓冲区

将 Emacs 设置为并排拆分缓冲区

Emacs find-file-other-window命令垂直拆分缓冲区

如何定义键绑定以在 emacs 中的次要模式之间切换?

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