叫我跛脚,但我厌倦了我的潜意识 C-x C-s 紧张的抽搐。我经常切换缓冲区,我想我一旦切换到另一个就想保存一个缓冲区。我还没来得及学习Emacs-Lisp的基础知识。

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

(在相关的说明中,我找到了一个自动保存解决方法,可以将当前缓冲区保存为一旦你在一段时间内闲着,就很快。)

有帮助吗?

解决方案

扩展 Seth 回答,我会这样做:

(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 可避免保存缓冲区w / out文件。你需要找出你用来切换你关心的缓冲区的所有入口点(我还建议 other-window )。

其他提示

我自己是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)

一些想法。

首先,如果您发现自己调用了具有足够高频率的保存命令,则可以考虑对该命令使用较短的键绑定。例如,我也发现自己有相同的“抽搐”,所以现在我用 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)

现在,关于主要问题。您可以尝试这样的事情(注意 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)

当然,您也可以将交换缓冲区功能绑定到另一个键,如功能键,这样就可以进行一次按键操作。

我认为 @seth 对使用建议有一个好主意,但我注意到ELisp手册建议< a href =“http://www.gnu.org/software/emacs/manual/html_mono/elisp.html.gz#Advising-Functions”rel =“nofollow noreferrer”>建议不能用于密钥绑定 。我不太确定为什么会这样,但这就是手册建议FYI。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top