关闭缓冲区后显示Emacs缓冲区

时间:2011-05-20 05:29:40

标签: emacs

如何修改emacs选择关闭缓冲区后显示哪个缓冲区的方式?

当我有多个列显示相同的缓冲区,然后在其中一个缓冲区中打开另一个文件然后关闭新打开的缓冲区时,它不会切换回上一个缓冲区,而是切换回另一个缓冲区。

我将尝试用一个例子来解释:

  • 从* scratch *
  • 开始使用新的emacs
  • C-x 2(分成两列)
  • C-x C-f 1(找到文件1)
  • C-x o(切换到其他框架)
  • C-x b 1(找到文件1)
  • C-x C-f 2(找到文件2)
  • C-x k(杀灭缓冲区)

现在它切换到 scratch 但是我希望它再次在两个窗口中显示1,是否可以让emacs以这种方式运行?

3 个答案:

答案 0 :(得分:3)

这可能不是您问题的直接答案,但可能有所帮助。

Emacs管理其缓冲区列表,包括决定在您杀死缓冲区时显示哪个缓冲区(通过kill-buffer)。我没有研究它是如何完成的,而是documentation is "out there"。很多人都有created自定义buffer-stack管理魔法来改变emacs的工作方式,也许有些是基于贝叶斯分析,或者其他什么。你可以想象出可能性。

我从未考虑过改变emacs管理缓冲区的方式。相反,我只是将other-windowswitch-to-buffer绑定到简单的击键(C-x o,C-x b),我非常善于使用它们。

你可以为你想要的东西创建一个简单的函数:它应该破坏所有其他窗口,然后拆分窗口,以便在两者中显示当前缓冲区。幸运的是,emacs具有完全符合这些功能的功能。

(defun cheeso-show-buffer-two-windows ()
  "Close all other windows; then split, and show the current
buffer in both windows."
  (interactive)
  (delete-other-windows)
  (split-window-vertically))

将它绑定到击键,然后敲打,你就在那里。这是一个垂直分割 - 窗口以垂直堆栈显示。如果你想要它水平分割(窗口是并排的),那么替换......好吧,你知道。

答案 1 :(得分:0)

这也没有直接帮助,但Winner mode可能会帮助您获得您想要的位置。

答案 2 :(得分:0)

您使用的是tabbar模式吗?我有同样的问题,对我来说tabbar是原因。标签栏将功能tabbar-buffer-kill-buffer-hook添加到kill-buffer-hook。您可以使用(remove-hook 'kill-buffer-hook 'tabbar-buffer-kill-buffer-hook)删除它。

如果您不使用tabbar,请尝试M-x describe-variable kill-buffer-hook。此列表中的一个功能应该是弄乱你的缓冲区。