Emacs沿着指定的方向移动分割窗口



在Terminal Emacs(没有鼠标)中,我使用分割窗口同时处理多个缓冲区。我发现在分割窗口之间移动比我在Vim中做的要痛苦得多。阅读文档,看起来我做的是正确的(C-x o),但这只是在顺时针方向的窗口周围循环。如果我移动到相邻的窗口进行快速编辑,我需要点击C-x o几次才能回到原来的位置。有时我匆忙中不小心按了太多次,不得不再次从窗户骑车回来。

远离安装另一个外部包,是否有任何方法可以直接移动到一个窗口(例如,通过一个数字),或者至少在相反方向的窗口周围循环?

在Vim中C-w C-w就像在Emacs中C-x 一样,但是也有C-w ARROW向指定方向移动…类似的东西?:)

将此添加到您的init文件:

(windmove-default-keybindings)

然后您可以使用SHIFT+箭头移动到指定方向的下一个相邻窗口。

如果你愿意,你可以通过传递一个参数来指定一个不同的修饰符(默认为'shift)。

或者直接绑定你喜欢的函数:

  • windmove-up
  • windmove-down
  • windmove-left
  • windmove-right

你也可以添加FrameMove到混合,使这个工作透明地跨多个帧。

对于编号窗口导航,有switch-window.el.

将此添加到您的初始化文件(例如~/.emacs):

(windmove-default-keybindings)

然后按SHIFT+箭头移动到该方向的窗口

你可以像这样给C-x o一个前缀参数C-u -1 C-x o。这样,您可以向前或向后移动任意数量的窗口。我个人认为创建一个特殊的键来向后移动一个窗口更容易。我在我的。emacs中有这个:

(defun other-window-backward ()
  "Goto previous window"
  (interactive)
  (other-window -1))
(global-set-key (kbd "C-x p") 'other-window-backward)

我使用以下代码导航到下一个(与C-x o相同),前一个,第一个和最后一个窗口:

(defun my-previous-window ()
  "Previous window"
  (interactive)
  (other-window -1))
(global-set-key "C-xp" 'my-previous-window)
(global-set-key "C-xn" 'other-window)
(defun my-select-first-window ()
  (interactive)
  (select-window (frame-first-window)))
(defun my-select-last-window ()
  (interactive)
  (select-window (previous-window (frame-first-window))))
(global-set-key "C-x<" 'my-select-first-window)
(global-set-key "C-x>" 'my-select-last-window)

使用window-jump,例如:

;; C-x <direction> to switch windows
(use-package window-jump
             :bind (("C-x <up>" . window-jump-up)
                    ("C-x <down>" . window-jump-down)
                    ("C-x <left>" . window-jump-left)
                    ("C-x <right>" . window-jump-right)))

关于use-package的帮助,请参见https://github.com/jwiegley/use-package/blob/master/README.md

为了完整起见,也有窗口编号和窗口编号

我写了一个elisp模块来扩展windmove,使它更有用:http://samograd.ca/stumpwm.el。你可以绑定stumpwm-move-window-[左/右/上/下]到任何你想要的键,窗口将在正确的方向移动,甚至进入另一个另一个框架(2帧测试)。还有一个stumpwm-interactive-resize-window,用于方便地使用C-n/C-p/C-f/C-b和返回到结束调整大小。

最新更新