Emacs,切换到上一个窗口

在Emacs中, Cx o带我到下一个窗口。

什么键盘macros带我到Emacs的前一个窗口?

那会是C - Cx o

换句话说, Cx o的参数为-1。 您可以通过在Cu和命令之间插入数字参数来指定要移动多less个窗口,如Cu 2 Cx o中 。 ( C--Cu - 1的捷径)

您可能还想尝试使用windmove,它可以根据几何graphics导航到您select的窗口。 我在.emacs文件中使用Cx箭头键更改窗口中的以下内容。

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

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

要select不同的窗口,请使用CtrlxCtrlj n

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

只需下载window-number.el ,将其放在emacs加载path中,并在.emacs使用以下内容

  (autoload 'window-number-mode "window-number" "A global minor mode that enables selection of windows according to numbers with the Cx Cj prefix. Another mode, `window-number-meta-mode' enables the use of the M- prefix." t) 

还有另外一个类似的模式,称为switch-window.el ,它给你在窗口中的大数字…(按数字切换窗口,并恢复显示。)

http://tapoueh.orghttp://img.dovov.comemacs-switch-window.png

如果你使用多个emacs窗口(> 3),你会想要保存一些按键,把它添加到你的init文件,你会更好:

 (defun frame-bck() (interactive) (other-window-or-frame -1) ) (define-key (current-global-map) (kbd "Mo") 'other-window-or-frame) (define-key (current-global-map) (kbd "MO") 'frame-bck) 

现在只需通过与Mo的窗口快速循环

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

  (defun prev-window () (interactive) (other-window -1)) (define-key global-map (kbd "Cx p") 'prev-window) 

只要添加到@Nate,@aspirin和@ Troydm的答案,我觉得这是一个非常有用的补充,如果你决定将Windmove命令绑定到你select的任何组合键:

 (setq windmove-wrap-around t) 

使用默认configuration,当您试图移动到一个不存在的窗口之后,您会收到一个错误。 但是,如果设置了windmove-wrap-around,则尝试从框架底部移开,而不是select框架中最顶端的窗口。 这对你来说可能是一个更直观的行为。

基于来自@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 "Cx <up>") 'windmove-up-cycle) (global-set-key (kbd "Cx <down>") 'windmove-down-cycle) (global-set-key (kbd "Cx <right>") 'windmove-right-cycle) (global-set-key (kbd "Cx <left>") 'windmove-left-cycle) 

MnMp对我来说最有意义,因为它们类似于Cn下一行 )和Cp前一行 ):

 (define-key global-map (kbd "Mp") 'previous-multiframe-window) (define-key global-map (kbd "Mn") 'other-window) 

(受这个和那个启发)

已经有一个包可以让你通过使用M-来切换窗口。 检查这个网站 。 将此添加到您的init文件中:

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

在Nate的答案中,我用arrow keys代替了传统的pn代表downf代表rightb代表left 。 我也用Ctrl键replace了Ctrl键,因为Cp, Cn, Cf and Cb是默认的移动键。 与M组合使您可以跳过字符和线条,而不必在每次击键后逐一进行。 因此, Super键感觉最好的select,以保持一个简单的键绑定。 而且,现在你不必再把手从家里排开了!

 (global-set-key (kbd "sp") `windmove-up) (global-set-key (kbd "sn") `windmove-down) (global-set-key (kbd "sf") `windmove-right) (global-set-key (kbd "sb") `windmove-left) 

希望能帮助到你!

 (global-unset-key (kbd "Mj")) (global-unset-key (kbd "Mk")) (global-set-key (kbd "Mj") (lambda () (interactive) (other-window 1))) (global-set-key (kbd "Mk") (lambda () (interactive) (other-window -1))) 

alt jalt k将循环访问可见缓冲区。 向前和向后,确切地说。