Это происходит со мной все время:
Существует ли другая функция или установка, которую я могу использовать, чтобы вынудить emacs сохранить?
Оберните функцию вокруг буфера сохранения, которая помечает буфер, который был изменен первым:
(defun save-buffer-always ()
"Save the buffer even if it is not modified."
(interactive)
(set-buffer-modified-p t)
(save-buffer))
В качестве небольшой альтернативы ответу Скоттфразера:
(defun my-save-buffer-always-sometimes (prefix)
"Save the buffer even if it is not modified."
(interactive "P")
(when prefix
(set-buffer-modified-p t))
(save-buffer))
Это было то, что вы можете принудительно сделать это, когда захотите, с префиксом (C-u C-x C-s
), но не излишне изменять файл в противном случае. Последняя измененная метка времени очень полезна (например, управление исходным кодом), что кажется стыдным изменять ее произвольно. YMMV, конечно.
Вы можете сохранить как, с помощью C-x C-w. Это должно сохранить безусловно. Вы также можете просто набрать пробел, а затем сделать обратный пробел. Emacs достаточно умён, чтобы понять, что если вы отмените всё, что вы сделали до сих пор, то в буфере не будет изменений, но если вы внесли изменения, а затем вручную отменили их, то буфер будет считаться изменённым.
Вы можете пометить текущий буфер как измененный с помощью функции Emacs-Lisp not-modified с префиксом arg, связанным с:
C-u M-~
Ответ выше не будет работать, если вы не вызываете новую функцию напрямую. Если вы хотите плавно изменить поведение сохранения emacs. Лучшим решением будет создать совет:
(defadvice save-buffer (before save-buffer-always activate)
"always save buffer"
(set-buffer-modified-p t))