有关窗口管理的快捷键

我个人的爱好是横向分屏,左边写源码,右边 magit, shell, dired 等等。但是如果写代码的时候突然想查个帮助文档,就可能在右边打开一个 *Help* 缓冲区。如果要回到原来的界面,就要

  • C-x o 到右边,按 q 退出,然后 C-x o 到左边——总共操作 3 次,按下 7 个按键,太麻烦了;
  • 或者预先 C-x r w 把布局保存到寄存器,再 C-x r j 还原回来——不但要分心提前准备,还要按下 8 个按键,如果不是某些特定布局,真的有点 overkill 了。

我一直在找能够一键解决的方法,这是我在 EmacsWiki 上抄的一个管理窗口的命令

(defun close-and-kill-next-pane ()
  "If there are multiple windows, then close the other pane and kill the buffer in it also."
  (interactive)
  (other-window 1)
  (kill-this-buffer)
  (if (not (one-window-p))
      (delete-window)))

但是实际使用的时候却总是不尽如人意,虽然能一键关闭 *Help*,但是把右边原来的窗口也关了,要重新打开又需要一番手脚。

有没有一种方案能

  • 找到当前屏幕上的 *Help* 或者 *info* 窗口并关闭,保持分屏格局不变
  • 或者把 C-x o q C-x o 集合成一条命令,只要另外绑定一个按键就能完成

或者有其它方案?能聊聊你们是怎么配置提高窗口管理体验的吗?

试试winner-undo,绑定键C-c left-arrow

3 个赞

我的天哪,太感谢了。这么好用的预装功能为什么不是默认开启呢!

我都被折磨到开始写 display-buffer-alist 来管理窗口了,没想到仅仅一个 minor mode 把问题轻松解决。省下人生中宝贵的 10 个小时。

:heart_hands: :heart_hands: :heart_hands:

edit: typo

1 个赞

Emacs中处处有惊喜 :slight_smile:

试试 help-window-select,设置这个变量可以自动 focus 新的 Help window,这样直接按 q 就退出了,省了一步移动 C-x o

再推荐一个内置函数 tab-bar-history-back 作用和 winner-mode 的 undo 基本一样,不过它需要你开启 tab-bar mode,而不用开启 winner-mode。tab-bar-mode 主要作用还是提供了一个 tab 栏 (有点类似于 tmux 的 window 或者 DE/WM 的工作区,而不是 vscode 的那种 tab),可以顺便回退窗口历史算是甜菜。

我是tab-bar和winner-mode混用,前者保存常用的杂window,后者用于突发情况恢复