如何在退出时杀死ediff的缓冲区?


9

如何自动杀死(Cx k)ediff的(A,B,C)缓冲区ediff-quit


您是否真的要关闭缓冲区而不是关闭窗口,即通常返回到显示单个文件的单个窗口(但保持打开状态)?
吉尔斯(Gillles)“所以-别再邪恶了”

是的,我的意思是杀死缓冲区(Cx k)
否认2015年

您为什么要这样做?通常,当我执行ediff时,之后我需要继续在其中一个缓冲区上工作。
Andrew Swann 2015年

就我而言,我使用ztree-diff查看差异,并且大多数时候我对差异后的文件不感兴趣。
Alwyn Schoeman

Answers:


1
(defun my-kill-ediff-buffers ()
  (kill-buffer ediff-buffer-A)
  (kill-buffer ediff-buffer-B)
  (kill-buffer ediff-buffer-C))

(add-hook 'ediff-quit-hook 'my-kill-ediff-buffers)

请注意,这将始终杀死ediff缓冲区,即使ediff缓冲区没有打开它们也是如此,例如,您调用ediff-buffers了一些已经打开的缓冲区。

如果你愿意,你也可以杀死*ediff-errors**ediff-diff**Ediff-Registry**ediff-fine-diff*为好,但这些一般不打扰我。


2

我要添加一个答案,因为这是在该主题上弹出的第一个链接,而且确实很简单。

您可以将前缀传递给“ q”,它将提示杀死ediff缓冲区。

铜q

如果自定义ediff-keep-variants,它将逆转行为:提示在退出时杀死缓冲区,如果使用前缀,将使它们保持打开状态。

(从ediff手册中获得此信息)


1

我正在使用此代码(GNU Emacs 25.3.1 x86_64-pc-linux-gnu),遵循https://emacs.stackexchange.com/a/17089/18662

如GNU Emacs手册中有关ediff-quit-hookhttps://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html)所述:

请记住,在ediff-cleanup-mess开始于ediff-control-buffer之前执行的钩子;完成后,还应将ediff-control-buffer保留为当前缓冲区。在ediff-cleanup-mess之后执行的钩子应该期望当前缓冲区是缓冲区A或缓冲区B。

因此,我也杀死了* Ediff控制面板*缓冲区。也可以添加其他ediff缓冲区。

(setq ediff-window-setup-function 'ediff-setup-windows-plain)
(setq ediff-split-window-function 'split-window-horizontally)

(defvar q-ediff-last-windows nil)

(defun q-store-pre-ediff-winconfig ()
    (setq q-ediff-last-windows (current-window-configuration)))

(defun q-restore-pre-ediff-winconfig ()
    (progn
       (set-window-configuration q-ediff-last-windows)
       (ediff-kill-buffer-carefully "*Ediff Control Panel*")))

(add-hook 'ediff-before-setup-hook #'q-store-pre-ediff-winconfig)
(add-hook 'ediff-quit-hook #'q-restore-pre-ediff-winconfig)

0

您可以尝试以下钩子:

 (add-hook 'ediff-load-hook
            (lambda ()
              (add-hook 'ediff-before-setup-hook
                        (lambda ()
                          (setq ediff-before-file (buffer-file-name))
                          (setq ediff-saved-window-configuration (current-window-configuration))))
              (let ((restore-window-configuration
                     (lambda ()
                       (set-window-configuration ediff-saved-window-configuration))))
                (add-hook 'ediff-quit-hook restore-window-configuration 'append)
                (add-hook 'ediff-suspend-hook restore-window-configuration 'append))))

2
不建议将lambda函数绑定到钩子(和建议)。它使检查钩子变量和从钩子中删除函数变得很痛苦。
Kaushal Modi 2015年

2
这有效地关闭了窗口,但问题是要杀死缓冲区
吉尔(Gilles)'所以

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.