Emacs,切换到上一个窗口

时间:2008-09-18 09:02:42

标签: emacs

在Emacs中, C-x o 带我到下一个窗口。

什么键盘宏将我带到Emacs的上一个窗口?

13 个答案:

答案 0 :(得分:100)

您可能还想尝试使用windmove,它可以让您根据几何图形导航到您选择的窗口。我在.emacs文件中有以下内容,使用C-x箭头键更改窗口。

(global-set-key (kbd "C-x <up>") 'windmove-up)
(global-set-key (kbd "C-x <down>") 'windmove-down)
(global-set-key (kbd "C-x <right>") 'windmove-right)
(global-set-key (kbd "C-x <left>") 'windmove-left)

答案 1 :(得分:84)

那是 C-- C-x o

换句话说, C-x o ,参数为-1。您可以通过在 C-u 和命令之间插入数字参数来指定要移动的窗口数,如 C-u 2 C-x o 。 ( C - C-u - 1 的快捷方式)

答案 2 :(得分:29)

我个人更喜欢使用window-number.el

要选择其他窗口,请使用 Ctrl - x Ctrl - j n < / em>的

其中 n 是窗口的编号,每个窗口的模式行显示它的编号,如屏幕截图所示。

只需下载window-number.el,将其放入您的emacs加载路径中,然后在.emacs

中使用以下内容
 (autoload 'window-number-mode "window-number"
   "A global minor mode that enables selection of windows according to
 numbers with the C-x C-j prefix.  Another mode,
 `window-number-meta-mode' enables the use of the M- prefix."
   t)

还有另一种名为switch-window.el的类似模式,可以在窗口中显示大数字...(按数字会切换窗口并恢复显示。)

http://tapoueh.org/images/emacs-switch-window.png

答案 3 :(得分:12)

如果你经常使用多个emacs窗口(&gt; 3),你会想要保存一些击键,将它添加到你的init文件中,你会更好:

(defun frame-bck()
  (interactive)
  (other-window-or-frame -1)
)
(define-key (current-global-map) (kbd "M-o") 'other-window-or-frame)
(define-key (current-global-map) (kbd "M-O") 'frame-bck)

现在只需用M-o快速循环通过窗口

答案 4 :(得分:11)

这里有一些非常好的和完整的答案,但要以极简主义的方式回答这个问题:

 (defun prev-window ()
   (interactive)
   (other-window -1))

 (define-key global-map (kbd "C-x p") 'prev-window)

答案 5 :(得分:4)

基于来自@Nate的想法,但略微修改以支持窗口之间的向后循环

;; Windows Cycling
(defun windmove-up-cycle()
  (interactive)
  (condition-case nil (windmove-up)
    (error (condition-case nil (windmove-down)
         (error (condition-case nil (windmove-right) (error (condition-case nil (windmove-left) (error (windmove-up))))))))))

(defun windmove-down-cycle()
  (interactive)
  (condition-case nil (windmove-down)
    (error (condition-case nil (windmove-up)
         (error (condition-case nil (windmove-left) (error (condition-case nil (windmove-right) (error (windmove-down))))))))))

(defun windmove-right-cycle()
  (interactive)
  (condition-case nil (windmove-right)
    (error (condition-case nil (windmove-left)
         (error (condition-case nil (windmove-up) (error (condition-case nil (windmove-down) (error (windmove-right))))))))))

(defun windmove-left-cycle()
  (interactive)
  (condition-case nil (windmove-left)
    (error (condition-case nil (windmove-right)
         (error (condition-case nil (windmove-down) (error (condition-case nil (windmove-up) (error (windmove-left))))))))))

(global-set-key (kbd "C-x <up>") 'windmove-up-cycle)
(global-set-key (kbd "C-x <down>") 'windmove-down-cycle)
(global-set-key (kbd "C-x <right>") 'windmove-right-cycle)
(global-set-key (kbd "C-x <left>") 'windmove-left-cycle)

答案 6 :(得分:4)

只是添加到@ Nate,@ aspirin和@Troydm的回答我发现如果您决定将windmove命令绑定到您选择的任何组合键,这将是一个非常有用的补充:

(setq windmove-wrap-around t)

使用默认配置,当您尝试移动到不存在的窗口时会出现错误,这会在一段时间后变得有点烦人。然而,当设置windmove-wrap-around时,例如尝试从框架的底部移开将改为选择框架中的最顶层窗口。这可能是一种更直观的行为。

答案 7 :(得分:4)

M-nM-p对我来说最有意义,因为它们类似于C-n下一行)和C-p(的前行):

(define-key global-map (kbd "M-p") 'previous-multiframe-window)
(define-key global-map (kbd "M-n") 'other-window)

(灵感来自thisthat

答案 8 :(得分:2)

在参考Nate的回答时,我将arrow keys替换为使用传统p进行upn进行down,{{1转发fright转发b。我还将left替换为Ctrl密钥,因为Super是默认的移动密钥。与C-p, C-n, C-f and C-b的这种组合使您可以在每次击键后跳转字符和线条,而不是一个接一个地跳过。因此,M键感觉是保持简单键绑定的最佳选择。此外,现在您不必再将手从主行上移开了!

Super

希望它有所帮助!

答案 9 :(得分:2)

(global-unset-key (kbd "M-j"))
(global-unset-key (kbd "M-k"))
(global-set-key (kbd "M-j") (lambda () (interactive) (other-window 1)))
(global-set-key (kbd "M-k") (lambda () (interactive) (other-window -1)))

alt j alt k 将在您的可见缓冲区中循环。前进和后退,确切地说。

答案 10 :(得分:1)

已有一个软件包允许您使用M-切换窗口。 check this website。将其添加到您的init文件中:

(require 'windmove)
(windmove-default-keybindings 'meta) ;; or use 'super to use windows key instead alt

答案 11 :(得分:0)

(global-set-key (kbd "C-x a") 'ace-swap-window)  
(global-set-key (kbd "C-x q") 'ace-select-window)

download ace-window from the melpa repo if you don't know how to do that
put this in your .emacs file if you don't have one create it 

(package-initialize)                                                                                                                                                                     

(require 'package)                                                                                                                                                                       
(add-to-list 'package-archives '("melpa" , "http://melpa.org/packages/"))                                                                                                                

(package-initialize) 

then "m-x list-packages"

答案 12 :(得分:0)

我发现切换到上一个窗口的最快方法是将{strong>几个键混在一起作为"key-chord"。以下内容可让您一起使用左手的粉红色+无名指转到上一个窗口:

(key-chord-define-global "qw" 'prev-window)
(key-chord-define-global "'y" 'other-window) ; bonus for my colemak, adjust otherwise
(key-chord-define-global ";'" 'other-window) ; probably normal

(这是可能的,因为Emacs的和弦与顺序无关,这意味着qwwq相同。)