我希望在分割窗口(
C-x 3
或 C-x 2
)后,能够自动跳转光标到新打开的缓冲区(除了当前缓冲区之外)。我该如何实现这种行为?您可以使用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
,它就可以工作了。
split-window-horizontally
而不是 split-window-horizonatally
。我尝试编辑但没有权限。 - morgan freemansplit-window-right
和split-window-below
吗? - asmeurer!!!不要使用这个答案!!!--正如评论所指出的那样,建议使用split-window
可能会导致不希望发生的副作用。
我建议使用Bozhidar Batsov的答案。
将以下内容放入您的 .emacs 文件中:
(defadvice split-window (after move-point-to-new-window activate)
"Moves the point to the newly created window after splitting."
(other-window 1))
M-$
),因为它不希望在创建的 ispell 缓冲区中有点。我认为 Bozhidar Batsov 的解决方案只更改用户键盘快捷方式是一个更好的方法。 - asmeurersplit-window-sensibly
,但您可以将其设置为调用split-window-sensibly
并选择缓冲区的自己的函数。*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))))
当你想要在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)
C-x o可以帮助您切换到“其他”缓冲区。