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不同的窗口,请使用Ctrl – x , Ctrl – j 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)
Mn
和Mp
对我来说最有意义,因为它们类似于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
代替了传统的p
, n
代表down
, f
代表right
, b
代表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 j和alt k将循环访问可见缓冲区。 向前和向后,确切地说。