windmove
是不是窗口多了之后,C-x o 跳得很累?是不是羡慕那些vim用户可以指明跳到上下左右的窗口(^WJ, ^WH...)?
那就用windmove吧。Emacs自带这个包,只要在你的.emacs中加入:
(windmove-default-keybindings)
然后就可以用S-<up>、S-<right>跳转到上面、右边的窗口了。
如果你用shift-selection-mode或者cua-mode,那么不想用Shift来做窗口跳转的话,将上面的配置改为:
(windmove-default-keybindings 'meta)
或者
(windmove-default-keybindings 'super)
windresize
是不是调整Emacs 的窗口大小比较烦: 快捷键记不住?一次不到位?既要调左右又要调上下?
那就用 windresize.el 吧,你只要配一个键到 windresize 命令就可以了,按一下进入调整窗口大小的交互模式:用上下左右键调整大小,用 i 调整步长,o键或者M-S-<up>/<left>跳到其它窗口,? 显示帮助,调整完了按RET退出即可。
winner-mode
是不是觉得Emacs 老乱蹦出窗口,搅乱你的布局?是不是有时候想最大化一个窗口,但C-x 1之后再想找回其它窗口就没办法了?
那就用winner-mode吧,这个也是Emacs自带,打开(winner-mode t)之后,就可以用C-x <left>和C-x <right>来对窗口布局实现undo/redo了!
如果想自定义按键,可以这样:
(setq winner-dont-bind-my-keys t)
(winner-mode t)
(global-set-key (kbd "<f11> C-z") 'winner-undo)
(global-set-key (kbd "<f11> C-y") 'winner-redo)
其它一些技巧(比如交换两个窗口的内容、固定一个窗口只显示某个buffer、按当前buffer名跳转)参见之前的这篇《[Emacs] 与窗口相关的笔记》。