21

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

远没有安装另一个外部包,有什么方法可以直接移动到一个窗口(比如说,一个数字),或者至少在相反的方向上围绕窗口循环?

在 VimC-w C-w中就像C-x o在 Emacs 中一样,但也C-w ARROW需要朝着指定的方向移动……类似的东西?:)

4

7 回答 7

32

将此添加到您的初始化文件中:

(windmove-default-keybindings)

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

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

或者只是将您喜欢的任何内容绑定到这些函数:

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

您还可以将FrameMove添加到混合中,以使其在多个帧中透明地工作。

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

于 2013-05-17T13:27:42.687 回答
4

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

(windmove-default-keybindings)

然后向那个方向移动到窗口。SHIFT+arrow

于 2014-11-14T15:57:15.903 回答
3

你可以给C-x olike this一个前缀参数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)
于 2013-05-17T12:01:00.733 回答
1

我使用以下内容导航到下一个(与 相同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)
于 2013-05-17T11:56:57.753 回答
1

为了完成,还有window-numberingace- window

于 2014-08-18T22:30:23.163 回答
1

使用窗口跳转,例如:

;; 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)))

有关使用包的帮助,请参阅https://github.com/jwiegley/use-package/blob/master/README.md

于 2014-08-18T14:13:56.883 回答
-1

不久前我写了一个 elisp 模块来扩展 windmove 以使其更有用:http ://samograd.ca/stumpwm.el 。您可以将 stumpwm-move-window-[left/right/up/down] 绑定到您想要的任何键,并且窗口将朝正确的方向移动,甚至进入另一个框架(用 2 个框架测试)。还有一个 stumpwm-interactive-resize-window 用于使用 Cn/Cp/Cf/Cb 和 Return to end 调整大小来方便地调整交互式窗口大小。

于 2013-05-17T15:00:38.943 回答