Answers:
您可能还想尝试使用windmove,它可以让您基于几何导航到您选择的窗口。我的.emacs文件中包含以下内容,用于使用Cx箭头键更改窗口。
(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)
(windmove-default-keybindings)
会将这些函数绑定到SHIFT +上/下/左/右,我认为这比您的C-x
绑定更方便(这与previous-buffer
和next-buffer
.. lkahtz的默认绑定也有冲突:该(kbd)
函数允许您以字符串表示法指定键在更可读的语法,其也使用的Emacs当您使用C-h k
或C-h c
描述的结合。
windmove-default-keybindings
给指定与箭头键结合使用的其他修饰符;因此该功能对于使用班次选择模式的人仍然非常方便。
我个人更喜欢使用 window-number.el
要选择其他窗口,请使用Ctrl- x,Ctrl- j n
其中n是窗口的编号,每个窗口的modeline都会显示其编号,如屏幕截图所示。
只需下载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
,它在窗口中为您提供大数字...(按数字可切换窗口并还原显示。)
(来源:tapoueh.org)
C-x C-j
,因为这是dired-jump
if 的默认绑定(require 'dired-x)
。(看看M-x customize-group RET dired-keys RET
是否要覆盖它。)
switch-window.el
使用它,而是使用它C-x o
,并且当只有两个窗口处于活动状态时,它将选择另一个窗口。我认为重新绑定C-x o
该window-number
技巧是最明智的,您是正确的dired-jump
。就我个人而言,我很少进行窗口切换并使用C-x b
自己,但是增强C-x o
功能非常令人满意。
如果您经常使用多个emacs窗口(> 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)
现在,只需使用Mo快速浏览窗户即可
other-window
以使其起作用。
这里有一些非常好的和完整的答案,但是要以简约的方式回答问题:
(defun prev-window ()
(interactive)
(other-window -1))
(define-key global-map (kbd "C-x p") 'prev-window)
previous-window
内置
M-x
因此应该用于其他目的。
基于@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)
M-n
而M-p
最有意义给我,因为他们是类似于C-n
(下一行)和C-p
(之前的线):
(define-key global-map (kbd "M-p") 'previous-multiframe-window)
(define-key global-map (kbd "M-n") 'other-window)
M-n
与M-p
已经在终端(GDB,蟒,ielm等)使用,因此,你必须切换回另一个方法跳转终端缓冲器的进行。
关于Nate的回答,我替换了arrow keys
使用传统p
的去up
,n
去down
,f
去right
和b
去left
。我还Ctrl
用Super
键替换了C-p, C-n, C-f and C-b
默认的移动键。这种结合M
使您可以跳字符和换行,而不是每次击键后仅一步一步地进行操作。因此,Super
密钥是保持简单的密钥绑定的最佳选择。而且,现在您不必再将手从本垒打了!
(global-set-key (kbd "s-p") `windmove-up)
(global-set-key (kbd "s-n") `windmove-down)
(global-set-key (kbd "s-f") `windmove-right)
(global-set-key (kbd "s-b") `windmove-left)
希望能帮助到你!
(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"
C-x z
重复上一个命令来快速切换窗口。