在终端Emacs(没有鼠标)中,我正在使用拆分窗口同时处理多个缓冲区。我发现在分割窗口之间移动比在Vim中做的更痛苦。阅读文档看起来我正确地做到了( C-x o ),但这只是顺时针方向围绕窗口循环。如果我移动到相邻的窗口进行快速编辑,我需要在我回到原地之前点击 C-x o 几次。有时候我不小心匆匆按了很多次,不得不再次循环回窗户。
除了安装还有另外的外包装外,有什么方法可以直接移动到一个窗口(例如一个数字),或者至少在相反方向绕窗口循环?
在Vim Cw Cw 与Emacs中的 Cx o 类似,但也有 Cw ARROW 在指定方向上移动......像那样? :)
答案 0 :(得分:23)
将此添加到您的init文件中:
(windmove-default-keybindings)
然后您可以使用 SHIFT + 箭头 移动到指定方向的下一个相邻窗口。
如果您愿意,可以通过传递参数(默认为'shift
)来指定其他修饰符。
或者只是将您喜欢的任何内容绑定到这些函数:
windmove-up
windmove-down
windmove-left
windmove-right
您还可以将FrameMove添加到混音中,以使其在多个帧中透明地工作。
对于带编号的窗口导航,有switch-window.el。
答案 1 :(得分:2)
您可以为 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)
答案 2 :(得分:2)
将此添加到您的初始文件(例如~/.emacs
):
(windmove-default-keybindings)
然后按 SHIFT + 箭头 移动到该方向的窗口。
答案 3 :(得分: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)
答案 4 :(得分:1)
使用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。
答案 5 :(得分:1)
为了完成,还有window-numbering和ace-window
答案 6 :(得分:0)
我前段时间写了一个elisp模块以扩展windmove以使其更有用:http://samograd.ca/stumpwm.el。您可以将stumpwm-move-window- [左/右/上/下]绑定到您想要的任何键,窗口将以正确的方向移动,甚至可以移动到另一个帧(使用2帧测试)。还有一个stumpwm-interactive-resize-window,用于使用C-n / C-p / C-f / C-b进行便捷的交互式窗口调整,并使用Return to end resizing。