8

不自由な私を呼んでください、しかし私は潜在意識のC-x C-s神経質な痙攣にうんざりしています。私は頻繁にバッファーを切り替えていますが、別のバッファーに切り替えるとすぐに特定のバッファーを保存したいと思います。私はまだ Emacs-Lisp の基礎を学ぶ時間がありません。

これを行う方法、またはより良い解決策に関するヒントはありますか?

(関連するメモとして、一定時間アイドル状態になるとすぐに現在のバッファーを保存できる自動保存の回避策を見つけました。)

4

3 に答える 3

16

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ファイルなしでバッファを保存することを回避します。気になるバッファを切り替えるために使用するすべてのエントリポイントを把握する必要があります(私もお勧めしother-windowます)。

于 2009-09-12T01:41:35.223 に答える
6

私はemacslispに慣れていないのですが、これは私のテストでは機能します。

(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)
于 2009-09-12T00:46:04.547 に答える
2

いくつかのアイデア。

まず、save のようなコマンドを頻繁に呼び出す場合は、コマンドのキー バインディングを短くすることを検討してください。たとえば、私も同じ「けいれん」を持っていることに気付いたので、編集を保存する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)

もちろん、スイッチ バッファ機能をファンクション キーなどの別のキーにバインドして、1 回の操作で操作できるようにすることもできます。

@sethはアドバイスの使用について素晴らしいアイデアを持っていると思いましたが、ELisp のマニュアルではアドバイスをキー バインディングに使用しないように提案していることに気付きました。なぜそうなのかはよくわかりませんが、参考までにマニュアルが示唆していることです。

于 2009-09-12T01:35:39.780 に答える