Как заставить Emacs сохранять, даже если он думает (не нужно сохранять изменения) - PullRequest
16 голосов
/ 09 июля 2010

Это происходит со мной постоянно:

  • У меня есть файл, открытый в emacs,
  • Я сохраняю его ('save-buffer),
  • файл изменяется на диске (или get удаляется, перемещается и т. д.)
  • , но я хочу вернуть его обратно, поэтому я пытаюсь снова сохранить в emacs ('save-buffer), и вместо сохранения он говорит "(нетизменения должны быть сохранены) "и ничего не делает.

Есть ли другая функция или настройка, которую я могу использовать, чтобы заставить emacs сохранить?

Ответы [ 5 ]

18 голосов
/ 10 июля 2010

Оберните функцию вокруг буфера сохранения, который помечает буфер, измененный первым:

(defun save-buffer-always ()
  "Save the buffer even if it is not modified."
  (interactive)
  (set-buffer-modified-p t)
  (save-buffer))
15 голосов
/ 09 июля 2010

Вы можете сохранить как, с C-x C-w. Это должно сохранить безоговорочно. Вы также можете просто ввести пробел, а затем вернуться на него. Emacs достаточно умен, чтобы понимать, что если вы отмените все, что вы сделали до сих пор, буфер не изменится, но если вы внесете изменения, а затем вручную вернете их, он будет считать, что буфер был изменен.

8 голосов
/ 10 июля 2010

Вы можете пометить текущий буфер как измененный с помощью функции Emacs-Lisp без изменений с префиксом arg, привязанным к:

C-u M-~

Ответ выше не сработает, если вы не вызовете новую функцию напрямую. Если вы хотите плавно изменить поведение сохранения Emacs. Лучшее решение - создать совет:

(defadvice save-buffer (before save-buffer-always activate)
  "always save buffer"
  (set-buffer-modified-p t))
0 голосов
/ 20 ноября 2014

Похожая проблема вывела меня в интернет в поисках решения. Затем мне кажется, что все, что мне нужно сделать, это ввести пробел (или любой символ) и удалить его, который помечает буфер как измененный. Тогда я могу набрать C-x C-s как обычно. Может быть, не сложный или продвинутый, но это работает.

0 голосов
/ 10 июля 2010

Как небольшая альтернатива ответу Скоттфразера:

(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, конечно.

...