給我打電話跛腳,但我厭倦了我的潛意識C-x C-s
緊張抽搐。我經常切換緩衝區,我想我會在切換到另一個時立即保存某個緩衝區。我還沒有時間學習Emacs-Lisp基礎知識。Emacs自動保存在切換緩衝區
任何提示如何做到這一點,或更好的解決方案?
(與此相關的,我發現了一個autosave workaround可以,只要你有空閒的給定時間內保存當前的緩衝區。)
給我打電話跛腳,但我厭倦了我的潛意識C-x C-s
緊張抽搐。我經常切換緩衝區,我想我會在切換到另一個時立即保存某個緩衝區。我還沒有時間學習Emacs-Lisp基礎知識。Emacs自動保存在切換緩衝區
任何提示如何做到這一點,或更好的解決方案?
(與此相關的,我發現了一個autosave workaround可以,只要你有空閒的給定時間內保存當前的緩衝區。)
(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
)。
我有點新的Emacs Lisp自己,但此在我的測試工作:
(defadvice switch-to-buffer (before save-buffer-now)
(save-buffer))
(ad-activate 'switch-to-buffer)
這是一種惱人的,但因爲它的每一個緩衝後調用(如劃傷)。所以,考慮這個答案是一個提示。
當你想關閉它,你需要撥打:
(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手冊建議advice not be used for key bindings。我不太清楚爲什麼會出現這種情況,但這是手冊中提供的FYI的說明。
有趣。當我閱讀手冊時沒有看到關於鍵盤綁定的那部分內容。謝謝。 – seth 2009-09-12 05:02:23
這個解決方案的唯一問題是當你例如開始使用'ido-switch-buffer',你必須跟蹤你的函數的變化。 – 2009-09-15 10:08:56
這是真的,我想你可以將切換到緩衝區符號重新綁定到這個新函數(將原始文件保存在另一個符號中,例如原始保存到緩衝區) – 2009-09-15 21:11:04
+1從我那裏...忘了關於緩衝區文件-name – seth 2009-09-12 21:15:48
完美!謝謝:) 6年後,仍然是一個很好的答案 – 2016-03-02 11:50:42