Emacs自动保存在切换缓冲区上

问题描述 投票:8回答:3

称我Call脚,但我已经厌倦了我的潜意识C-x C-s紧张的抽搐。我经常切换缓冲区,我想我想在切换到另一个缓冲区后立即保存一个缓冲区。我还没有时间学习Emacs-Lisp基础知识。

关于如何执行此操作的任何提示,或者更好的解决方案?

(在相关说明中,我发现autosave workaround可以在您闲置给定时间后立即保存当前缓冲区。)

emacs autosave
3个回答
16
投票

为了扩展Sethanswer,我会这样做:

(defadvice switch-to-buffer (before save-buffer-now activate)
  (when buffer-file-name (save-buffer)))
(defadvice other-window (before other-window-now activate)
  (when buffer-file-name (save-buffer)))
(defadvice other-frame (before other-frame-now activate)
  (when buffer-file-name (save-buffer)))

buffer-file-name的检查避免了保存没有文件的缓冲区。您需要找出所有用于切换缓冲区的入口点(我也建议other-window)。


6
投票

我对emacs lisp有点陌生,但这在我的测试中有效:

(defadvice switch-to-buffer (before save-buffer-now)
  (save-buffer))

(ad-activate 'switch-to-buffer)

虽然有点烦人,因为它是在每个缓冲区之后调用的(例如scratch)。因此,将此答案视为提示。

[要禁用它时,您需要致电:

(ad-disable-advice 'switch-to-buffer 'before 'save-buffer-now)
(ad-activate 'switch-to-buffer)

2
投票

一些想法。

首先,如果您发现自己以足够高的频率调用诸如保存之类的命令,则可以考虑使用较短的键绑定。例如,我还发现自己具有相同的“抽搐”,因此现在我使用f2而不是C-x C-s来保存编辑。

我绑定到f2的函数将无条件保存每个未保存的缓冲区。您可能会发现它有用:

(defun force-save-all ()
    "Unconditionally saves all unsaved buffers."
    (interactive)
    (save-some-buffers t))

(global-set-key [f2] 'force-save-all)

现在,讨论主要问题。您可以尝试这样的操作(注意已调用[C​​0]):

force-save-all

当然,您还可以将开关缓冲区功能绑定到另一个键,例如功能键,这样它就可以一键式操作。

我以为(defun my-switch-to-buffer (buffer) (interactive (list (read-buffer "Switch to buffer: " (cadr buffer-name-history) nil))) (force-save-all) (switch-to-buffer buffer)) (global-set-key "\C-xb" 'my-switch-to-buffer) 对于使用建议有一个很好的主意,但是我注意到ELisp手册建议使用@seth。我不太确定为什么会这样,但这就是手册所建议的。

© www.soinside.com 2019 - 2024. All rights reserved.